diff --git a/openpype/tools/project_manager/project_manager/constants.py b/openpype/tools/project_manager/project_manager/constants.py index 7f9a859ac1..76d3d3cda1 100644 --- a/openpype/tools/project_manager/project_manager/constants.py +++ b/openpype/tools/project_manager/project_manager/constants.py @@ -1,3 +1,4 @@ +import re from Qt import QtCore @@ -5,3 +6,6 @@ IDENTIFIER_ROLE = QtCore.Qt.UserRole + 1 DUPLICATED_ROLE = QtCore.Qt.UserRole + 2 HIERARCHY_CHANGE_ABLE_ROLE = QtCore.Qt.UserRole + 3 REMOVED_ROLE = QtCore.Qt.UserRole + 4 + +NAME_ALLOWED_SYMBOLS = "a-zA-Z0-9_" +NAME_REGEX = re.compile("^[" + NAME_ALLOWED_SYMBOLS + "]*$") diff --git a/openpype/tools/project_manager/project_manager/delegates.py b/openpype/tools/project_manager/project_manager/delegates.py index bfd6cfaabb..18e3e2d81b 100644 --- a/openpype/tools/project_manager/project_manager/delegates.py +++ b/openpype/tools/project_manager/project_manager/delegates.py @@ -1,7 +1,7 @@ from Qt import QtWidgets, QtCore from .widgets import ( - RegexTextEdit, + NameTextEdit, FilterComboBox ) from .multiselection_combobox import MultiSelectionComboBox @@ -39,16 +39,9 @@ class NumberDelegate(QtWidgets.QStyledItemDelegate): # return super().updateEditorGeometry(editor, options, index) -class StringDelegate(QtWidgets.QStyledItemDelegate): - def __init__(self, regex, *args, **kwargs): - super(StringDelegate, self).__init__(*args, **kwargs) - self._regex = regex - +class NameDelegate(QtWidgets.QStyledItemDelegate): def createEditor(self, parent, option, index): - if self._regex: - editor = RegexTextEdit(self._regex, parent) - else: - editor = QtWidgets.QLineEdit(parent) + editor = NameTextEdit(parent) value = index.data(QtCore.Qt.EditRole) if value is not None: editor.setText(str(value)) diff --git a/openpype/tools/project_manager/project_manager/view.py b/openpype/tools/project_manager/project_manager/view.py index be7513de25..b782d27d47 100644 --- a/openpype/tools/project_manager/project_manager/view.py +++ b/openpype/tools/project_manager/project_manager/view.py @@ -2,7 +2,7 @@ from Qt import QtWidgets, QtCore from .delegates import ( NumberDelegate, - StringDelegate, + NameDelegate, TypeDelegate, ToolsDelegate ) @@ -10,9 +10,8 @@ from .delegates import ( from openpype.lib import ApplicationManager -class StringDef: - def __init__(self, regex=None): - self.regex = regex +class NameDef: + pass class NumberDef: @@ -63,7 +62,7 @@ class ToolsCache: class HierarchyView(QtWidgets.QTreeView): """A tree view that deselects on clicking on an empty area in the view""" column_delegate_defs = { - "name": StringDef(), + "name": NameDef(), "type": TypeDef(), "frameStart": NumberDef(1), "frameEnd": NumberDef(1), @@ -107,8 +106,8 @@ class HierarchyView(QtWidgets.QTreeView): column_delegates = {} column_key_to_index = {} for key, item_type in self.column_delegate_defs.items(): - if isinstance(item_type, StringDef): - delegate = StringDelegate(item_type.regex) + if isinstance(item_type, NameDef): + delegate = NameDelegate() elif isinstance(item_type, NumberDef): delegate = NumberDelegate( diff --git a/openpype/tools/project_manager/project_manager/widgets.py b/openpype/tools/project_manager/project_manager/widgets.py index 9ef5dfaf85..878033de27 100644 --- a/openpype/tools/project_manager/project_manager/widgets.py +++ b/openpype/tools/project_manager/project_manager/widgets.py @@ -1,10 +1,14 @@ +import re +from .constants import ( + NAME_ALLOWED_SYMBOLS, + NAME_REGEX +) from Qt import QtWidgets, QtCore -class RegexTextEdit(QtWidgets.QLineEdit): - def __init__(self, regex, *args, **kwargs): - super(RegexTextEdit, self).__init__(*args, **kwargs) - self._regex = regex +class NameTextEdit(QtWidgets.QLineEdit): + def __init__(self, *args, **kwargs): + super(NameTextEdit, self).__init__(*args, **kwargs) self.textChanged.connect(self._on_text_change)