From 614234f2f6a0bad9682fb08a65d4af67e42579ae Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Sep 2020 11:33:17 +0200 Subject: [PATCH 1/5] all items has attribute `label_widget` which may be set to None --- .../settings/settings/widgets/item_types.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index e589b89c0f..468ef6e1b0 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -775,7 +775,7 @@ class BooleanWidget(QtWidgets.QWidget, InputObject): label_widget = QtWidgets.QLabel(label) label_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) layout.addWidget(label_widget, 0) - self.label_widget = label_widget + self.label_widget = label_widget self.checkbox = QtWidgets.QCheckBox(self) spacer = QtWidgets.QWidget(self) @@ -861,7 +861,7 @@ class NumberWidget(QtWidgets.QWidget, InputObject): label = input_data["label"] label_widget = QtWidgets.QLabel(label) layout.addWidget(label_widget, 0) - self.label_widget = label_widget + self.label_widget = label_widget layout.addWidget(self.input_field, 1) @@ -946,7 +946,7 @@ class TextWidget(QtWidgets.QWidget, InputObject): label = input_data["label"] label_widget = QtWidgets.QLabel(label) layout.addWidget(label_widget, 0, **layout_kwargs) - self.label_widget = label_widget + self.label_widget = label_widget layout.addWidget(self.text_input, 1, **layout_kwargs) @@ -1021,7 +1021,7 @@ class PathInputWidget(QtWidgets.QWidget, InputObject): label = input_data["label"] label_widget = QtWidgets.QLabel(label) layout.addWidget(label_widget, 0) - self.label_widget = label_widget + self.label_widget = label_widget self.path_input = PathInput(self) self.setFocusProxy(self.path_input) @@ -1156,8 +1156,9 @@ class RawJsonWidget(QtWidgets.QWidget, InputObject): label = input_data["label"] label_widget = QtWidgets.QLabel(label) layout.addWidget(label_widget, 0, alignment=QtCore.Qt.AlignTop) - self.label_widget = label_widget - layout.addWidget(self.text_input, 1, alignment=QtCore.Qt.AlignTop) + self.label_widget = label_widget + + layout.addWidget(self.input_field, 1, alignment=QtCore.Qt.AlignTop) self.text_input.textChanged.connect(self._on_value_change) @@ -2014,6 +2015,7 @@ class ModifiableDict(QtWidgets.QWidget, InputObject): if as_widget: body_widget = None + self.label_widget = label_widget else: body_widget = ExpandingWidget(input_data["label"], self) main_layout.addWidget(body_widget) @@ -2903,7 +2905,7 @@ class PathWidget(QtWidgets.QWidget, SettingObject): label_widget = QtWidgets.QLabel(label) label_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) layout.addWidget(label_widget, 0, alignment=QtCore.Qt.AlignTop) - self.label_widget = label_widget + self.label_widget = label_widget self.content_widget = QtWidgets.QWidget(self) self.content_layout = QtWidgets.QVBoxLayout(self.content_widget) From 733c64831743d01fa94ae595b8385f238a241784 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Sep 2020 11:33:54 +0200 Subject: [PATCH 2/5] implemented `update_style` for all input objects the same --- .../settings/settings/widgets/item_types.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index 468ef6e1b0..40b2035e25 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -681,6 +681,36 @@ class InputObject(SettingObject): def hierarchical_style_update(self): self.update_style() + def _style_state(self): + if self.as_widget: + state = self.style_state( + False, + self._is_invalid, + False, + self._is_modified + ) + else: + state = self.style_state( + self.has_studio_override, + self.is_invalid, + self.is_overriden, + self.is_modified + ) + return state + + def update_style(self): + state = self._style_state() + if self._state == state: + return + + self._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) + def remove_overrides(self): self._is_overriden = False self._is_modified = False From a3b6c5c027a9fdadcdf9e4bde5ba3907d3d354f5 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Sep 2020 11:35:37 +0200 Subject: [PATCH 3/5] removed `update_style` from most of inputs --- .../settings/settings/widgets/item_types.py | 155 ------------------ 1 file changed, 155 deletions(-) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index 40b2035e25..308c2ef65c 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -823,35 +823,6 @@ class BooleanWidget(QtWidgets.QWidget, InputObject): # value as `value` the `_on_value_change` is not triggered self.checkbox.setChecked(value) - def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) - if self._state == state: - return - - if self._as_widget: - property_name = "input-state" - else: - property_name = "state" - - self.label_widget.setProperty(property_name, state) - self.label_widget.style().polish(self.label_widget) - self._state = state def item_value(self): return self.checkbox.isChecked() @@ -900,37 +871,6 @@ class NumberWidget(QtWidgets.QWidget, InputObject): def set_value(self, value): self.input_field.setValue(value) - def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) - if self._state == state: - return - - if self._as_widget: - property_name = "input-state" - widget = self.input_field - else: - property_name = "state" - widget = self.label_widget - - widget.setProperty(property_name, state) - widget.style().polish(widget) - def item_value(self): return self.input_field.value() @@ -988,37 +928,6 @@ class TextWidget(QtWidgets.QWidget, InputObject): else: self.text_input.setText(value) - def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) - - if self._state == state: - return - - if self._as_widget: - property_name = "input-state" - widget = self.text_input - else: - property_name = "state" - widget = self.label_widget - - widget.setProperty(property_name, state) - widget.style().polish(widget) def item_value(self): if self.multiline: @@ -1066,38 +975,6 @@ class PathInputWidget(QtWidgets.QWidget, InputObject): self.path_input.clear_end_path() super(PathInput, self).focusOutEvent(event) - def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) - - if self._state == state: - return - - if self._as_widget: - property_name = "input-state" - widget = self.path_input - else: - property_name = "state" - widget = self.label_widget - - widget.setProperty(property_name, state) - widget.style().polish(widget) - def item_value(self): return self.path_input.text() @@ -1203,38 +1080,6 @@ class RawJsonWidget(QtWidgets.QWidget, InputObject): self._is_invalid = self.text_input.has_invalid_value() return super(RawJsonWidget, self)._on_value_change(*args, **kwargs) - def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) - - if self._state == state: - return - - if self._as_widget: - property_name = "input-state" - widget = self.text_input - else: - property_name = "state" - widget = self.label_widget - - widget.setProperty(property_name, state) - widget.style().polish(widget) - def item_value(self): if self.is_invalid: return NOT_SET From 19138839428d4bb929fff45237df342596314782 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Sep 2020 11:36:27 +0200 Subject: [PATCH 4/5] all inputs object has attribute `input_field` --- .../settings/settings/widgets/item_types.py | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index 308c2ef65c..289690250f 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -798,7 +798,7 @@ class BooleanWidget(QtWidgets.QWidget, InputObject): layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(5) - if not self._as_widget: + if not self.as_widget: self.key = input_data["key"] if not label_widget: label = input_data["label"] @@ -807,25 +807,24 @@ class BooleanWidget(QtWidgets.QWidget, InputObject): layout.addWidget(label_widget, 0) self.label_widget = label_widget - self.checkbox = QtWidgets.QCheckBox(self) + self.input_field = QtWidgets.QCheckBox(self) spacer = QtWidgets.QWidget(self) - layout.addWidget(self.checkbox, 0) - layout.addWidget(spacer, 1) - spacer.setAttribute(QtCore.Qt.WA_TranslucentBackground) - self.setFocusProxy(self.checkbox) + layout.addWidget(self.input_field, 0) + layout.addWidget(spacer, 1) - self.checkbox.stateChanged.connect(self._on_value_change) + self.setFocusProxy(self.input_field) + + self.input_field.stateChanged.connect(self._on_value_change) def set_value(self, value): # Ignore value change because if `self.isChecked()` has same # value as `value` the `_on_value_change` is not triggered - self.checkbox.setChecked(value) - + self.input_field.setChecked(value) def item_value(self): - return self.checkbox.isChecked() + return self.input_field.isChecked() class NumberWidget(QtWidgets.QWidget, InputObject): @@ -897,14 +896,14 @@ class TextWidget(QtWidgets.QWidget, InputObject): layout.setSpacing(5) if self.multiline: - self.text_input = QtWidgets.QPlainTextEdit(self) + self.input_field = QtWidgets.QPlainTextEdit(self) else: - self.text_input = QtWidgets.QLineEdit(self) + self.input_field = QtWidgets.QLineEdit(self) if placeholder: - self.text_input.setPlaceholderText(placeholder) + self.input_field.setPlaceholderText(placeholder) - self.setFocusProxy(self.text_input) + self.setFocusProxy(self.input_field) layout_kwargs = {} if self.multiline: @@ -918,22 +917,21 @@ class TextWidget(QtWidgets.QWidget, InputObject): layout.addWidget(label_widget, 0, **layout_kwargs) self.label_widget = label_widget - layout.addWidget(self.text_input, 1, **layout_kwargs) + layout.addWidget(self.input_field, 1, **layout_kwargs) - self.text_input.textChanged.connect(self._on_value_change) + self.input_field.textChanged.connect(self._on_value_change) def set_value(self, value): if self.multiline: - self.text_input.setPlainText(value) + self.input_field.setPlainText(value) else: - self.text_input.setText(value) - + self.input_field.setText(value) def item_value(self): if self.multiline: - return self.text_input.toPlainText() + return self.input_field.toPlainText() else: - return self.text_input.text() + return self.input_field.text() class PathInputWidget(QtWidgets.QWidget, InputObject): @@ -962,21 +960,21 @@ class PathInputWidget(QtWidgets.QWidget, InputObject): layout.addWidget(label_widget, 0) self.label_widget = label_widget - self.path_input = PathInput(self) - self.setFocusProxy(self.path_input) - layout.addWidget(self.path_input, 1) + self.input_field = PathInput(self) + self.setFocusProxy(self.input_field) + layout.addWidget(self.input_field, 1) - self.path_input.textChanged.connect(self._on_value_change) + self.input_field.textChanged.connect(self._on_value_change) def set_value(self, value): - self.path_input.setText(value) + self.input_field.setText(value) def focusOutEvent(self, event): - self.path_input.clear_end_path() + self.input_field.clear_end_path() super(PathInput, self).focusOutEvent(event) def item_value(self): - return self.path_input.text() + return self.input_field.text() class RawJsonInput(QtWidgets.QPlainTextEdit): @@ -1049,15 +1047,15 @@ class RawJsonWidget(QtWidgets.QWidget, InputObject): layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(5) - self.text_input = RawJsonInput(self) - self.text_input.setSizePolicy( + self.input_field = RawJsonInput(self) + self.input_field.setSizePolicy( QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.MinimumExpanding ) - self.setFocusProxy(self.text_input) + self.setFocusProxy(self.input_field) - if not self._as_widget: + if not self.as_widget: self.key = input_data["key"] if not label_widget: label = input_data["label"] @@ -1067,17 +1065,17 @@ class RawJsonWidget(QtWidgets.QWidget, InputObject): layout.addWidget(self.input_field, 1, alignment=QtCore.Qt.AlignTop) - self.text_input.textChanged.connect(self._on_value_change) + self.input_field.textChanged.connect(self._on_value_change) def update_studio_values(self, parent_values): - self._is_invalid = self.text_input.has_invalid_value() + self._is_invalid = self.input_field.has_invalid_value() return super(RawJsonWidget, self).update_studio_values(parent_values) def set_value(self, value): - self.text_input.set_value(value) + self.input_field.set_value(value) def _on_value_change(self, *args, **kwargs): - self._is_invalid = self.text_input.has_invalid_value() + self._is_invalid = self.input_field.has_invalid_value() return super(RawJsonWidget, self)._on_value_change(*args, **kwargs) def item_value(self): From eadf08f0bbcd6981877d2afa203a80d151039a0d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Sep 2020 11:36:59 +0200 Subject: [PATCH 5/5] updated methed `update_style` for inputs where it is more complex --- .../settings/settings/widgets/item_types.py | 97 ++++++------------- 1 file changed, 29 insertions(+), 68 deletions(-) diff --git a/pype/tools/settings/settings/widgets/item_types.py b/pype/tools/settings/settings/widgets/item_types.py index 289690250f..e262960655 100644 --- a/pype/tools/settings/settings/widgets/item_types.py +++ b/pype/tools/settings/settings/widgets/item_types.py @@ -1469,29 +1469,16 @@ class ListWidget(QtWidgets.QWidget, InputObject): self.update_style() def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) + if not self.label_widget: + return + + state = self._style_state() if self._state == state: return - if self.label_widget: - self.label_widget.setProperty("state", state) - self.label_widget.style().polish(self.label_widget) + self._state = state + self.label_widget.setProperty("state", state) + self.label_widget.style().polish(self.label_widget) def item_value(self): output = [] @@ -1648,30 +1635,17 @@ class ListStrictWidget(QtWidgets.QWidget, InputObject): self.update_style() def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self._is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) + if not self.label_widget: + return + + state = self._style_state() if self._state == state: return - if self.label_widget: - self.label_widget.setProperty("state", state) - self.label_widget.style().polish(self.label_widget) + self._state = state + self.label_widget.setProperty("state", state) + self.label_widget.style().polish(self.label_widget) def item_value(self): output = [] @@ -1990,42 +1964,29 @@ class ModifiableDict(QtWidgets.QWidget, InputObject): self.update_style() def update_style(self): - if self._as_widget: - if not self.isEnabled(): - state = self.style_state(False, False, False, False) - else: - state = self.style_state( - False, - self.is_invalid, - False, - self._is_modified - ) - else: - state = self.style_state( - self.has_studio_override, - self.is_invalid, - self.is_overriden, - self.is_modified - ) + state = self._style_state() + if self._state == state: return + self._state = state + + if self.label_widget: + self.label_widget.setProperty("state", state) + self.label_widget.style().polish(self.label_widget) + + if not self.body_widget: + return + if state: child_state = "child-{}".format(state) else: child_state = "" - if self.body_widget: - self.body_widget.side_line_widget.setProperty("state", child_state) - self.body_widget.side_line_widget.style().polish( - self.body_widget.side_line_widget - ) - - if not self._as_widget: - self.label_widget.setProperty("state", state) - self.label_widget.style().polish(self.label_widget) - - self._state = state + self.body_widget.side_line_widget.setProperty("state", child_state) + self.body_widget.side_line_widget.style().polish( + self.body_widget.side_line_widget + ) def all_item_values(self): output = {}