products widget can filter by task ids

This commit is contained in:
Jakub Trllo 2025-02-18 18:14:17 +01:00
parent 22c86fcf69
commit 9cd7fe6253
2 changed files with 48 additions and 27 deletions

View file

@ -12,34 +12,35 @@ GROUP_TYPE_ROLE = QtCore.Qt.UserRole + 1
MERGED_COLOR_ROLE = QtCore.Qt.UserRole + 2 MERGED_COLOR_ROLE = QtCore.Qt.UserRole + 2
FOLDER_LABEL_ROLE = QtCore.Qt.UserRole + 3 FOLDER_LABEL_ROLE = QtCore.Qt.UserRole + 3
FOLDER_ID_ROLE = QtCore.Qt.UserRole + 4 FOLDER_ID_ROLE = QtCore.Qt.UserRole + 4
PRODUCT_ID_ROLE = QtCore.Qt.UserRole + 5 TASK_ID_ROLE = QtCore.Qt.UserRole + 5
PRODUCT_NAME_ROLE = QtCore.Qt.UserRole + 6 PRODUCT_ID_ROLE = QtCore.Qt.UserRole + 6
PRODUCT_TYPE_ROLE = QtCore.Qt.UserRole + 7 PRODUCT_NAME_ROLE = QtCore.Qt.UserRole + 7
PRODUCT_TYPE_ICON_ROLE = QtCore.Qt.UserRole + 8 PRODUCT_TYPE_ROLE = QtCore.Qt.UserRole + 8
PRODUCT_IN_SCENE_ROLE = QtCore.Qt.UserRole + 9 PRODUCT_TYPE_ICON_ROLE = QtCore.Qt.UserRole + 9
VERSION_ID_ROLE = QtCore.Qt.UserRole + 10 PRODUCT_IN_SCENE_ROLE = QtCore.Qt.UserRole + 10
VERSION_HERO_ROLE = QtCore.Qt.UserRole + 11 VERSION_ID_ROLE = QtCore.Qt.UserRole + 11
VERSION_NAME_ROLE = QtCore.Qt.UserRole + 12 VERSION_HERO_ROLE = QtCore.Qt.UserRole + 12
VERSION_NAME_EDIT_ROLE = QtCore.Qt.UserRole + 13 VERSION_NAME_ROLE = QtCore.Qt.UserRole + 13
VERSION_PUBLISH_TIME_ROLE = QtCore.Qt.UserRole + 14 VERSION_NAME_EDIT_ROLE = QtCore.Qt.UserRole + 14
VERSION_STATUS_NAME_ROLE = QtCore.Qt.UserRole + 15 VERSION_PUBLISH_TIME_ROLE = QtCore.Qt.UserRole + 15
VERSION_STATUS_SHORT_ROLE = QtCore.Qt.UserRole + 16 VERSION_STATUS_NAME_ROLE = QtCore.Qt.UserRole + 16
VERSION_STATUS_COLOR_ROLE = QtCore.Qt.UserRole + 17 VERSION_STATUS_SHORT_ROLE = QtCore.Qt.UserRole + 17
VERSION_STATUS_ICON_ROLE = QtCore.Qt.UserRole + 18 VERSION_STATUS_COLOR_ROLE = QtCore.Qt.UserRole + 18
VERSION_AUTHOR_ROLE = QtCore.Qt.UserRole + 19 VERSION_STATUS_ICON_ROLE = QtCore.Qt.UserRole + 19
VERSION_FRAME_RANGE_ROLE = QtCore.Qt.UserRole + 20 VERSION_AUTHOR_ROLE = QtCore.Qt.UserRole + 20
VERSION_DURATION_ROLE = QtCore.Qt.UserRole + 21 VERSION_FRAME_RANGE_ROLE = QtCore.Qt.UserRole + 21
VERSION_HANDLES_ROLE = QtCore.Qt.UserRole + 22 VERSION_DURATION_ROLE = QtCore.Qt.UserRole + 22
VERSION_STEP_ROLE = QtCore.Qt.UserRole + 23 VERSION_HANDLES_ROLE = QtCore.Qt.UserRole + 23
VERSION_AVAILABLE_ROLE = QtCore.Qt.UserRole + 24 VERSION_STEP_ROLE = QtCore.Qt.UserRole + 24
VERSION_THUMBNAIL_ID_ROLE = QtCore.Qt.UserRole + 25 VERSION_AVAILABLE_ROLE = QtCore.Qt.UserRole + 25
ACTIVE_SITE_ICON_ROLE = QtCore.Qt.UserRole + 26 VERSION_THUMBNAIL_ID_ROLE = QtCore.Qt.UserRole + 26
REMOTE_SITE_ICON_ROLE = QtCore.Qt.UserRole + 27 ACTIVE_SITE_ICON_ROLE = QtCore.Qt.UserRole + 27
REPRESENTATIONS_COUNT_ROLE = QtCore.Qt.UserRole + 28 REMOTE_SITE_ICON_ROLE = QtCore.Qt.UserRole + 28
SYNC_ACTIVE_SITE_AVAILABILITY = QtCore.Qt.UserRole + 29 REPRESENTATIONS_COUNT_ROLE = QtCore.Qt.UserRole + 29
SYNC_REMOTE_SITE_AVAILABILITY = QtCore.Qt.UserRole + 30 SYNC_ACTIVE_SITE_AVAILABILITY = QtCore.Qt.UserRole + 30
SYNC_REMOTE_SITE_AVAILABILITY = QtCore.Qt.UserRole + 31
STATUS_NAME_FILTER_ROLE = QtCore.Qt.UserRole + 31 STATUS_NAME_FILTER_ROLE = QtCore.Qt.UserRole + 32
class ProductsModel(QtGui.QStandardItemModel): class ProductsModel(QtGui.QStandardItemModel):
@ -368,6 +369,7 @@ class ProductsModel(QtGui.QStandardItemModel):
""" """
model_item.setData(version_item.version_id, VERSION_ID_ROLE) model_item.setData(version_item.version_id, VERSION_ID_ROLE)
model_item.setData(version_item.task_id, TASK_ID_ROLE)
model_item.setData(version_item.version, VERSION_NAME_ROLE) model_item.setData(version_item.version, VERSION_NAME_ROLE)
model_item.setData(version_item.is_hero, VERSION_HERO_ROLE) model_item.setData(version_item.is_hero, VERSION_HERO_ROLE)
model_item.setData( model_item.setData(

View file

@ -17,6 +17,7 @@ from .products_model import (
GROUP_TYPE_ROLE, GROUP_TYPE_ROLE,
MERGED_COLOR_ROLE, MERGED_COLOR_ROLE,
FOLDER_ID_ROLE, FOLDER_ID_ROLE,
TASK_ID_ROLE,
PRODUCT_ID_ROLE, PRODUCT_ID_ROLE,
VERSION_ID_ROLE, VERSION_ID_ROLE,
VERSION_STATUS_NAME_ROLE, VERSION_STATUS_NAME_ROLE,
@ -40,6 +41,7 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
self._product_type_filters = None self._product_type_filters = None
self._statuses_filter = None self._statuses_filter = None
self._task_ids_filter = None
self._ascending_sort = True self._ascending_sort = True
def get_statuses_filter(self): def get_statuses_filter(self):
@ -47,6 +49,12 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
return None return None
return set(self._statuses_filter) return set(self._statuses_filter)
def set_tasks_filters(self, task_ids_filter):
if self._task_ids_filter == task_ids_filter:
return
self._task_ids_filter = task_ids_filter
self.invalidateFilter()
def set_product_type_filters(self, product_type_filters): def set_product_type_filters(self, product_type_filters):
if self._product_type_filters == product_type_filters: if self._product_type_filters == product_type_filters:
return return
@ -62,6 +70,8 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
def filterAcceptsRow(self, source_row, source_parent): def filterAcceptsRow(self, source_row, source_parent):
source_model = self.sourceModel() source_model = self.sourceModel()
index = source_model.index(source_row, 0, source_parent) index = source_model.index(source_row, 0, source_parent)
if not self._accept_task_ids_filter(index):
return False
if not self._accept_row_by_role_value( if not self._accept_row_by_role_value(
index, self._product_type_filters, PRODUCT_TYPE_ROLE index, self._product_type_filters, PRODUCT_TYPE_ROLE
@ -75,6 +85,12 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
return super().filterAcceptsRow(source_row, source_parent) return super().filterAcceptsRow(source_row, source_parent)
def _accept_task_ids_filter(self, index):
if not self._task_ids_filter:
return True
task_id = index.data(TASK_ID_ROLE)
return task_id in self._task_ids_filter
def _accept_row_by_role_value( def _accept_row_by_role_value(
self, self,
index: QtCore.QModelIndex, index: QtCore.QModelIndex,
@ -254,6 +270,9 @@ class ProductsWidget(QtWidgets.QWidget):
""" """
self._products_proxy_model.setFilterFixedString(name) self._products_proxy_model.setFilterFixedString(name)
def set_tasks_filters(self, task_ids):
self._products_proxy_model.set_tasks_filters(task_ids)
def set_statuses_filter(self, status_names): def set_statuses_filter(self, status_names):
"""Set filter of version statuses. """Set filter of version statuses.