mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #719 from pypeclub/feature/696-pyblish-gui-sorting-instances-by-name
Sort instances by label in pyblish gui
This commit is contained in:
commit
850bf12da6
3 changed files with 47 additions and 21 deletions
|
|
@ -717,15 +717,18 @@ class InstanceModel(QtGui.QStandardItemModel):
|
|||
|
||||
def append(self, instance):
|
||||
new_item = InstanceItem(instance)
|
||||
families = new_item.data(Roles.FamiliesRole)
|
||||
group_item = self.group_items.get(families[0])
|
||||
if not group_item:
|
||||
group_item = GroupItem(families[0])
|
||||
self.appendRow(group_item)
|
||||
self.group_items[families[0]] = group_item
|
||||
self.group_created.emit(group_item.index())
|
||||
if new_item.is_context:
|
||||
self.appendRow(new_item)
|
||||
else:
|
||||
families = new_item.data(Roles.FamiliesRole)
|
||||
group_item = self.group_items.get(families[0])
|
||||
if not group_item:
|
||||
group_item = GroupItem(families[0])
|
||||
self.appendRow(group_item)
|
||||
self.group_items[families[0]] = group_item
|
||||
self.group_created.emit(group_item.index())
|
||||
|
||||
group_item.appendRow(new_item)
|
||||
group_item.appendRow(new_item)
|
||||
instance_id = instance.id
|
||||
self.instance_items[instance_id] = new_item
|
||||
|
||||
|
|
@ -842,6 +845,22 @@ class InstanceModel(QtGui.QStandardItemModel):
|
|||
)
|
||||
|
||||
|
||||
class InstanceSortProxy(QtCore.QSortFilterProxyModel):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(InstanceSortProxy, self).__init__(*args, **kwargs)
|
||||
# Do not care about lower/upper case
|
||||
self.setSortCaseSensitivity(QtCore.Qt.CaseInsensitive)
|
||||
|
||||
def lessThan(self, x_index, y_index):
|
||||
x_type = x_index.data(Roles.TypeRole)
|
||||
y_type = y_index.data(Roles.TypeRole)
|
||||
if x_type != y_type:
|
||||
if x_type == GroupType:
|
||||
return False
|
||||
return True
|
||||
return super(InstanceSortProxy, self).lessThan(x_index, y_index)
|
||||
|
||||
|
||||
class TerminalDetailItem(QtGui.QStandardItem):
|
||||
key_label_record_map = (
|
||||
("instance", "Instance"),
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ class PluginView(OverviewView):
|
|||
class InstanceView(OverviewView):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(InstanceView, self).__init__(*args, **kwargs)
|
||||
self.setSortingEnabled(True)
|
||||
self.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
self.viewport().setMouseTracking(True)
|
||||
self._pressed_group_index = None
|
||||
self._pressed_expander = None
|
||||
|
|
|
|||
|
|
@ -143,16 +143,18 @@ class Window(QtWidgets.QDialog):
|
|||
# TODO add parent
|
||||
overview_page = QtWidgets.QWidget()
|
||||
|
||||
instance_model = model.InstanceModel(controller)
|
||||
overview_instance_view = view.InstanceView(
|
||||
animated=settings.Animated, parent=overview_page
|
||||
)
|
||||
overview_instance_delegate = delegate.InstanceDelegate(
|
||||
parent=overview_instance_view
|
||||
)
|
||||
instance_model = model.InstanceModel(controller)
|
||||
instance_sort_proxy = model.InstanceSortProxy()
|
||||
instance_sort_proxy.setSourceModel(instance_model)
|
||||
|
||||
overview_instance_view.setItemDelegate(overview_instance_delegate)
|
||||
overview_instance_view.setModel(instance_model)
|
||||
overview_instance_view.setModel(instance_sort_proxy)
|
||||
|
||||
overview_plugin_view = view.PluginView(
|
||||
animated=settings.Animated, parent=overview_page
|
||||
|
|
@ -437,9 +439,7 @@ class Window(QtWidgets.QDialog):
|
|||
self.on_plugin_action_menu_requested
|
||||
)
|
||||
|
||||
instance_model.group_created.connect(
|
||||
overview_instance_view.expand
|
||||
)
|
||||
instance_model.group_created.connect(self.on_instance_group_created)
|
||||
|
||||
self.main_widget = main_widget
|
||||
|
||||
|
|
@ -461,6 +461,7 @@ class Window(QtWidgets.QDialog):
|
|||
self.plugin_model = plugin_model
|
||||
self.plugin_proxy = plugin_proxy
|
||||
self.instance_model = instance_model
|
||||
self.instance_sort_proxy = instance_sort_proxy
|
||||
|
||||
self.presets_button = presets_button
|
||||
|
||||
|
|
@ -586,6 +587,10 @@ class Window(QtWidgets.QDialog):
|
|||
|
||||
self.update_compatibility()
|
||||
|
||||
def on_instance_group_created(self, index):
|
||||
_index = self.instance_sort_proxy.mapFromSource(index)
|
||||
self.overview_instance_view.expand(_index)
|
||||
|
||||
def on_plugin_toggle(self, index, state=None):
|
||||
"""An item is requesting to be toggled"""
|
||||
if not index.data(Roles.IsOptionalRole):
|
||||
|
|
@ -982,11 +987,14 @@ class Window(QtWidgets.QDialog):
|
|||
|
||||
def on_passed_group(self, order):
|
||||
for group_item in self.instance_model.group_items.values():
|
||||
if self.overview_instance_view.isExpanded(group_item.index()):
|
||||
group_index = self.instance_sort_proxy.mapFromSource(
|
||||
group_item.index()
|
||||
)
|
||||
if self.overview_instance_view.isExpanded(group_index):
|
||||
continue
|
||||
|
||||
if group_item.publish_states & GroupStates.HasError:
|
||||
self.overview_instance_view.expand(group_item.index())
|
||||
self.overview_instance_view.expand(group_index)
|
||||
|
||||
for group_item in self.plugin_model.group_items.values():
|
||||
# TODO check only plugins from the group
|
||||
|
|
@ -996,19 +1004,16 @@ class Window(QtWidgets.QDialog):
|
|||
if order != group_item.order:
|
||||
continue
|
||||
|
||||
group_index = self.plugin_proxy.mapFromSource(group_item.index())
|
||||
if group_item.publish_states & GroupStates.HasError:
|
||||
self.overview_plugin_view.expand(
|
||||
self.plugin_proxy.mapFromSource(group_item.index())
|
||||
)
|
||||
self.overview_plugin_view.expand(group_index)
|
||||
continue
|
||||
|
||||
group_item.setData(
|
||||
{GroupStates.HasFinished: True},
|
||||
Roles.PublishFlagsRole
|
||||
)
|
||||
self.overview_plugin_view.collapse(
|
||||
self.plugin_proxy.mapFromSource(group_item.index())
|
||||
)
|
||||
self.overview_plugin_view.collapse(group_index)
|
||||
|
||||
def on_was_stopped(self):
|
||||
errored = self.controller.errored
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue