added user items to publisher comment

This commit is contained in:
Jakub Trllo 2025-11-06 14:56:54 +01:00
parent af70ab274a
commit fb632b44fd
4 changed files with 37 additions and 27 deletions

View file

@ -23,6 +23,7 @@ from ayon_core.tools.common_models import (
TaskItem,
FolderTypeItem,
TaskTypeItem,
UserItem,
)
if TYPE_CHECKING:
@ -295,6 +296,11 @@ class AbstractPublisherFrontend(AbstractPublisherCommon):
"""Get folder id from folder path."""
pass
@abstractmethod
def get_user_items(self) -> list[UserItem]:
""""Get user items for current project."""
pass
# --- Create ---
@abstractmethod
def get_creator_items(self) -> Dict[str, "CreatorItem"]:

View file

@ -11,7 +11,12 @@ from ayon_core.pipeline import (
registered_host,
get_process_id,
)
from ayon_core.tools.common_models import ProjectsModel, HierarchyModel
from ayon_core.tools.common_models import (
ProjectsModel,
HierarchyModel,
UsersModel,
UserItem,
)
from .models import (
PublishModel,
@ -98,7 +103,7 @@ class PublisherController(
self._create_model = CreateModel(self)
self._publish_model = PublishModel(self)
# Cacher of avalon documents
self._users_model = UsersModel(self)
self._projects_model = ProjectsModel(self)
self._hierarchy_model = HierarchyModel(self)
@ -562,6 +567,11 @@ class PublisherController(
def get_publish_errors_report(self):
return self._publish_model.get_publish_errors_report()
def get_user_items(self) -> list[UserItem]:
return self._users_model.get_user_items(
self.get_current_project_name()
)
def set_comment(self, comment):
"""Set comment from ui to pyblish context.

View file

@ -4,6 +4,8 @@ from typing import Any, Optional
from qtpy import QtCore, QtWidgets
from ayon_core.style import load_stylesheet
from ayon_core.tools.common_models import UserItem
from ayon_core.tools.utils.lib import generate_user_avatar
from ayon_core.tools.utils import (
BaseClickableFrame,
PlaceholderLineEdit,
@ -19,39 +21,29 @@ class ValueItemButton(BaseClickableFrame):
def __init__(
self,
widget_id: str,
value: str,
icon: Optional[dict[str, Any]],
item: UserItem,
parent: QtWidgets.QWidget,
):
super().__init__(parent)
title_widget = QtWidgets.QLabel(str(value), self)
icon = generate_user_avatar(item)
icon_widget = PixmapLabel(icon, self)
title_widget = QtWidgets.QLabel(item.full_name, self)
main_layout = QtWidgets.QHBoxLayout(self)
main_layout.setContentsMargins(5, 5, 5, 5)
main_layout.addWidget(icon_widget, 0)
main_layout.addWidget(title_widget, 1)
self._icon_widget = None
self._icon_widget = icon_widget
self._title_widget = title_widget
self._main_layout = main_layout
self._selected = False
self._filtered = False
self._value = value
self._item = item
self._widget_id = widget_id
if icon:
self.set_icon(icon)
def set_icon(self, icon: dict[str, Any]) -> None:
"""Set the icon for the widget."""
icon = get_qt_icon(icon)
pixmap = icon.pixmap(64, 64)
if self._icon_widget is None:
self._icon_widget = PixmapLabel(pixmap, self)
self._main_layout.insertWidget(0, self._icon_widget, 0)
else:
self._icon_widget.setPixmap(pixmap)
def is_filtered(self) -> bool:
return self._filtered
@ -62,7 +54,7 @@ class ValueItemButton(BaseClickableFrame):
self.setVisible(not filtered)
def get_value(self) -> str:
return self._value
return self._item.username
def set_selected(self, selected: bool) -> None:
"""Set the selection state of the widget."""
@ -180,7 +172,7 @@ class ValueItemsView(QtWidgets.QWidget):
pos = next_widget.pos()
self._scroll_area.ensureVisible(pos.x(), pos.y())
def set_items(self, items: list[dict[str, Any]]):
def set_items(self, items: list[UserItem]) -> None:
while self._content_layout.count() > 0:
item = self._content_layout.takeAt(0)
widget = item.widget()
@ -191,11 +183,11 @@ class ValueItemsView(QtWidgets.QWidget):
self._widgets_by_id = {}
self._last_selected_widget = None
for item in items:
widget_id = uuid.uuid4().hex
widget = ValueItemButton(
widget_id = item.username
widget = UserValueItemButton(
widget_id,
item["value"],
item.get("icon"),
item,
self,
)
widget.confirmed.connect(self._on_item_clicked)
@ -414,7 +406,7 @@ class CommentInput(QtWidgets.QWidget):
len(self.get_comment())
)
def set_user_items(self, items):
def set_user_items(self, items: list[UserItem]):
self._floating_hints_widget.set_items(items)
def eventFilter(self, obj, event):

View file

@ -881,6 +881,8 @@ class PublisherWindow(QtWidgets.QDialog):
self._update_publish_details_widget()
def _on_controller_reset(self):
user_items = self._controller.get_user_items()
self._comment_input.set_user_items(user_items)
self._first_reset, first_reset = False, self._first_reset
if self._tab_on_reset is not None:
self._tab_on_reset, new_tab = None, self._tab_on_reset