mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
card view widget is able to change active state
This commit is contained in:
parent
22c3142894
commit
c3641b380d
3 changed files with 22 additions and 41 deletions
|
|
@ -315,8 +315,9 @@ class CardWidget(BaseClickableFrame):
|
|||
|
||||
def set_selected(self, selected):
|
||||
"""Set card as selected."""
|
||||
if selected == self._selected:
|
||||
if selected is self._selected:
|
||||
return
|
||||
|
||||
self._selected = selected
|
||||
state = "selected" if selected else ""
|
||||
self.setProperty("state", state)
|
||||
|
|
@ -466,7 +467,7 @@ class InstanceCardWidget(CardWidget):
|
|||
self._active_checkbox = active_checkbox
|
||||
self._expand_btn = expand_btn
|
||||
|
||||
self._update_instance_context(context_info)
|
||||
self._update_instance_values(context_info)
|
||||
|
||||
def set_active_toggle_enabled(self, enabled):
|
||||
self._active_checkbox.setEnabled(enabled)
|
||||
|
|
@ -475,23 +476,16 @@ class InstanceCardWidget(CardWidget):
|
|||
def is_active(self):
|
||||
return self._active_checkbox.isChecked()
|
||||
|
||||
def set_active(self, new_value):
|
||||
def _set_active(self, new_value):
|
||||
"""Set instance as active."""
|
||||
checkbox_value = self._active_checkbox.isChecked()
|
||||
instance_value = self.instance.is_active
|
||||
|
||||
# First change instance value and them change checkbox
|
||||
# - prevent to trigger `active_changed` signal
|
||||
if instance_value != new_value:
|
||||
self.instance.is_active = new_value
|
||||
|
||||
if checkbox_value != new_value:
|
||||
self._active_checkbox.setChecked(new_value)
|
||||
|
||||
def update_instance(self, instance, context_info):
|
||||
"""Update instance object and update UI."""
|
||||
self.instance = instance
|
||||
self._update_instance_context(context_info)
|
||||
self._update_instance_values(context_info)
|
||||
|
||||
def _validate_context(self, context_info):
|
||||
valid = context_info.is_valid
|
||||
|
|
@ -527,10 +521,10 @@ class InstanceCardWidget(CardWidget):
|
|||
QtCore.Qt.NoTextInteraction
|
||||
)
|
||||
|
||||
def _update_instance_context(self, context_info):
|
||||
def _update_instance_values(self, context_info):
|
||||
"""Update instance data"""
|
||||
self._update_product_name()
|
||||
self.set_active(self.instance.is_active)
|
||||
self._set_active(self.instance.is_active)
|
||||
self._validate_context(context_info)
|
||||
|
||||
def _set_expanded(self, expanded=None):
|
||||
|
|
@ -544,7 +538,6 @@ class InstanceCardWidget(CardWidget):
|
|||
if new_value == old_value:
|
||||
return
|
||||
|
||||
self.instance.is_active = new_value
|
||||
self.active_changed.emit(self._id, new_value)
|
||||
|
||||
def _on_expend_clicked(self):
|
||||
|
|
@ -630,24 +623,25 @@ class InstanceCardView(AbstractInstanceView):
|
|||
return
|
||||
|
||||
widgets = self._get_selected_widgets()
|
||||
changed = False
|
||||
active_state_by_id = {}
|
||||
for widget in widgets:
|
||||
if not isinstance(widget, InstanceCardWidget):
|
||||
continue
|
||||
|
||||
instance_id = widget.id
|
||||
is_active = widget.is_active
|
||||
if value == -1:
|
||||
widget.set_active(not is_active)
|
||||
changed = True
|
||||
active_state_by_id[instance_id] = not is_active
|
||||
continue
|
||||
|
||||
_value = bool(value)
|
||||
if is_active is not _value:
|
||||
widget.set_active(_value)
|
||||
changed = True
|
||||
active_state_by_id[instance_id] = _value
|
||||
|
||||
if changed:
|
||||
self.active_changed.emit()
|
||||
if not active_state_by_id:
|
||||
return
|
||||
|
||||
self._controller.set_instances_active_state(active_state_by_id)
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.key() == QtCore.Qt.Key_Space:
|
||||
|
|
@ -838,14 +832,15 @@ class InstanceCardView(AbstractInstanceView):
|
|||
def _on_active_changed(self, group_name, instance_id, value):
|
||||
group_widget = self._widgets_by_group[group_name]
|
||||
instance_widget = group_widget.get_widget_by_item_id(instance_id)
|
||||
if instance_widget.is_selected:
|
||||
active_state_by_id = {}
|
||||
if not instance_widget.is_selected:
|
||||
active_state_by_id[instance_id] = value
|
||||
else:
|
||||
for widget in self._get_selected_widgets():
|
||||
if isinstance(widget, InstanceCardWidget):
|
||||
widget.set_active(value)
|
||||
else:
|
||||
self._select_item_clear(instance_id, group_name, instance_widget)
|
||||
self.selection_changed.emit()
|
||||
self.active_changed.emit()
|
||||
active_state_by_id[widget.id] = value
|
||||
|
||||
self._controller.set_instances_active_state(active_state_by_id)
|
||||
|
||||
def _on_widget_selection(self, instance_id, group_name, selection_type):
|
||||
"""Select specific item by instance id.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ from .product_info import ProductInfoWidget
|
|||
|
||||
|
||||
class OverviewWidget(QtWidgets.QFrame):
|
||||
active_changed = QtCore.Signal()
|
||||
create_requested = QtCore.Signal()
|
||||
convert_requested = QtCore.Signal()
|
||||
publish_tab_requested = QtCore.Signal()
|
||||
|
|
@ -125,13 +124,6 @@ class OverviewWidget(QtWidgets.QFrame):
|
|||
product_view_cards.double_clicked.connect(
|
||||
self.publish_tab_requested
|
||||
)
|
||||
# Active instances changed
|
||||
product_list_view.active_changed.connect(
|
||||
self._on_active_changed
|
||||
)
|
||||
product_view_cards.active_changed.connect(
|
||||
self._on_active_changed
|
||||
)
|
||||
# Instance context has changed
|
||||
product_attributes_widget.convert_requested.connect(
|
||||
self._on_convert_requested
|
||||
|
|
@ -312,11 +304,6 @@ class OverviewWidget(QtWidgets.QFrame):
|
|||
instances, context_selected, convertor_identifiers
|
||||
)
|
||||
|
||||
def _on_active_changed(self):
|
||||
if self._refreshing_instances:
|
||||
return
|
||||
self.active_changed.emit()
|
||||
|
||||
def _on_change_anim(self, value):
|
||||
self._create_widget.setVisible(True)
|
||||
self._product_attributes_wrap.setVisible(True)
|
||||
|
|
|
|||
|
|
@ -298,7 +298,6 @@ class ChangeViewBtn(PublishIconBtn):
|
|||
class AbstractInstanceView(QtWidgets.QWidget):
|
||||
"""Abstract class for instance view in creation part."""
|
||||
selection_changed = QtCore.Signal()
|
||||
active_changed = QtCore.Signal()
|
||||
# Refreshed attribute is not changed by view itself
|
||||
# - widget which triggers `refresh` is changing the state
|
||||
# TODO store that information in widget which cares about refreshing
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue