From cdb48823f3476cdb335c18d831b71e3151ecbbc3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Nov 2020 17:37:59 +0100 Subject: [PATCH 1/5] allow sorting on InstanceView --- pype/tools/pyblish_pype/view.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pype/tools/pyblish_pype/view.py b/pype/tools/pyblish_pype/view.py index 777871ca8e..3bdb0c25ea 100644 --- a/pype/tools/pyblish_pype/view.py +++ b/pype/tools/pyblish_pype/view.py @@ -27,6 +27,8 @@ class OverviewView(QtWidgets.QTreeView): self.setVerticalScrollMode(QtWidgets.QTreeView.ScrollPerPixel) self.setHeaderHidden(True) self.setRootIsDecorated(False) + self.setSortingEnabled(True) + self.sortByColumn(0, QtCore.Qt.AscendingOrder) self.setIndentation(0) if animated: self.setAnimated(True) From 788bd3bcb9cf19fab8d477b43ad8682a7028486d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Nov 2020 17:38:14 +0100 Subject: [PATCH 2/5] do not add context item under group item --- pype/tools/pyblish_pype/model.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/pype/tools/pyblish_pype/model.py b/pype/tools/pyblish_pype/model.py index ffcf9a6501..c00776e4fa 100644 --- a/pype/tools/pyblish_pype/model.py +++ b/pype/tools/pyblish_pype/model.py @@ -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 From 85105979427b2c5418f68629a0de385125b82874 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Nov 2020 17:38:28 +0100 Subject: [PATCH 3/5] implemented sorting proxy model for instances --- pype/tools/pyblish_pype/model.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pype/tools/pyblish_pype/model.py b/pype/tools/pyblish_pype/model.py index c00776e4fa..ec9689381e 100644 --- a/pype/tools/pyblish_pype/model.py +++ b/pype/tools/pyblish_pype/model.py @@ -845,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"), From e1b011c048e340f9e2869bdcada5684634fbc25b Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Nov 2020 17:38:58 +0100 Subject: [PATCH 4/5] sorting proxy model used in pyblish gui --- pype/tools/pyblish_pype/window.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/pype/tools/pyblish_pype/window.py b/pype/tools/pyblish_pype/window.py index 66015c4255..df1d8687d5 100644 --- a/pype/tools/pyblish_pype/window.py +++ b/pype/tools/pyblish_pype/window.py @@ -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 From d79078c4b9c3723b87e1780de81b4b005afc87b4 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Nov 2020 19:30:37 +0100 Subject: [PATCH 5/5] sorting only in instance view --- pype/tools/pyblish_pype/view.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pype/tools/pyblish_pype/view.py b/pype/tools/pyblish_pype/view.py index 3bdb0c25ea..7245393714 100644 --- a/pype/tools/pyblish_pype/view.py +++ b/pype/tools/pyblish_pype/view.py @@ -27,8 +27,6 @@ class OverviewView(QtWidgets.QTreeView): self.setVerticalScrollMode(QtWidgets.QTreeView.ScrollPerPixel) self.setHeaderHidden(True) self.setRootIsDecorated(False) - self.setSortingEnabled(True) - self.sortByColumn(0, QtCore.Qt.AscendingOrder) self.setIndentation(0) if animated: self.setAnimated(True) @@ -107,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