From 7896113e5a82bbf00bd2fee8146e3012f4638ce3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 27 Jan 2021 18:45:10 +0100 Subject: [PATCH] base widgets moved to base.py --- pype/tools/settings/settings/widgets/base.py | 94 +++++++++++++++++++ .../settings/settings/widgets/item_widgets.py | 91 ------------------ 2 files changed, 94 insertions(+), 91 deletions(-) create mode 100644 pype/tools/settings/settings/widgets/base.py diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py new file mode 100644 index 0000000000..8fb05048f2 --- /dev/null +++ b/pype/tools/settings/settings/widgets/base.py @@ -0,0 +1,94 @@ +from Qt import QtWidgets + + +class BaseWidget(QtWidgets.QWidget): + def __init__(self, entity, entity_widget): + self.entity = entity + self.entity_widget = entity_widget + + self.ignore_input_changes = entity_widget.ignore_input_changes + + self._style_state = None + + super(BaseWidget, self).__init__(entity_widget.content_widget) + + self.entity.on_change_callbacks.append(self._on_entity_change) + + self.label_widget = None + self.create_ui() + + @staticmethod + def get_style_state( + is_invalid, is_modified, has_project_override, has_studio_override + ): + """Return stylesheet state by intered booleans.""" + if is_invalid: + return "invalid" + if is_modified: + return "modified" + if has_project_override: + return "overriden" + if has_studio_override: + return "studio" + return "" + + def show_actions_menu(self, event): + print("Show actions for {}".format(self.entity.path)) + + +class InputWidget(BaseWidget): + def update_style(self): + state = self.get_style_state( + self.entity.is_invalid, + self.entity.has_unsaved_changes, + self.entity.has_project_override, + self.entity.has_studio_override + ) + if self._style_state == state: + return + + self._style_state = state + + self.input_field.setProperty("input-state", state) + self.input_field.style().polish(self.input_field) + if self.label_widget: + self.label_widget.setProperty("state", state) + self.label_widget.style().polish(self.label_widget) + + +class GUIWidget(BaseWidget): + separator_height = 2 + + def create_ui(self): + entity_type = self.entity["type"] + if entity_type == "label": + self._create_label_ui() + elif entity_type in ("separator", "splitter"): + self._create_separator_ui() + else: + raise KeyError("Unknown GUI type {}".format(entity_type)) + + self.entity_widget.add_widget_to_layout(self) + + def _create_label_ui(self): + self.setObjectName("LabelWidget") + + label = self.entity["label"] + label_widget = QtWidgets.QLabel(label, self) + + layout = QtWidgets.QHBoxLayout(self) + layout.setContentsMargins(0, 5, 0, 5) + layout.addWidget(label_widget) + + def _create_separator_ui(self): + splitter_item = QtWidgets.QWidget(self) + splitter_item.setObjectName("SplitterItem") + splitter_item.setMinimumHeight(self.separator_height) + splitter_item.setMaximumHeight(self.separator_height) + + layout = QtWidgets.QHBoxLayout(self) + layout.setContentsMargins(5, 5, 5, 5) + layout.addWidget(splitter_item) + + def _on_entity_change(self): + pass diff --git a/pype/tools/settings/settings/widgets/item_widgets.py b/pype/tools/settings/settings/widgets/item_widgets.py index 4d958229ac..a67dc3245a 100644 --- a/pype/tools/settings/settings/widgets/item_widgets.py +++ b/pype/tools/settings/settings/widgets/item_widgets.py @@ -31,97 +31,6 @@ from .lib import CHILD_OFFSET BTN_FIXED_SIZE = 20 -class BaseWidget(QtWidgets.QWidget): - def __init__(self, entity, entity_widget): - self.entity = entity - self.entity_widget = entity_widget - - self.ignore_input_changes = entity_widget.ignore_input_changes - - self._style_state = None - - super(BaseWidget, self).__init__(entity_widget.content_widget) - - self.entity.on_change_callbacks.append(self._on_entity_change) - - self.label_widget = None - self.create_ui() - - @staticmethod - def get_style_state( - is_invalid, is_modified, has_project_override, has_studio_override - ): - """Return stylesheet state by intered booleans.""" - if is_invalid: - return "invalid" - if is_modified: - return "modified" - if has_project_override: - return "overriden" - if has_studio_override: - return "studio" - return "" - - def show_actions_menu(self, event): - print("Show actions for {}".format(self.entity.path)) - - -class InputWidget(BaseWidget): - def update_style(self): - state = self.get_style_state( - self.entity.is_invalid, - self.entity.has_unsaved_changes, - self.entity.has_project_override, - self.entity.has_studio_override - ) - if self._style_state == state: - return - - self._style_state = state - - self.input_field.setProperty("input-state", state) - self.input_field.style().polish(self.input_field) - if self.label_widget: - self.label_widget.setProperty("state", state) - self.label_widget.style().polish(self.label_widget) - - -class GUIWidget(BaseWidget): - separator_height = 2 - - def create_ui(self): - entity_type = self.entity["type"] - if entity_type == "label": - self._create_label_ui() - elif entity_type in ("separator", "splitter"): - self._create_separator_ui() - else: - raise KeyError("Unknown GUI type {}".format(entity_type)) - - self.entity_widget.add_widget_to_layout(self) - - def _create_label_ui(self): - self.setObjectName("LabelWidget") - - label = self.entity["label"] - label_widget = QtWidgets.QLabel(label, self) - - layout = QtWidgets.QHBoxLayout(self) - layout.setContentsMargins(0, 5, 0, 5) - layout.addWidget(label_widget) - - def _create_separator_ui(self): - splitter_item = QtWidgets.QWidget(self) - splitter_item.setObjectName("SplitterItem") - splitter_item.setMinimumHeight(self.separator_height) - splitter_item.setMaximumHeight(self.separator_height) - - layout = QtWidgets.QHBoxLayout(self) - layout.setContentsMargins(5, 5, 5, 5) - layout.addWidget(splitter_item) - - def _on_entity_change(self): - pass class DictImmutableKeysWidget(BaseWidget):