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:
Milan Kolar 2020-11-17 19:47:30 +01:00 committed by GitHub
commit 850bf12da6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 21 deletions

View file

@ -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"),

View file

@ -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

View file

@ -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