fix validation of context in main window

This commit is contained in:
Jakub Trllo 2024-10-11 17:41:07 +02:00
parent c3aff4deb2
commit e2eb8260de
3 changed files with 59 additions and 4 deletions

View file

@ -35,7 +35,27 @@ class PublisherController(
Known topics:
"show.detailed.help" - Detailed help requested (UI related).
"show.card.message" - Show card message request (UI related).
"instances.refresh.finished" - Instances are refreshed.
# --- Create model ---
"create.model.reset" - Reset of create model.
"instances.create.failed" - Creation failed.
"convertors.convert.failed" - Convertor failed.
"instances.save.failed" - Save failed.
"instance.thumbnail.changed" - Thumbnail changed.
"instances.collection.failed" - Collection of instances failed.
"convertors.find.failed" - Convertor find failed.
"instances.create.failed" - Create instances failed.
"instances.remove.failed" - Remove instances failed.
"create.context.added.instance" - Create instance added to context.
"create.context.value.changed" - Create instance or context value
changed.
"create.context.pre.create.attrs.changed" - Pre create attributes
changed.
"create.context.create.attrs.changed" - Create attributes changed.
"create.context.publish.attrs.changed" - Publish attributes changed.
"create.context.removed.instance" - Instance removed from context.
"create.model.instances.context.changed" - Instances changed context.
like folder, task or variant.
# --- Publish model ---
"plugins.refresh.finished" - Plugins refreshed.
"publish.reset.finished" - Reset finished.
"controller.reset.started" - Controller reset started.

View file

@ -371,6 +371,8 @@ def merge_attr_defs(attr_defs: List[List[AbstractAttrDef]]):
class CreateModel:
_CONTEXT_KEYS = {"folderPath", "task", "variant", "productName"}
def __init__(self, controller: AbstractPublisherBackend):
self._log = None
self._controller: AbstractPublisherBackend = controller
@ -527,6 +529,12 @@ class CreateModel:
instance = self._get_instance_by_id(instance_id)
for key, value in changes.items():
instance[key] = value
self._emit_event(
"create.model.instances.context.changed",
{
"instance_ids": list(changes_by_instance_id.keys())
}
)
def get_convertor_items(self) -> Dict[str, ConvertorItem]:
return self._create_context.convertor_items_by_id
@ -1032,16 +1040,28 @@ class CreateModel:
return
instance_changes = {}
context_changed_ids = set()
for item in event.data["changes"]:
instance_id = None
if item["instance"]:
instance_id = item["instance"].id
instance_changes[instance_id] = item["changes"]
changes = item["changes"]
instance_changes[instance_id] = changes
if instance_id is None:
continue
if self._CONTEXT_KEYS.intersection(set(changes)):
context_changed_ids.add(instance_id)
self._emit_event(
"create.context.value.changed",
{"instance_changes": instance_changes},
)
if context_changed_ids:
self._emit_event(
"create.model.instances.context.changed",
{"instance_ids": list(context_changed_ids)},
)
def _cc_pre_create_attr_changed(self, event):
identifiers = event["identifiers"]

View file

@ -281,7 +281,19 @@ class PublisherWindow(QtWidgets.QDialog):
)
controller.register_event_callback(
"instances.refresh.finished", self._on_instances_refresh
"create.model.reset", self._on_create_model_reset
)
controller.register_event_callback(
"create.context.added.instance",
self._event_callback_validate_instances
)
controller.register_event_callback(
"create.context.removed.instance",
self._event_callback_validate_instances
)
controller.register_event_callback(
"create.model.instances.context.changed",
self._event_callback_validate_instances
)
controller.register_event_callback(
"publish.reset.finished", self._on_publish_reset
@ -936,13 +948,16 @@ class PublisherWindow(QtWidgets.QDialog):
self._set_footer_enabled(bool(all_valid))
def _on_instances_refresh(self):
def _on_create_model_reset(self):
self._validate_create_instances()
context_title = self._controller.get_context_title()
self.set_context_label(context_title)
self._update_publish_details_widget()
def _event_callback_validate_instances(self, _event):
self._validate_create_instances()
def _set_comment_input_visiblity(self, visible):
self._comment_input.setVisible(visible)
self._footer_spacer.setVisible(not visible)