mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
it is possible to catch invalid tasks on confirm submit
This commit is contained in:
parent
db1f2ce8c4
commit
c1304f4e69
1 changed files with 51 additions and 14 deletions
|
|
@ -472,6 +472,28 @@ class AssetsField(BaseClickableFrame):
|
|||
self.set_selected_items(self._origin_value)
|
||||
|
||||
|
||||
class TasksComboboxProxy(QtCore.QSortFilterProxyModel):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TasksComboboxProxy, self).__init__(*args, **kwargs)
|
||||
self._filter_empty = False
|
||||
|
||||
def set_filter_empty(self, filter_empty):
|
||||
if self._filter_empty is filter_empty:
|
||||
return
|
||||
self._filter_empty = filter_empty
|
||||
self.invalidate()
|
||||
|
||||
def filterAcceptsRow(self, source_row, parent_index):
|
||||
if self._filter_empty:
|
||||
model = self.sourceModel()
|
||||
source_index = model.index(
|
||||
source_row, self.filterKeyColumn(), parent_index
|
||||
)
|
||||
if not source_index.data(QtCore.Qt.DisplayRole):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
class TasksCombobox(QtWidgets.QComboBox):
|
||||
"""Combobox to show tasks for selected instances.
|
||||
|
||||
|
|
@ -492,7 +514,7 @@ class TasksCombobox(QtWidgets.QComboBox):
|
|||
self.setItemDelegate(delegate)
|
||||
|
||||
model = TasksModel(controller, True)
|
||||
proxy_model = QtCore.QSortFilterProxyModel()
|
||||
proxy_model = TasksComboboxProxy()
|
||||
proxy_model.setSourceModel(model)
|
||||
self.setModel(proxy_model)
|
||||
|
||||
|
|
@ -511,6 +533,14 @@ class TasksCombobox(QtWidgets.QComboBox):
|
|||
|
||||
self._text = None
|
||||
|
||||
def set_invalid_empty_task(self, invalid=True):
|
||||
self._proxy_model.set_filter_empty(invalid)
|
||||
if invalid:
|
||||
self._set_is_valid(False)
|
||||
self.set_text("< One or more subsets require Task selected >")
|
||||
else:
|
||||
self.set_text(None)
|
||||
|
||||
def set_multiselection_text(self, text):
|
||||
"""Change text shown when multiple different tasks are in context."""
|
||||
self._multiselection_text = text
|
||||
|
|
@ -600,7 +630,8 @@ class TasksCombobox(QtWidgets.QComboBox):
|
|||
self._ignore_index_change = True
|
||||
|
||||
self._model.set_asset_names(asset_names)
|
||||
self._proxy_model.invalidate()
|
||||
self._proxy_model.set_filter_empty(False)
|
||||
self._proxy_model.sort(0)
|
||||
|
||||
self._ignore_index_change = False
|
||||
|
||||
|
|
@ -646,6 +677,9 @@ class TasksCombobox(QtWidgets.QComboBox):
|
|||
asset_task_combinations (list): List of tuples. Each item in
|
||||
the list contain asset name and task name.
|
||||
"""
|
||||
self._proxy_model.set_filter_empty(False)
|
||||
self._proxy_model.sort(0)
|
||||
|
||||
if asset_task_combinations is None:
|
||||
asset_task_combinations = []
|
||||
|
||||
|
|
@ -1003,21 +1037,19 @@ class GlobalAttrsWidget(QtWidgets.QWidget):
|
|||
|
||||
project_name = self.controller.project_name
|
||||
subset_names = set()
|
||||
invalid_tasks = False
|
||||
for instance in self._current_instances:
|
||||
if variant_value is not None:
|
||||
instance["variant"] = variant_value
|
||||
|
||||
if asset_name is not None:
|
||||
instance["asset"] = asset_name
|
||||
instance.set_asset_invalid(False)
|
||||
|
||||
if task_name is not None:
|
||||
instance["task"] = task_name
|
||||
instance.set_task_invalid(False)
|
||||
|
||||
new_variant_value = instance.get("variant")
|
||||
new_asset_name = instance.get("asset")
|
||||
new_task_name = instance.get("task")
|
||||
if variant_value is not None:
|
||||
new_variant_value = variant_value
|
||||
|
||||
if asset_name is not None:
|
||||
new_asset_name = asset_name
|
||||
|
||||
if task_name is not None:
|
||||
new_task_name = task_name
|
||||
|
||||
asset_doc = asset_docs_by_name[new_asset_name]
|
||||
|
||||
|
|
@ -1026,7 +1058,9 @@ class GlobalAttrsWidget(QtWidgets.QWidget):
|
|||
new_variant_value, new_task_name, asset_doc, project_name
|
||||
)
|
||||
except TaskNotSetError:
|
||||
invalid_tasks = True
|
||||
instance.set_task_invalid(True)
|
||||
subset_names.add(instance["subset"])
|
||||
continue
|
||||
|
||||
subset_names.add(new_subset_name)
|
||||
|
|
@ -1043,10 +1077,13 @@ class GlobalAttrsWidget(QtWidgets.QWidget):
|
|||
|
||||
instance["subset"] = new_subset_name
|
||||
|
||||
if invalid_tasks:
|
||||
self.task_value_widget.set_invalid_empty_task()
|
||||
|
||||
self.subset_value_widget.set_value(subset_names)
|
||||
|
||||
self._set_btns_enabled(False)
|
||||
self._set_btns_visible(False)
|
||||
self._set_btns_visible(invalid_tasks)
|
||||
|
||||
self.instance_context_changed.emit()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue