mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-26 05:42:15 +01:00
proxy filter can filter by statuses
This commit is contained in:
parent
75e5c4a9fe
commit
bdceeeb62a
1 changed files with 36 additions and 3 deletions
|
|
@ -22,6 +22,7 @@ from .products_model import (
|
|||
VERSION_STATUS_COLOR_ROLE,
|
||||
VERSION_STATUS_ICON_ROLE,
|
||||
VERSION_THUMBNAIL_ID_ROLE,
|
||||
STATUS_NAME_FILTER_ROLE,
|
||||
)
|
||||
from .products_delegates import (
|
||||
VersionDelegate,
|
||||
|
|
@ -36,15 +37,23 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
|
|||
super(ProductsProxyModel, self).__init__(parent)
|
||||
|
||||
self._product_type_filters = {}
|
||||
self._statuses_filter = None
|
||||
self._ascending_sort = True
|
||||
|
||||
def set_product_type_filters(self, product_type_filters):
|
||||
self._product_type_filters = product_type_filters
|
||||
self.invalidateFilter()
|
||||
|
||||
def set_statuses_filter(self, statuses_filter):
|
||||
if self._statuses_filter == statuses_filter:
|
||||
return
|
||||
self._statuses_filter = statuses_filter
|
||||
self.invalidateFilter()
|
||||
|
||||
def filterAcceptsRow(self, source_row, source_parent):
|
||||
source_model = self.sourceModel()
|
||||
index = source_model.index(source_row, 0, source_parent)
|
||||
|
||||
product_types_s = source_model.data(index, PRODUCT_TYPE_ROLE)
|
||||
product_types = []
|
||||
if product_types_s:
|
||||
|
|
@ -53,8 +62,22 @@ class ProductsProxyModel(RecursiveSortFilterProxyModel):
|
|||
for product_type in product_types:
|
||||
if not self._product_type_filters.get(product_type, True):
|
||||
return False
|
||||
return super(ProductsProxyModel, self).filterAcceptsRow(
|
||||
source_row, source_parent)
|
||||
|
||||
if not self._accept_row_by_statuses(index):
|
||||
return False
|
||||
return super().filterAcceptsRow(source_row, source_parent)
|
||||
|
||||
def _accept_row_by_statuses(self, index):
|
||||
if self._statuses_filter is None:
|
||||
return True
|
||||
if not self._statuses_filter:
|
||||
return False
|
||||
|
||||
status_s = index.data(STATUS_NAME_FILTER_ROLE)
|
||||
for status in status_s.split("|"):
|
||||
if status in self._statuses_filter:
|
||||
return True
|
||||
return False
|
||||
|
||||
def lessThan(self, left, right):
|
||||
l_model = left.model()
|
||||
|
|
@ -211,10 +234,20 @@ class ProductsWidget(QtWidgets.QWidget):
|
|||
|
||||
Args:
|
||||
name (str): The string filter.
|
||||
"""
|
||||
|
||||
"""
|
||||
self._products_proxy_model.setFilterFixedString(name)
|
||||
|
||||
def set_statuses_filter(self, status_names):
|
||||
"""Set filter of version statuses.
|
||||
|
||||
Args:
|
||||
status_names (list[str]): The list of status names.
|
||||
|
||||
"""
|
||||
self._products_proxy_model.set_statuses_filter(status_names)
|
||||
self._version_delegate.set_statuses_filter(status_names)
|
||||
|
||||
def set_product_type_filter(self, product_type_filters):
|
||||
"""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue