From e771d4b887d5657c282e70eb99e1e7b667023c29 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 30 Apr 2021 12:40:41 +0200 Subject: [PATCH] different way how to define delegates with more abilities --- .../project_manager/delegates.py | 17 +++++++-- .../project_manager/project_manager/view.py | 36 ++++++++++++++----- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/delegates.py b/openpype/tools/project_manager/project_manager/delegates.py index 1102242199..a26fb17b29 100644 --- a/openpype/tools/project_manager/project_manager/delegates.py +++ b/openpype/tools/project_manager/project_manager/delegates.py @@ -2,10 +2,21 @@ from Qt import QtWidgets, QtCore class NumberDelegate(QtWidgets.QStyledItemDelegate): + def __init__(self, minimum, maximum, decimals, *args, **kwargs): + super(NumberDelegate, self).__init__(*args, **kwargs) + self.minimum = minimum + self.maximum = maximum + self.decimals = decimals + def createEditor(self, parent, option, index): - editor = QtWidgets.QSpinBox(parent) - editor.setMaximum(999999) - editor.setMinimum(0) + print(option.rect) + if self.decimals > 0: + editor = QtWidgets.QDoubleSpinBox(parent) + else: + editor = QtWidgets.QSpinBox(parent) + editor.setMinimum(self.minimum) + editor.setMaximum(self.maximum) + value = index.data(QtCore.Qt.DisplayRole) if value is not None: editor.setValue(value) diff --git a/openpype/tools/project_manager/project_manager/view.py b/openpype/tools/project_manager/project_manager/view.py index b17736d7b0..90e0e5289e 100644 --- a/openpype/tools/project_manager/project_manager/view.py +++ b/openpype/tools/project_manager/project_manager/view.py @@ -3,15 +3,27 @@ from Qt import QtWidgets, QtCore from .delegates import NumberDelegate, StringDelegate +class StringDef: + def __init__(self, regex=None): + self.regex = regex + + +class NumberDef: + def __init__(self, minimum=None, maximum=None, decimals=None): + self.minimum = 0 if minimum is None else minimum + self.maximum = 999999 if maximum is None else maximum + self.decimals = 0 if decimals is None else decimals + + class HierarchyView(QtWidgets.QTreeView): """A tree view that deselects on clicking on an empty area in the view""" column_delegate_defs = { - "name": StringDelegate, - "frameStart": NumberDelegate, - "frameEnd": NumberDelegate, - "fps": NumberDelegate, - "resolutionWidth": NumberDelegate, - "resolutionHeight": NumberDelegate + "name": StringDef(), + "frameStart": NumberDef(1), + "frameEnd": NumberDef(1), + "fps": NumberDef(1, decimals=2), + "resolutionWidth": NumberDef(0), + "resolutionHeight": NumberDef(0) } persistent_columns = [ "frameStart", @@ -32,8 +44,16 @@ class HierarchyView(QtWidgets.QTreeView): column_delegates = {} column_key_to_index = {} - for key, delegate_klass in self.column_delegate_defs.items(): - delegate = delegate_klass() + for key, item_type in self.column_delegate_defs.items(): + if isinstance(item_type, StringDef): + delegate = StringDelegate() + elif isinstance(item_type, NumberDef): + delegate = NumberDelegate( + item_type.minimum, + item_type.maximum, + item_type.decimals + ) + column = self._source_model.columns.index(key) self.setItemDelegateForColumn(column, delegate) column_delegates[key] = delegate