mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-26 13:52:15 +01:00
update pre-create attributes on change
This commit is contained in:
parent
cef35485ee
commit
7537cf8ebc
4 changed files with 75 additions and 8 deletions
|
|
@ -801,6 +801,11 @@ class CreateContext:
|
|||
def listen_to_value_changes(self, callback):
|
||||
self._event_hub.add_callback(VALUE_CHANGED_TOPIC, callback)
|
||||
|
||||
def listen_to_pre_create_attr_defs_change(self, callback):
|
||||
self._event_hub.add_callback(
|
||||
PRE_CREATE_ATTR_DEFS_CHANGED_TOPIC, callback
|
||||
)
|
||||
|
||||
def listen_to_create_attr_defs_change(self, callback):
|
||||
self._event_hub.add_callback(CREATE_ATTR_DEFS_CHANGED_TOPIC, callback)
|
||||
|
||||
|
|
|
|||
|
|
@ -265,6 +265,11 @@ class AbstractPublisherFrontend(AbstractPublisherCommon):
|
|||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_folder_id_from_path(self, folder_path: str) -> Optional[str]:
|
||||
"""Get folder id from folder path."""
|
||||
pass
|
||||
|
||||
# --- Create ---
|
||||
@abstractmethod
|
||||
def get_creator_items(self) -> Dict[str, "CreatorItem"]:
|
||||
|
|
@ -276,6 +281,21 @@ class AbstractPublisherFrontend(AbstractPublisherCommon):
|
|||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_creator_item_by_id(
|
||||
self, identifier: str
|
||||
) -> Optional["CreatorItem"]:
|
||||
"""Get creator item by identifier.
|
||||
|
||||
Args:
|
||||
identifier (str): Create plugin identifier.
|
||||
|
||||
Returns:
|
||||
Optional[CreatorItem]: Creator item or None.
|
||||
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_creator_icon(
|
||||
self, identifier: str
|
||||
|
|
|
|||
|
|
@ -374,6 +374,9 @@ class CreateModel:
|
|||
self._create_context.listen_to_value_changes(
|
||||
self._cc_value_changed
|
||||
)
|
||||
self._create_context.listen_to_pre_create_attr_defs_change(
|
||||
self._cc_pre_create_attr_changed
|
||||
)
|
||||
self._create_context.listen_to_create_attr_defs_change(
|
||||
self._cc_create_attr_changed
|
||||
)
|
||||
|
|
@ -386,7 +389,7 @@ class CreateModel:
|
|||
def get_creator_items(self) -> Dict[str, CreatorItem]:
|
||||
"""Creators that can be shown in create dialog."""
|
||||
if self._creator_items is None:
|
||||
self._creator_items = self._collect_creator_items()
|
||||
self._refresh_creator_items()
|
||||
return self._creator_items
|
||||
|
||||
def get_creator_item_by_id(
|
||||
|
|
@ -883,6 +886,21 @@ class CreateModel:
|
|||
|
||||
return output
|
||||
|
||||
def _refresh_creator_items(self, identifiers=None):
|
||||
if identifiers is None:
|
||||
self._creator_items = self._collect_creator_items()
|
||||
return
|
||||
|
||||
for identifier in identifiers:
|
||||
if identifier not in self._creator_items:
|
||||
continue
|
||||
creator = self._create_context.creators.get(identifier)
|
||||
if creator is None:
|
||||
continue
|
||||
self._creator_items[identifier] = (
|
||||
CreatorItem.from_creator(creator)
|
||||
)
|
||||
|
||||
def _cc_added_instance(self, event):
|
||||
instance_ids = {
|
||||
instance.id
|
||||
|
|
@ -919,6 +937,14 @@ class CreateModel:
|
|||
{"instance_changes": instance_changes},
|
||||
)
|
||||
|
||||
def _cc_pre_create_attr_changed(self, event):
|
||||
identifiers = event["identifiers"]
|
||||
self._refresh_creator_items(identifiers)
|
||||
self._emit_event(
|
||||
"create.context.pre.create.attrs.changed",
|
||||
{"identifiers": identifiers},
|
||||
)
|
||||
|
||||
def _cc_create_attr_changed(self, event):
|
||||
instance_ids = {
|
||||
instance.id
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
|
||||
self._folder_path = None
|
||||
self._product_names = None
|
||||
self._selected_creator = None
|
||||
self._selected_creator_identifier = None
|
||||
|
||||
self._prereq_available = False
|
||||
|
||||
|
|
@ -262,6 +262,10 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
controller.register_event_callback(
|
||||
"controller.reset.finished", self._on_controler_reset
|
||||
)
|
||||
controller.register_event_callback(
|
||||
"create.context.pre.create.attrs.changed",
|
||||
self._pre_create_attr_changed
|
||||
)
|
||||
|
||||
self._main_splitter_widget = main_splitter_widget
|
||||
|
||||
|
|
@ -512,6 +516,15 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
# Trigger refresh only if is visible
|
||||
self.refresh()
|
||||
|
||||
def _pre_create_attr_changed(self, event):
|
||||
if (
|
||||
self._selected_creator_identifier is None
|
||||
or self._selected_creator_identifier not in event["identifiers"]
|
||||
):
|
||||
return
|
||||
|
||||
self._set_creator_by_identifier(self._selected_creator_identifier)
|
||||
|
||||
def _on_folder_change(self):
|
||||
self._refresh_product_name()
|
||||
if self._context_change_is_enabled():
|
||||
|
|
@ -563,12 +576,13 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
self._set_creator_detailed_text(creator_item)
|
||||
self._pre_create_widget.set_creator_item(creator_item)
|
||||
|
||||
self._selected_creator = creator_item
|
||||
|
||||
if not creator_item:
|
||||
self._selected_creator_identifier = None
|
||||
self._set_context_enabled(False)
|
||||
return
|
||||
|
||||
self._selected_creator_identifier = creator_item.identifier
|
||||
|
||||
if (
|
||||
creator_item.create_allow_context_change
|
||||
!= self._context_change_is_enabled()
|
||||
|
|
@ -603,7 +617,7 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
return
|
||||
|
||||
# This should probably never happen?
|
||||
if not self._selected_creator:
|
||||
if not self._selected_creator_identifier:
|
||||
if self.product_name_input.text():
|
||||
self.product_name_input.setText("")
|
||||
return
|
||||
|
|
@ -625,11 +639,13 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
|
||||
folder_path = self._get_folder_path()
|
||||
task_name = self._get_task_name()
|
||||
creator_idenfier = self._selected_creator.identifier
|
||||
# Calculate product name with Creator plugin
|
||||
try:
|
||||
product_name = self._controller.get_product_name(
|
||||
creator_idenfier, variant_value, task_name, folder_path
|
||||
self._selected_creator_identifier,
|
||||
variant_value,
|
||||
task_name,
|
||||
folder_path
|
||||
)
|
||||
except TaskNotSetError:
|
||||
self._create_btn.setEnabled(False)
|
||||
|
|
@ -755,7 +771,7 @@ class CreateWidget(QtWidgets.QWidget):
|
|||
)
|
||||
|
||||
if success:
|
||||
self._set_creator(self._selected_creator)
|
||||
self._set_creator_by_identifier(self._selected_creator_identifier)
|
||||
self._variant_widget.setText(variant)
|
||||
self._controller.emit_card_message("Creation finished...")
|
||||
self._last_thumbnail_path = None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue