Merge branch 'develop' into bugfix/support-py37

This commit is contained in:
Jakub Trllo 2025-07-10 08:34:22 +02:00 committed by GitHub
commit 9348985af5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 175 additions and 8 deletions

View file

@ -53,6 +53,8 @@ class PublisherController(
changed.
"create.context.create.attrs.changed" - Create attributes changed.
"create.context.publish.attrs.changed" - Publish attributes changed.
"create.context.instance.requirement.changed" - Instance requirement
changed.
"create.context.removed.instance" - Instance removed from context.
"create.model.instances.context.changed" - Instances changed context.
like folder, task or variant.

View file

@ -217,6 +217,7 @@ class InstanceItem:
folder_path: Optional[str],
task_name: Optional[str],
is_active: bool,
is_mandatory: bool,
has_promised_context: bool,
):
self._instance_id: str = instance_id
@ -229,6 +230,7 @@ class InstanceItem:
self._folder_path: Optional[str] = folder_path
self._task_name: Optional[str] = task_name
self._is_active: bool = is_active
self._is_mandatory: bool = is_mandatory
self._has_promised_context: bool = has_promised_context
@property
@ -251,6 +253,10 @@ class InstanceItem:
def product_type(self):
return self._product_type
@property
def is_mandatory(self):
return self._is_mandatory
@property
def has_promised_context(self):
return self._has_promised_context
@ -304,6 +310,7 @@ class InstanceItem:
instance["folderPath"],
instance["task"],
instance["active"],
instance.is_mandatory,
instance.has_promised_context,
)
@ -476,6 +483,9 @@ class CreateModel:
self._create_context.add_publish_attr_defs_change_callback(
self._cc_publish_attr_changed
)
self._create_context.add_instance_requirement_change_callback(
self._cc_instance_requirement_changed
)
self._create_context.reset_finalization()
@ -1171,6 +1181,16 @@ class CreateModel:
event_data,
)
def _cc_instance_requirement_changed(self, event):
instance_ids = {
instance.id
for instance in event.data["instances"]
}
self._emit_event(
"create.model.instance.requirement.changed",
{"instance_ids": instance_ids},
)
def _get_allowed_creators_pattern(self) -> Union[Pattern, None]:
"""Provide regex pattern for configured creator labels in this context

View file

@ -482,6 +482,9 @@ class InstanceCardWidget(CardWidget):
if checkbox_value != new_value:
self._active_checkbox.setChecked(new_value)
def _set_is_mandatory(self, is_mandatory: bool) -> None:
self._active_checkbox.setVisible(not is_mandatory)
def update_instance(self, instance, context_info):
"""Update instance object and update UI."""
self.instance = instance
@ -525,6 +528,7 @@ class InstanceCardWidget(CardWidget):
"""Update instance data"""
self._update_product_name()
self._set_active(self.instance.is_active)
self._set_is_mandatory(self.instance.is_mandatory)
self._validate_context(context_info)
def _set_expanded(self, expanded=None):

View file

@ -132,6 +132,7 @@ class InstanceListItemWidget(QtWidgets.QWidget):
active_checkbox = NiceCheckbox(parent=self)
active_checkbox.setChecked(instance.is_active)
active_checkbox.setVisible(not instance.is_mandatory)
layout = QtWidgets.QHBoxLayout(self)
content_margins = layout.contentsMargins()
@ -151,6 +152,8 @@ class InstanceListItemWidget(QtWidgets.QWidget):
self._has_valid_context = None
self._checkbox_enabled = not instance.is_mandatory
self._set_valid_property(context_info.is_valid)
def mouseDoubleClickEvent(self, event):
@ -184,6 +187,10 @@ class InstanceListItemWidget(QtWidgets.QWidget):
self._active_checkbox.setChecked(new_value)
self._active_checkbox.blockSignals(False)
def is_checkbox_enabled(self) -> bool:
"""Checkbox can be changed by user."""
return self._checkbox_enabled
def update_instance(self, instance, context_info):
"""Update instance object."""
# Check product name
@ -192,6 +199,7 @@ class InstanceListItemWidget(QtWidgets.QWidget):
self._instance_label_widget.setText(html_escape(label))
# Check active state
self.set_active(instance.is_active)
self._set_is_mandatory(instance.is_mandatory)
# Check valid states
self._set_valid_property(context_info.is_valid)
@ -203,6 +211,10 @@ class InstanceListItemWidget(QtWidgets.QWidget):
def set_active_toggle_enabled(self, enabled):
self._active_checkbox.setEnabled(enabled)
def _set_is_mandatory(self, is_mandatory: bool) -> None:
self._checkbox_enabled = not is_mandatory
self._active_checkbox.setVisible(not is_mandatory)
class ListContextWidget(QtWidgets.QFrame):
"""Context (or global attributes) widget."""
@ -949,11 +961,17 @@ class InstanceListView(AbstractInstanceView):
return
active_by_id = {}
all_changed = True
for row in range(group_item.rowCount()):
item = group_item.child(row)
instance_id = item.data(INSTANCE_ID_ROLE)
if instance_id is not None:
widget = self._widgets_by_id.get(instance_id)
if widget is None:
continue
if widget.is_checkbox_enabled():
active_by_id[instance_id] = active
else:
all_changed = False
self._controller.set_instances_active_state(active_by_id)
@ -963,6 +981,10 @@ class InstanceListView(AbstractInstanceView):
if not self._instance_view.isExpanded(proxy_index):
self._instance_view.expand(proxy_index)
if not all_changed:
# If not all instances were changed, update group checkstate
self._update_group_checkstate(group_name)
def has_items(self):
if self._convertor_group_widget is not None:
return True

View file

@ -155,6 +155,10 @@ class OverviewWidget(QtWidgets.QFrame):
"create.model.instances.context.changed",
self._on_instance_context_change
)
controller.register_event_callback(
"create.model.instance.requirement.changed",
self._on_instance_requirement_changed
)
self._product_content_widget = product_content_widget
self._product_content_layout = product_content_layout
@ -352,6 +356,12 @@ class OverviewWidget(QtWidgets.QFrame):
)
def _on_instance_context_change(self, event):
self._refresh_instance_states(event["instance_ids"])
def _on_instance_requirement_changed(self, event):
self._refresh_instance_states(event["instance_ids"])
def _refresh_instance_states(self, instance_ids):
current_idx = self._product_views_layout.currentIndex()
for idx in range(self._product_views_layout.count()):
if idx == current_idx:
@ -361,7 +371,7 @@ class OverviewWidget(QtWidgets.QFrame):
widget.set_refreshed(False)
current_widget = self._product_views_layout.widget(current_idx)
current_widget.refresh_instance_states(event["instance_ids"])
current_widget.refresh_instance_states(instance_ids)
def _on_convert_requested(self):
self.convert_requested.emit()