create context selection is using hierarchy model

This commit is contained in:
Jakub Trllo 2024-02-28 15:15:18 +01:00
parent 1027a41e8a
commit c75c9d8d70
3 changed files with 72 additions and 17 deletions

View file

@ -1725,6 +1725,15 @@ class PublisherController(BasePublisherController):
def get_task_entity(self, project_name, task_id):
return self._hierarchy_model.get_task_entity(project_name, task_id)
# Publisher custom method
def get_folder_id_from_path(self, folder_path):
folder_item = self._hierarchy_model.get_folder_item_by_path(
self.project_name, folder_path
)
if folder_item:
return folder_item.entity_id
return None
# --- Publish specific callbacks ---
def get_context_title(self):
"""Get context title for artist shown at the top of main window."""

View file

@ -3,6 +3,7 @@ from qtpy import QtWidgets, QtCore, QtGui
from ayon_core.lib.events import QueuedEventSystem
from ayon_core.tools.utils import PlaceholderLineEdit
from ayon_core.tools.ayon_utils.models import HierarchyExpectedSelection
from ayon_core.tools.ayon_utils.widgets import FoldersWidget, TasksWidget
@ -43,7 +44,6 @@ class CreateSelectionModel(object):
return self._folder_id
def set_selected_folder(self, folder_id):
print(folder_id, self._folder_id)
if folder_id == self._folder_id:
return
@ -85,7 +85,10 @@ class CreateHierarchyController:
def __init__(self, controller):
self._event_system = QueuedEventSystem()
self._controller = controller
self._selection_model = CreateSelectionModel(controller)
self._selection_model = CreateSelectionModel(self)
self._expected_selection = HierarchyExpectedSelection(
self, handle_project=False
)
# Events system
@property
@ -97,7 +100,6 @@ class CreateHierarchyController:
if data is None:
data = {}
print("emit_event", topic, data, source)
self.event_system.emit(topic, data, source)
def register_event_callback(self, topic, callback):
@ -124,6 +126,21 @@ class CreateHierarchyController:
def set_selected_task(self, task_id, task_name):
self._selection_model.set_selected_task(task_id, task_name)
# Expected selection
def get_expected_selection_data(self):
return self._expected_selection.get_expected_selection_data()
def set_expected_selection(self, project_name, folder_id, task_name):
self._expected_selection.set_expected_selection(
project_name, folder_id, task_name
)
def expected_folder_selected(self, folder_id):
self._expected_selection.expected_folder_selected(folder_id)
def expected_task_selected(self, folder_id, task_name):
self._expected_selection.expected_task_selected(folder_id, task_name)
class CreateContextWidget(QtWidgets.QWidget):
folder_changed = QtCore.Signal()
@ -134,6 +151,7 @@ class CreateContextWidget(QtWidgets.QWidget):
self._controller = controller
self._enabled = True
self._last_project_name = None
self._last_folder_id = None
self._last_selected_task_name = None
@ -155,8 +173,12 @@ class CreateContextWidget(QtWidgets.QWidget):
hierarchy_controller = CreateHierarchyController(controller)
folders_widget = FoldersWidget(hierarchy_controller, self)
tasks_widget = TasksWidget(hierarchy_controller, self)
folders_widget = FoldersWidget(
hierarchy_controller, self, handle_expected_selection=True
)
tasks_widget = TasksWidget(
hierarchy_controller, self, handle_expected_selection=True
)
main_layout = QtWidgets.QVBoxLayout(self)
main_layout.setContentsMargins(0, 0, 0, 0)
@ -168,6 +190,7 @@ class CreateContextWidget(QtWidgets.QWidget):
folders_widget.selection_changed.connect(self._on_folder_change)
tasks_widget.selection_changed.connect(self._on_task_change)
current_context_btn.clicked.connect(self._on_current_context_click)
folder_filter_input.textChanged.connect(self._on_folder_filter_change)
self._folder_filter_input = folder_filter_input
self._current_context_btn = current_context_btn
@ -192,9 +215,12 @@ class CreateContextWidget(QtWidgets.QWidget):
folder_path = self._controller.current_asset_name
self._current_context_btn.setVisible(bool(folder_path))
def set_selected_context(self, folder_path, task_name):
self._folders_widget.set_selected_folder_path(folder_path)
self._tasks_widget.set_selected_task(task_name)
def set_selected_context(self, folder_id, task_name):
self._hierarchy_controller.set_expected_selection(
self._controller.project_name,
folder_id,
task_name
)
def is_enabled(self):
return self._enabled
@ -215,14 +241,27 @@ class CreateContextWidget(QtWidgets.QWidget):
self._clear_selection()
elif self._last_selected_task_name is not None:
self.set_selected_folder(self._last_folder_id)
self.select_task_name(self._last_selected_task_name)
self._hierarchy_controller.set_expected_selection(
self._last_project_name,
self._last_folder_id,
self._last_selected_task_name
)
def refresh(self):
self._last_project_name = self._controller.project_name
folder_id = self._last_folder_id
task_name = self._last_selected_task_name
if folder_id is None:
folder_path = self._controller.current_asset_name
folder_id = self._controller.get_folder_id_from_path(folder_path)
task_name = self._controller.current_task_name
self._hierarchy_controller.set_selected_project(
self._controller.project_name
self._last_project_name
)
self._folders_widget.set_project_name(self._last_project_name)
self._hierarchy_controller.set_expected_selection(
self._last_project_name, folder_id, task_name
)
self._folders_widget.set_project_name(self._controller.project_name)
def _clear_selection(self):
self._folders_widget.set_selected_folder(None)
@ -234,6 +273,12 @@ class CreateContextWidget(QtWidgets.QWidget):
self.task_changed.emit()
def _on_current_context_click(self):
# TODO implement
folder_path = self._controller.current_asset_name
task_name = self._controller.current_task_name
folder_id = self._controller.get_folder_id_from_path(folder_path)
self._hierarchy_controller.set_expected_selection(
self._last_project_name, folder_id, task_name
)
def _on_folder_filter_change(self, text):
self._folders_widget.set_name_filter(text)

View file

@ -322,7 +322,7 @@ class CreateWidget(QtWidgets.QWidget):
return self._controller.current_task_name
def _context_change_is_enabled(self):
return self._context_widget.isEnabled()
return self._context_widget.is_enabled()
def _get_asset_name(self):
folder_path = None
@ -335,7 +335,7 @@ class CreateWidget(QtWidgets.QWidget):
def _get_folder_id(self):
folder_id = None
if self._context_widget.isEnabled():
if self._context_widget.is_enabled():
folder_id = self._context_widget.get_selected_folder_id()
return folder_id
@ -352,7 +352,7 @@ class CreateWidget(QtWidgets.QWidget):
return task_name
def _set_context_enabled(self, enabled):
check_prereq = self._context_widget.isEnabled() != enabled
check_prereq = self._context_widget.is_enabled() != enabled
self._context_widget.set_enabled(enabled)
if check_prereq:
self._invalidate_prereq()
@ -404,8 +404,9 @@ class CreateWidget(QtWidgets.QWidget):
# data
self._refresh_creators()
folder_id = self._controller.get_folder_id_from_path(folder_path)
self._context_widget.update_current_context_btn()
self._context_widget.set_selected_context(folder_path, task_name)
self._context_widget.set_selected_context(folder_id, task_name)
self._invalidate_prereq_deffered()