mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #783 from ynput/bugfix/loader-tool-grouping
Loader tool: Fix filtering
This commit is contained in:
commit
564365ab00
3 changed files with 39 additions and 38 deletions
|
|
@ -140,12 +140,6 @@ class VersionComboBox(QtWidgets.QComboBox):
|
|||
self.value_changed.emit(self._product_id, value)
|
||||
|
||||
|
||||
class EditorInfo:
|
||||
def __init__(self, widget):
|
||||
self.widget = widget
|
||||
self.added = False
|
||||
|
||||
|
||||
class VersionDelegate(QtWidgets.QStyledItemDelegate):
|
||||
"""A delegate that display version integer formatted as version string."""
|
||||
|
||||
|
|
@ -154,7 +148,7 @@ class VersionDelegate(QtWidgets.QStyledItemDelegate):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self._editor_by_id: Dict[str, EditorInfo] = {}
|
||||
self._editor_by_id: Dict[str, VersionComboBox] = {}
|
||||
self._statuses_filter = None
|
||||
|
||||
def displayText(self, value, locale):
|
||||
|
|
@ -164,8 +158,8 @@ class VersionDelegate(QtWidgets.QStyledItemDelegate):
|
|||
|
||||
def set_statuses_filter(self, status_names):
|
||||
self._statuses_filter = set(status_names)
|
||||
for info in self._editor_by_id.values():
|
||||
info.widget.set_statuses_filter(status_names)
|
||||
for widget in self._editor_by_id.values():
|
||||
widget.set_statuses_filter(status_names)
|
||||
|
||||
def paint(self, painter, option, index):
|
||||
fg_color = index.data(QtCore.Qt.ForegroundRole)
|
||||
|
|
@ -229,11 +223,11 @@ class VersionDelegate(QtWidgets.QStyledItemDelegate):
|
|||
editor = VersionComboBox(product_id, parent)
|
||||
editor.setProperty("itemId", item_id)
|
||||
|
||||
self._editor_by_id[item_id] = EditorInfo(editor)
|
||||
|
||||
editor.value_changed.connect(self._on_editor_change)
|
||||
editor.destroyed.connect(self._on_destroy)
|
||||
|
||||
self._editor_by_id[item_id] = editor
|
||||
|
||||
return editor
|
||||
|
||||
def setEditorData(self, editor, index):
|
||||
|
|
@ -242,12 +236,10 @@ class VersionDelegate(QtWidgets.QStyledItemDelegate):
|
|||
# Current value of the index
|
||||
versions = index.data(VERSION_NAME_EDIT_ROLE) or []
|
||||
version_id = index.data(VERSION_ID_ROLE)
|
||||
|
||||
editor.update_versions(versions, version_id)
|
||||
editor.set_statuses_filter(self._statuses_filter)
|
||||
|
||||
item_id = editor.property("itemId")
|
||||
self._editor_by_id[item_id].added = True
|
||||
|
||||
def setModelData(self, editor, model, index):
|
||||
"""Apply the integer version back in the model"""
|
||||
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
|
||||
def get_product_item_indexes(self):
|
||||
return [
|
||||
item.index()
|
||||
self.indexFromItem(item)
|
||||
for item in self._items_by_id.values()
|
||||
]
|
||||
|
||||
|
|
@ -156,16 +156,18 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
if product_item is None:
|
||||
return
|
||||
|
||||
self.setData(
|
||||
product_item.index(), version_id, VERSION_NAME_EDIT_ROLE
|
||||
)
|
||||
index = self.indexFromItem(product_item)
|
||||
self.setData(index, version_id, VERSION_NAME_EDIT_ROLE)
|
||||
|
||||
def set_enable_grouping(self, enable_grouping):
|
||||
if enable_grouping is self._grouping_enabled:
|
||||
return
|
||||
self._grouping_enabled = enable_grouping
|
||||
# Ignore change if groups are not available
|
||||
self.refresh(self._last_project_name, self._last_folder_ids)
|
||||
self.refresh(
|
||||
self._last_project_name,
|
||||
self._last_folder_ids
|
||||
)
|
||||
|
||||
def flags(self, index):
|
||||
# Make the version column editable
|
||||
|
|
@ -454,7 +456,7 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
def get_last_project_name(self):
|
||||
return self._last_project_name
|
||||
|
||||
def refresh(self, project_name, folder_ids, status_names):
|
||||
def refresh(self, project_name, folder_ids):
|
||||
self._clear()
|
||||
|
||||
self._last_project_name = project_name
|
||||
|
|
@ -486,17 +488,9 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
}
|
||||
last_version_by_product_id = {}
|
||||
for product_item in product_items:
|
||||
all_versions = list(product_item.version_items.values())
|
||||
all_versions.sort()
|
||||
versions = [
|
||||
version_item
|
||||
for version_item in all_versions
|
||||
if status_names is None or version_item.status in status_names
|
||||
]
|
||||
if versions:
|
||||
last_version = versions[-1]
|
||||
else:
|
||||
last_version = all_versions[-1]
|
||||
versions = list(product_item.version_items.values())
|
||||
versions.sort()
|
||||
last_version = versions[-1]
|
||||
last_version_by_product_id[product_item.product_id] = (
|
||||
last_version
|
||||
)
|
||||
|
|
@ -543,10 +537,11 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
for product_name, product_items in groups.items():
|
||||
group_product_types |= {p.product_type for p in product_items}
|
||||
for product_item in product_items:
|
||||
group_product_types |= {
|
||||
group_status_names |= {
|
||||
version_item.status
|
||||
for version_item in product_item.version_items.values()
|
||||
}
|
||||
group_product_types.add(product_item.product_type)
|
||||
|
||||
if len(product_items) == 1:
|
||||
top_items.append(product_items[0])
|
||||
|
|
@ -589,13 +584,15 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
product_name, product_items = path_info
|
||||
(merged_color_hex, merged_color_qt) = self._get_next_color()
|
||||
merged_color = qtawesome.icon(
|
||||
"fa.circle", color=merged_color_qt)
|
||||
"fa.circle", color=merged_color_qt
|
||||
)
|
||||
merged_item = self._get_merged_model_item(
|
||||
product_name, len(product_items), merged_color_hex)
|
||||
merged_item.setData(merged_color, QtCore.Qt.DecorationRole)
|
||||
new_items.append(merged_item)
|
||||
|
||||
merged_product_types = set()
|
||||
merged_status_names = set()
|
||||
new_merged_items = []
|
||||
for product_item in product_items:
|
||||
item = self._get_product_model_item(
|
||||
|
|
@ -608,9 +605,21 @@ class ProductsModel(QtGui.QStandardItemModel):
|
|||
)
|
||||
new_merged_items.append(item)
|
||||
merged_product_types.add(product_item.product_type)
|
||||
merged_status_names |= {
|
||||
version_item.status
|
||||
for version_item in (
|
||||
product_item.version_items.values()
|
||||
)
|
||||
}
|
||||
|
||||
merged_item.setData(
|
||||
"|".join(merged_product_types), PRODUCT_TYPE_ROLE)
|
||||
"|".join(merged_product_types),
|
||||
PRODUCT_TYPE_ROLE
|
||||
)
|
||||
merged_item.setData(
|
||||
"|".join(merged_status_names),
|
||||
STATUS_NAME_FILTER_ROLE
|
||||
)
|
||||
if new_merged_items:
|
||||
merged_item.appendRows(new_merged_items)
|
||||
|
||||
|
|
|
|||
|
|
@ -186,11 +186,12 @@ class ProductsWidget(QtWidgets.QWidget):
|
|||
products_proxy_model.rowsInserted.connect(self._on_rows_inserted)
|
||||
products_proxy_model.rowsMoved.connect(self._on_rows_moved)
|
||||
products_model.refreshed.connect(self._on_refresh)
|
||||
products_model.version_changed.connect(self._on_version_change)
|
||||
products_view.customContextMenuRequested.connect(
|
||||
self._on_context_menu)
|
||||
products_view.selectionModel().selectionChanged.connect(
|
||||
products_view_sel_model = products_view.selectionModel()
|
||||
products_view_sel_model.selectionChanged.connect(
|
||||
self._on_selection_change)
|
||||
products_model.version_changed.connect(self._on_version_change)
|
||||
version_delegate.version_changed.connect(
|
||||
self._on_version_delegate_change
|
||||
)
|
||||
|
|
@ -321,8 +322,7 @@ class ProductsWidget(QtWidgets.QWidget):
|
|||
def _refresh_model(self):
|
||||
self._products_model.refresh(
|
||||
self._selected_project_name,
|
||||
self._selected_folder_ids,
|
||||
self._products_proxy_model.get_statuses_filter()
|
||||
self._selected_folder_ids
|
||||
)
|
||||
|
||||
def _on_context_menu(self, point):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue