From 7be0dec7e202bbde778133586d5bbfd75c491c9b Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:46:43 +0100 Subject: [PATCH 01/46] removed unused object name LabelWidget --- openpype/tools/settings/settings/base.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openpype/tools/settings/settings/base.py b/openpype/tools/settings/settings/base.py index 92fffe6f9c..75a3427040 100644 --- a/openpype/tools/settings/settings/base.py +++ b/openpype/tools/settings/settings/base.py @@ -470,8 +470,6 @@ class GUIWidget(BaseWidget): 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) @@ -513,8 +511,6 @@ class MockUpWidget(BaseWidget): child_invalid = False def create_ui(self): - self.setObjectName("LabelWidget") - label = "Mockup widget for entity {}".format(self.entity.path) label_widget = QtWidgets.QLabel(label, self) From d8caf89097922685d554862e802f12798b406e93 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:47:58 +0100 Subject: [PATCH 02/46] replaced btn-type with object name SettingsToolBtn --- .../tools/settings/settings/dict_mutable_widget.py | 6 +++--- openpype/tools/settings/settings/list_item_widget.py | 12 ++++++------ openpype/tools/settings/settings/style/style.css | 9 ++++++--- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/openpype/tools/settings/settings/dict_mutable_widget.py b/openpype/tools/settings/settings/dict_mutable_widget.py index 9afce7259e..1c62ccb121 100644 --- a/openpype/tools/settings/settings/dict_mutable_widget.py +++ b/openpype/tools/settings/settings/dict_mutable_widget.py @@ -81,7 +81,7 @@ class PaintHelper: def create_add_btn(parent): add_btn = QtWidgets.QPushButton("+", parent) add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - add_btn.setProperty("btn-type", "tool-item") + add_btn.setObjectName("SettingsToolBtn") add_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) return add_btn @@ -89,7 +89,7 @@ def create_add_btn(parent): def create_remove_btn(parent): remove_btn = QtWidgets.QPushButton("-", parent) remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - remove_btn.setProperty("btn-type", "tool-item") + remove_btn.setObjectName("SettingsToolBtn") remove_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) return remove_btn @@ -102,7 +102,7 @@ def create_confirm_btn(parent): ) confirm_btn.setIcon(icon) confirm_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - confirm_btn.setProperty("btn-type", "tool-item") + confirm_btn.setObjectName("SettingsToolBtn") confirm_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) return confirm_btn diff --git a/openpype/tools/settings/settings/list_item_widget.py b/openpype/tools/settings/settings/list_item_widget.py index 128af92631..cc539933ff 100644 --- a/openpype/tools/settings/settings/list_item_widget.py +++ b/openpype/tools/settings/settings/list_item_widget.py @@ -25,8 +25,8 @@ class EmptyListItem(QtWidgets.QWidget): add_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) remove_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - add_btn.setProperty("btn-type", "tool-item") - remove_btn.setProperty("btn-type", "tool-item") + add_btn.setObjectName("SettingsToolBtn") + remove_btn.setObjectName("SettingsToolBtn") layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) @@ -74,10 +74,10 @@ class ListItem(QtWidgets.QWidget): up_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) down_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - add_btn.setProperty("btn-type", "tool-item") - remove_btn.setProperty("btn-type", "tool-item") - up_btn.setProperty("btn-type", "tool-item") - down_btn.setProperty("btn-type", "tool-item") + add_btn.setObjectName("SettingsToolBtn") + remove_btn.setObjectName("SettingsToolBtn") + up_btn.setObjectName("SettingsToolBtn") + down_btn.setObjectName("SettingsToolBtn") add_btn.clicked.connect(self._on_add_clicked) remove_btn.clicked.connect(self._on_remove_clicked) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index b77b575204..0a9dcfb232 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -94,16 +94,19 @@ QPushButton:hover { border: 1px solid #fff; color: #fff; } -QPushButton[btn-type="tool-item"] { +#SettingsToolBtn { + background: transparent; border: 1px solid #bfccd6; border-radius: 10px; } - -QPushButton[btn-type="tool-item"]:hover { +#SettingsToolBtn:hover { border-color: #189aea; color: #46b1f3; background-color: transparent; } +#SettingsToolBtn:disabled { + background-color: #464b54; +} QPushButton[btn-type="tool-item-icon"] { border: 0px solid #bfccd6; From debe423b2320d9bd5848576e6f4b45a4d74725a9 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:49:07 +0100 Subject: [PATCH 03/46] replaced btn-type tool-item-icon with object name SettingsToolIconBtn --- openpype/tools/settings/settings/dict_mutable_widget.py | 2 +- openpype/tools/settings/settings/style/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/settings/dict_mutable_widget.py b/openpype/tools/settings/settings/dict_mutable_widget.py index 1c62ccb121..07d64263ce 100644 --- a/openpype/tools/settings/settings/dict_mutable_widget.py +++ b/openpype/tools/settings/settings/dict_mutable_widget.py @@ -375,7 +375,7 @@ class ModifiableDictItem(QtWidgets.QWidget): "fa.edit", QtCore.Qt.lightGray, QtCore.Qt.white ) edit_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - edit_btn.setProperty("btn-type", "tool-item-icon") + edit_btn.setObjectName("SettingsToolIconBtn") edit_btn.setFixedHeight(BTN_FIXED_SIZE) confirm_btn = create_confirm_btn(self) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index 0a9dcfb232..cde3ed86e8 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -108,7 +108,7 @@ QPushButton:hover { background-color: #464b54; } -QPushButton[btn-type="tool-item-icon"] { +#SettingsToolIconBtn { border: 0px solid #bfccd6; background-color: transparent; } From bf82d1f76e4bc900cb327883c0785481f7668c75 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:49:53 +0100 Subject: [PATCH 04/46] replaced btn-type expand-toggle with object name ExpandToggleBtn --- openpype/tools/settings/settings/style/style.css | 4 ++-- openpype/tools/settings/settings/widgets.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index cde3ed86e8..99da3b2fed 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -113,8 +113,8 @@ QPushButton:hover { background-color: transparent; } -QPushButton[btn-type="expand-toggle"] { - background: #21252B; +#ExpandToggleBtn { + background: transparent; } /* SLider */ diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index 710884e9e5..469c984a5e 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -180,7 +180,7 @@ class ExpandingWidget(QtWidgets.QWidget): button_size = QtCore.QSize(5, 5) button_toggle = QtWidgets.QToolButton(parent=side_line_widget) - button_toggle.setProperty("btn-type", "expand-toggle") + button_toggle.setObjectName("ExpandToggleBtn") button_toggle.setIconSize(button_size) button_toggle.setArrowType(QtCore.Qt.RightArrow) button_toggle.setCheckable(True) From 8c28fca43604a9b387eee7897e16e7d4cfdf7b08 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:50:14 +0100 Subject: [PATCH 05/46] renamed MainWidget object name to SettingsMainWidget --- openpype/tools/settings/settings/style/style.css | 2 +- openpype/tools/settings/settings/window.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index 99da3b2fed..e271eaf5ed 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -213,7 +213,7 @@ QSlider::handle:vertical { #SideLineWidget[state="child-overriden-modified"] {border-color: #106aa2;} #SideLineWidget[state="child-overriden-modified"]:hover {border-color: #189aea;} -#MainWidget { +#SettingsMainWidget { background: #141a1f; } diff --git a/openpype/tools/settings/settings/window.py b/openpype/tools/settings/settings/window.py index 4e88301349..3ee303cfe9 100644 --- a/openpype/tools/settings/settings/window.py +++ b/openpype/tools/settings/settings/window.py @@ -25,7 +25,7 @@ class MainWidget(QtWidgets.QWidget): self._password_dialog = None - self.setObjectName("MainWidget") + self.setObjectName("SettingsMainWidget") self.setWindowTitle("OpenPype Settings") self.resize(self.widget_width, self.widget_height) From 30400bbbda42fcd9ff0af38d8ed358ebd24fbc7b Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:50:34 +0100 Subject: [PATCH 06/46] DictLabel renamed to ExpandLabel --- openpype/tools/settings/settings/style/style.css | 2 +- openpype/tools/settings/settings/widgets.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index e271eaf5ed..61299a3cc7 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -173,7 +173,7 @@ QSlider::handle:vertical { #DictKey[state="overriden-modified"] {border-color: #0f0;} #DictKey[state="invalid"] {border-color: #ad2e2e;} -#DictLabel { +#ExpandLabel { font-weight: bold; } diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index 469c984a5e..05622764b4 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -187,7 +187,7 @@ class ExpandingWidget(QtWidgets.QWidget): button_toggle.setChecked(False) label_widget = QtWidgets.QLabel(label, parent=side_line_widget) - label_widget.setObjectName("DictLabel") + label_widget.setObjectName("ExpandLabel") before_label_widget = QtWidgets.QWidget(side_line_widget) before_label_layout = QtWidgets.QHBoxLayout(before_label_widget) From d9f9a0d01e38ffe8c7408b6480d719b4b10549d2 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:51:22 +0100 Subject: [PATCH 07/46] all that should behave differently have object name SettingsLabel --- openpype/tools/settings/settings/base.py | 2 ++ .../settings/settings/dict_conditional.py | 1 + .../tools/settings/settings/item_widgets.py | 1 + .../tools/settings/settings/style/style.css | 28 +++++++++++-------- openpype/tools/settings/settings/widgets.py | 1 + 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/openpype/tools/settings/settings/base.py b/openpype/tools/settings/settings/base.py index 75a3427040..6e45c9b0c4 100644 --- a/openpype/tools/settings/settings/base.py +++ b/openpype/tools/settings/settings/base.py @@ -472,6 +472,7 @@ class GUIWidget(BaseWidget): def _create_label_ui(self): label = self.entity["label"] label_widget = QtWidgets.QLabel(label, self) + label_widget.setObjectName("SettingsLabel") layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 5, 0, 5) @@ -513,6 +514,7 @@ class MockUpWidget(BaseWidget): def create_ui(self): label = "Mockup widget for entity {}".format(self.entity.path) label_widget = QtWidgets.QLabel(label, self) + label_widget.setObjectName("SettingsLabel") layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 5, 0, 5) diff --git a/openpype/tools/settings/settings/dict_conditional.py b/openpype/tools/settings/settings/dict_conditional.py index 3e3270cac9..2e1617f505 100644 --- a/openpype/tools/settings/settings/dict_conditional.py +++ b/openpype/tools/settings/settings/dict_conditional.py @@ -164,6 +164,7 @@ class DictConditionalWidget(BaseWidget): content_widget.setProperty("show_borders", show_borders) label_widget = QtWidgets.QLabel(self.entity.label) + label_widget.setObjectName("SettingsLabel") content_layout = QtWidgets.QGridLayout(content_widget) content_layout.setContentsMargins(5, 5, 5, 5) diff --git a/openpype/tools/settings/settings/item_widgets.py b/openpype/tools/settings/settings/item_widgets.py index a28bee8d36..4d5840d7b7 100644 --- a/openpype/tools/settings/settings/item_widgets.py +++ b/openpype/tools/settings/settings/item_widgets.py @@ -129,6 +129,7 @@ class DictImmutableKeysWidget(BaseWidget): content_widget.setProperty("show_borders", show_borders) label_widget = QtWidgets.QLabel(self.entity.label) + label_widget.setObjectName("SettingsLabel") content_layout = QtWidgets.QGridLayout(content_widget) content_layout.setContentsMargins(5, 5, 5, 5) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index 61299a3cc7..0f5e97ec09 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -59,23 +59,27 @@ QComboBox QAbstractItemView::item { QToolButton { background: transparent; } - QLabel { background: transparent; color: #969b9e; } -QLabel:hover {color: #b8c1c5;} -QLabel[state="studio"] {color: #73C990;} -QLabel[state="studio"]:hover {color: #ffffff;} -QLabel[state="modified"] {color: #189aea;} -QLabel[state="modified"]:hover {color: #46b1f3;} -QLabel[state="overriden-modified"] {color: #189aea;} -QLabel[state="overriden-modified"]:hover {color: #46b1f3;} -QLabel[state="overriden"] {color: #ff8c1a;} -QLabel[state="overriden"]:hover {color: #ffa64d;} -QLabel[state="invalid"] {color: #ad2e2e;} -QLabel[state="invalid"]:hover {color: #ad2e2e;} +#SettingsLabel { + background: transparent; + color: #969b9e; +} +#SettingsLabel:hover {color: #b8c1c5;} + +#SettingsLabel[state="studio"] {color: #73C990;} +#SettingsLabel[state="studio"]:hover {color: #ffffff;} +#SettingsLabel[state="modified"] {color: #189aea;} +#SettingsLabel[state="modified"]:hover {color: #46b1f3;} +#SettingsLabel[state="overriden-modified"] {color: #189aea;} +#SettingsLabel[state="overriden-modified"]:hover {color: #46b1f3;} +#SettingsLabel[state="overriden"] {color: #ff8c1a;} +#SettingsLabel[state="overriden"]:hover {color: #ffa64d;} +#SettingsLabel[state="invalid"] {color: #ad2e2e;} +#SettingsLabel[state="invalid"]:hover {color: #ad2e2e;} QWidget[input-state="studio"] {border-color: #858a94;} diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index 05622764b4..ab0dbfc4f4 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -381,6 +381,7 @@ class GridLabelWidget(QtWidgets.QWidget): self.properties = {} label_widget = QtWidgets.QLabel(label, self) + label_widget.setObjectName("SettingsLabel") label_proxy_layout = QtWidgets.QHBoxLayout() label_proxy_layout.setContentsMargins(0, 0, 0, 0) From 7a9529f33286020e739e7c172db63469d2775ae4 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:51:38 +0100 Subject: [PATCH 08/46] renamed object name SplitterItem to Separator --- openpype/tools/settings/settings/base.py | 2 +- openpype/tools/settings/settings/style/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/settings/base.py b/openpype/tools/settings/settings/base.py index 6e45c9b0c4..f8378ed18c 100644 --- a/openpype/tools/settings/settings/base.py +++ b/openpype/tools/settings/settings/base.py @@ -480,7 +480,7 @@ class GUIWidget(BaseWidget): def _create_separator_ui(self): splitter_item = QtWidgets.QWidget(self) - splitter_item.setObjectName("SplitterItem") + splitter_item.setObjectName("Separator") splitter_item.setMinimumHeight(self.separator_height) splitter_item.setMaximumHeight(self.separator_height) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index 0f5e97ec09..93bdf9b5bd 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -229,7 +229,7 @@ QSlider::handle:vertical { border-radius: 5px; } -#SplitterItem { +#Separator { background-color: #21252B; } From c9228d74a0419f8daddda59d178ecd3ad9c66371 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 10:57:47 +0100 Subject: [PATCH 09/46] fix epand label hover --- openpype/tools/settings/settings/style/style.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index 93bdf9b5bd..daf7cca822 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -180,6 +180,9 @@ QSlider::handle:vertical { #ExpandLabel { font-weight: bold; } +#ExpandLabel:hover { + color: #b8c1c5; +} #ContentWidget { background-color: transparent; From 5e2e818db287afc5b267956faee5f155f3ec059e Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 11:06:36 +0100 Subject: [PATCH 10/46] add styled delegates to comboboxes --- openpype/tools/settings/local_settings/projects_widget.py | 3 +++ openpype/tools/settings/settings/widgets.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/openpype/tools/settings/local_settings/projects_widget.py b/openpype/tools/settings/local_settings/projects_widget.py index 9cd3b9a38e..9b373ed3cd 100644 --- a/openpype/tools/settings/local_settings/projects_widget.py +++ b/openpype/tools/settings/local_settings/projects_widget.py @@ -456,6 +456,8 @@ class _SiteCombobox(QtWidgets.QWidget): self ) combobox_input = QtWidgets.QComboBox(self) + combobox_delegate = QtWidgets.QStyledItemDelegate() + combobox_input.setItemDelegate(combobox_delegate) main_layout = QtWidgets.QHBoxLayout(self) main_layout.addWidget(label_widget) @@ -464,6 +466,7 @@ class _SiteCombobox(QtWidgets.QWidget): combobox_input.currentIndexChanged.connect(self._on_index_change) self.label_widget = label_widget self.combobox_input = combobox_input + self._combobox_delegate = combobox_delegate def _set_current_text(self, text): index = None diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index ab0dbfc4f4..7ed6827139 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -132,9 +132,14 @@ class SettingsComboBox(QtWidgets.QComboBox): def __init__(self, *args, **kwargs): super(SettingsComboBox, self).__init__(*args, **kwargs) + delegate = QtWidgets.QStyledItemDelegate() + self.setItemDelegate(delegate) + self.currentIndexChanged.connect(self._on_change) self.setFocusPolicy(QtCore.Qt.StrongFocus) + self._delegate = delegate + def wheelEvent(self, event): if self.hasFocus(): return super(SettingsComboBox, self).wheelEvent(event) From 5532cd3f3244fb6ccd675b573f56ed828c368aab Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 11:20:39 +0100 Subject: [PATCH 11/46] check if layout item has widget before calling hide --- openpype/tools/settings/local_settings/apps_widget.py | 4 +++- openpype/tools/settings/local_settings/projects_widget.py | 4 +++- openpype/tools/settings/settings/categories.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/openpype/tools/settings/local_settings/apps_widget.py b/openpype/tools/settings/local_settings/apps_widget.py index e6a4132955..850e009937 100644 --- a/openpype/tools/settings/local_settings/apps_widget.py +++ b/openpype/tools/settings/local_settings/apps_widget.py @@ -172,7 +172,9 @@ class LocalApplicationsWidgets(QtWidgets.QWidget): def _reset_app_widgets(self): while self.content_layout.count() > 0: item = self.content_layout.itemAt(0) - item.widget().hide() + widget = item.widget() + if widget is not None: + widget.setVisible(False) self.content_layout.removeItem(item) self.widgets_by_group_name.clear() diff --git a/openpype/tools/settings/local_settings/projects_widget.py b/openpype/tools/settings/local_settings/projects_widget.py index 9b373ed3cd..4a7477dcd2 100644 --- a/openpype/tools/settings/local_settings/projects_widget.py +++ b/openpype/tools/settings/local_settings/projects_widget.py @@ -259,7 +259,9 @@ class SitesWidget(QtWidgets.QWidget): def _clear_widgets(self): while self.content_layout.count(): item = self.content_layout.itemAt(0) - item.widget().hide() + widget = item.widget() + if widget is not None: + widget.setVisible(False) self.content_layout.removeItem(item) self.input_objects = {} diff --git a/openpype/tools/settings/settings/categories.py b/openpype/tools/settings/settings/categories.py index 5f9051344d..a6e4154b2b 100644 --- a/openpype/tools/settings/settings/categories.py +++ b/openpype/tools/settings/settings/categories.py @@ -391,7 +391,9 @@ class SettingsCategoryWidget(QtWidgets.QWidget): while self.content_layout.count() != 0: widget = self.content_layout.itemAt(0).widget() - widget.hide() + if widget is not None: + widget.setVisible(False) + self.content_layout.removeWidget(widget) widget.deleteLater() From 4f178f18ff2e6d5b0b9183602d5ee86bf48f90e2 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 11:21:01 +0100 Subject: [PATCH 12/46] replaced SpacerWidget with stretch --- .../settings/local_settings/projects_widget.py | 15 ++++++--------- openpype/tools/settings/local_settings/widgets.py | 5 +---- openpype/tools/settings/local_settings/window.py | 6 ++---- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/openpype/tools/settings/local_settings/projects_widget.py b/openpype/tools/settings/local_settings/projects_widget.py index 4a7477dcd2..7e2ad661a0 100644 --- a/openpype/tools/settings/local_settings/projects_widget.py +++ b/openpype/tools/settings/local_settings/projects_widget.py @@ -6,10 +6,7 @@ from openpype.settings.constants import ( PROJECT_ANATOMY_KEY, DEFAULT_PROJECT_KEY ) -from .widgets import ( - SpacerWidget, - ProxyLabelWidget -) +from .widgets import ProxyLabelWidget from .constants import ( LABEL_REMOVE_DEFAULT, LABEL_ADD_DEFAULT, @@ -238,9 +235,9 @@ class SitesWidget(QtWidgets.QWidget): comboboxes_layout = QtWidgets.QHBoxLayout(comboboxes_widget) comboboxes_layout.setContentsMargins(0, 0, 0, 0) - comboboxes_layout.addWidget(active_site_widget) - comboboxes_layout.addWidget(remote_site_widget) - comboboxes_layout.addWidget(SpacerWidget(comboboxes_widget), 1) + comboboxes_layout.addWidget(active_site_widget, 0) + comboboxes_layout.addWidget(remote_site_widget, 0) + comboboxes_layout.addStretch(1) content_widget = QtWidgets.QWidget(self) content_layout = QtWidgets.QVBoxLayout(content_widget) @@ -385,7 +382,7 @@ class SitesWidget(QtWidgets.QWidget): self.input_objects[site_name] = site_input_objects # Add spacer so other widgets are squeezed to top - self.content_layout.addWidget(SpacerWidget(self), 1) + self.content_layout.addStretch(1) def _on_input_value_change(self, site_name, key): if ( @@ -782,7 +779,7 @@ class RootSiteWidget(QtWidgets.QWidget): main_layout = QtWidgets.QVBoxLayout(self) main_layout.addWidget(sites_widget) - main_layout.addWidget(SpacerWidget(self), 1) + main_layout.addStretch(1) self.sites_widget = sites_widget diff --git a/openpype/tools/settings/local_settings/widgets.py b/openpype/tools/settings/local_settings/widgets.py index b164f1b407..2733aef187 100644 --- a/openpype/tools/settings/local_settings/widgets.py +++ b/openpype/tools/settings/local_settings/widgets.py @@ -1,7 +1,6 @@ from Qt import QtWidgets, QtCore from openpype.tools.settings.settings.widgets import ( - ExpandingWidget, - SpacerWidget + ExpandingWidget ) @@ -56,7 +55,5 @@ class ProxyLabelWidget(QtWidgets.QWidget): __all__ = ( "ExpandingWidget", - "SpacerWidget", "Separator", - "SpacerWidget" ) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index f22e397323..dc4e4d67f3 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -15,7 +15,6 @@ from openpype.api import ( from openpype.modules import ModulesManager from .widgets import ( - SpacerWidget, ExpandingWidget ) from .mongo_widget import OpenPypeMongoWidget @@ -58,8 +57,7 @@ class LocalSettingsWidget(QtWidgets.QWidget): self._create_app_ui() self._create_project_ui() - # Add spacer to main layout - self.main_layout.addWidget(SpacerWidget(self), 1) + self.main_layout.addStretch(1) def _create_pype_mongo_ui(self): pype_mongo_expand_widget = ExpandingWidget("OpenPype Mongo URL", self) @@ -210,7 +208,7 @@ class LocalSettingsWindow(QtWidgets.QWidget): footer_layout = QtWidgets.QHBoxLayout(footer) footer_layout.addWidget(reset_btn, 0) - footer_layout.addWidget(SpacerWidget(footer), 1) + footer_layout.addStretch(1) footer_layout.addWidget(save_btn, 0) main_layout = QtWidgets.QVBoxLayout(self) From 4e4b74340ca72a1f035a6af28b0e66e436052eff Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 11:36:19 +0100 Subject: [PATCH 13/46] replaced NiceCheckbox in settings with new one --- .../tools/settings/settings/item_widgets.py | 7 +- .../tools/settings/settings/style/style.css | 5 + openpype/tools/settings/settings/widgets.py | 190 +----------------- 3 files changed, 11 insertions(+), 191 deletions(-) diff --git a/openpype/tools/settings/settings/item_widgets.py b/openpype/tools/settings/settings/item_widgets.py index 4d5840d7b7..d808de74a4 100644 --- a/openpype/tools/settings/settings/item_widgets.py +++ b/openpype/tools/settings/settings/item_widgets.py @@ -7,8 +7,8 @@ from .widgets import ( NumberSpinBox, GridLabelWidget, SettingsComboBox, - NiceCheckbox, SettingsPlainTextEdit, + SettingsNiceCheckbox, SettingsLineEdit ) from .multiselection_combobox import MultiSelectionComboBox @@ -21,6 +21,7 @@ from .base import ( BaseWidget, InputWidget ) + from openpype.widgets.sliders import NiceSlider from openpype.tools.settings import CHILD_OFFSET @@ -328,9 +329,7 @@ class BoolWidget(InputWidget): checkbox_height = self.style().pixelMetric( QtWidgets.QStyle.PM_IndicatorHeight ) - self.input_field = NiceCheckbox( - height=checkbox_height, parent=self.content_widget - ) + self.input_field = SettingsNiceCheckbox(parent=self.content_widget) self.content_layout.addWidget(self.input_field, 0) self.content_layout.addStretch(1) diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css index daf7cca822..88ef74101a 100644 --- a/openpype/tools/settings/settings/style/style.css +++ b/openpype/tools/settings/settings/style/style.css @@ -461,3 +461,8 @@ QAbstractItemView::item:selected:!active { border-radius: 5px; background: #21252B;; } + +#NiceCheckbox { + /* Default size hint of NiceCheckbox is defined by font size. */ + font-size: 7pt; +} diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index 7ed6827139..7480d4c51b 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -6,6 +6,7 @@ from avalon.mongodb import ( AvalonMongoDB ) +from openpype.widgets.nice_checkbox import NiceCheckbox from openpype.settings.lib import get_system_settings from .constants import ( DEFAULT_PROJECT_LABEL, @@ -421,197 +422,12 @@ class GridLabelWidget(QtWidgets.QWidget): return super(GridLabelWidget, self).mouseReleaseEvent(event) -class NiceCheckboxMoveWidget(QtWidgets.QFrame): - def __init__(self, height, border_width, parent): - super(NiceCheckboxMoveWidget, self).__init__(parent=parent) - - self.checkstate = False - - self.half_size = int(height / 2) - self.full_size = self.half_size * 2 - self.border_width = border_width - self.setFixedHeight(self.full_size) - self.setFixedWidth(self.full_size) - - self.setStyleSheet(( - "background: #444444;border-style: none;" - "border-radius: {};border-width:{}px;" - ).format(self.half_size, self.border_width)) - - def update_position(self): - parent_rect = self.parent().rect() - if self.checkstate is True: - pos_x = ( - parent_rect.x() - + parent_rect.width() - - self.full_size - - self.border_width - ) - else: - pos_x = parent_rect.x() + self.border_width - - pos_y = parent_rect.y() + int( - parent_rect.height() / 2 - self.half_size - ) - self.setGeometry(pos_x, pos_y, self.width(), self.height()) - - def state_offset(self): - diff_x = ( - self.parent().rect().width() - - self.full_size - - (2 * self.border_width) - ) - return QtCore.QPoint(diff_x, 0) - - def change_position(self, checkstate): - self.checkstate = checkstate - - self.update_position() - - def resizeEvent(self, event): - super().resizeEvent(event) - self.update_position() - - -class NiceCheckbox(QtWidgets.QFrame): - stateChanged = QtCore.Signal(int) - checked_bg_color = QtGui.QColor(69, 128, 86) - unchecked_bg_color = QtGui.QColor(170, 80, 80) +class SettingsNiceCheckbox(NiceCheckbox): focused_in = QtCore.Signal() - def set_bg_color(self, color): - self._bg_color = color - self.setStyleSheet(self._stylesheet_template.format( - color.red(), color.green(), color.blue() - )) - - def bg_color(self): - return self._bg_color - - bgcolor = QtCore.Property(QtGui.QColor, bg_color, set_bg_color) - - def __init__(self, checked=True, height=30, *args, **kwargs): - super(NiceCheckbox, self).__init__(*args, **kwargs) - - self._checkstate = checked - if checked: - bg_color = self.checked_bg_color - else: - bg_color = self.unchecked_bg_color - - self.half_height = int(height / 2) - height = self.half_height * 2 - tenth_height = int(height / 10) - - self.setFixedHeight(height) - self.setFixedWidth((height - tenth_height) * 2) - - move_item_size = height - (2 * tenth_height) - - self.move_item = NiceCheckboxMoveWidget( - move_item_size, tenth_height, self - ) - self.move_item.change_position(self._checkstate) - - self._stylesheet_template = ( - "border-radius: {}px;" - "border-width: {}px;" - "background: #333333;" - "border-style: solid;" - "border-color: #555555;" - ).format(self.half_height, tenth_height) - self._stylesheet_template += "background: rgb({},{},{});" - - self.set_bg_color(bg_color) - - def resizeEvent(self, event): - super(NiceCheckbox, self).resizeEvent(event) - self.move_item.update_position() - - def show(self, *args, **kwargs): - super(NiceCheckbox, self).show(*args, **kwargs) - self.move_item.update_position() - - def checkState(self): - if self._checkstate: - return QtCore.Qt.Checked - else: - return QtCore.Qt.Unchecked - - def _on_checkstate_change(self): - self.stateChanged.emit(self.checkState()) - - move_start_value = self.move_item.pos() - offset = self.move_item.state_offset() - if self._checkstate is True: - move_end_value = move_start_value + offset - else: - move_end_value = move_start_value - offset - move_animation = QtCore.QPropertyAnimation( - self.move_item, b"pos", self - ) - move_animation.setDuration(150) - move_animation.setEasingCurve(QtCore.QEasingCurve.OutQuad) - move_animation.setStartValue(move_start_value) - move_animation.setEndValue(move_end_value) - - color_animation = QtCore.QPropertyAnimation( - self, b"bgcolor" - ) - color_animation.setDuration(150) - if self._checkstate is True: - color_animation.setStartValue(self.unchecked_bg_color) - color_animation.setEndValue(self.checked_bg_color) - else: - color_animation.setStartValue(self.checked_bg_color) - color_animation.setEndValue(self.unchecked_bg_color) - - anim_group = QtCore.QParallelAnimationGroup(self) - anim_group.addAnimation(move_animation) - anim_group.addAnimation(color_animation) - - def _finished(): - self.move_item.change_position(self._checkstate) - - anim_group.finished.connect(_finished) - anim_group.start() - - def isChecked(self): - return self._checkstate - - def setChecked(self, checked): - if checked == self._checkstate: - return - self._checkstate = checked - self._on_checkstate_change() - - def setCheckState(self, state=None): - if state is None: - checkstate = not self._checkstate - elif state == QtCore.Qt.Checked: - checkstate = True - elif state == QtCore.Qt.Unchecked: - checkstate = False - else: - return - - if checkstate == self._checkstate: - return - - self._checkstate = checkstate - - self._on_checkstate_change() - def mousePressEvent(self, event): self.focused_in.emit() - super(NiceCheckbox, self).mousePressEvent(event) - - def mouseReleaseEvent(self, event): - if event.button() == QtCore.Qt.LeftButton: - self.setCheckState() - event.accept() - return - return super(NiceCheckbox, self).mouseReleaseEvent(event) + super(SettingsNiceCheckbox, self).mousePressEvent(event) class ProjectModel(QtGui.QStandardItemModel): From 2fe5ae5df6136ee93eedea3dca7f2aba9c4a42e5 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 12 Nov 2021 11:40:17 +0100 Subject: [PATCH 14/46] added settings style to openpype style --- openpype/style/style.css | 171 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/openpype/style/style.css b/openpype/style/style.css index 1e457f97f6..307d2d960d 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -949,3 +949,174 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { /* Default size hint of NiceCheckbox is defined by font size. */ font-size: 7pt; } + +/* Settings - NOT USED YET +- we need to define font family for settings UI */ + +#SettingsMainWidget { + background: #141a1f; +} + +#SettingsToolIconBtn { + border: 0px solid #bfccd6; + background-color: transparent; +} + +#SettingsToolBtn { + border: 1px solid #bfccd6; + border-radius: 10px; + background-color: transparent; +} + +#SettingsToolBtn:hover { + border-color: #189aea; + color: #46b1f3; + background-color: transparent; +} +#SettingsToolBtn:disabled { + background-color: #464b54; +} + +#ExpandToggleBtn { + background: transparent; +} + +#SettingsLabel { + background: transparent; + color: #969b9e; +} +#SettingsLabel:hover {color: #b8c1c5;} +#SettingsLabel[state="studio"] {color: #73C990;} +#SettingsLabel[state="studio"]:hover {color: #ffffff;} +#SettingsLabel[state="modified"] {color: #189aea;} +#SettingsLabel[state="modified"]:hover {color: #46b1f3;} +#SettingsLabel[state="overriden-modified"] {color: #189aea;} +#SettingsLabel[state="overriden-modified"]:hover {color: #46b1f3;} +#SettingsLabel[state="overriden"] {color: #ff8c1a;} +#SettingsLabel[state="overriden"]:hover {color: #ffa64d;} +#SettingsLabel[state="invalid"] {color: #ad2e2e;} +#SettingsLabel[state="invalid"]:hover {color: #ad2e2e;} + +/* TODO Replace these with explicit widget types if possible */ +QWidget[input-state="studio"] {border-color: #858a94;} +QWidget[input-state="modified"] {border-color: #189aea;} +QWidget[input-state="overriden-modified"] {border-color: #189aea;} +QWidget[input-state="overriden"] {border-color: #ff8c1a;} +QWidget[input-state="invalid"] {border-color: #ad2e2e;} + +#GroupWidget { + border-bottom: 1px solid #21252B; +} + +#ProjectListWidget QListView { + border: 1px solid #464b54; + background: #21252B; +} + +#ProjectListWidget QListView:disabled { + background: #282C34; +} + +#ProjectListWidget QListView::item:disabled { + color: #4e5254; +} + +#ProjectListWidget QLabel { + background: transparent; + font-weight: bold; +} + +#MultiSelectionComboBox { + font-size: 12px; +} + +#DictKey[state="studio"] {border-color: #464b54;} +#DictKey[state="modified"] {border-color: #189aea;} +#DictKey[state="overriden"] {border-color: #00f;} +#DictKey[state="overriden-modified"] {border-color: #0f0;} +#DictKey[state="invalid"] {border-color: #ad2e2e;} + +#ExpandLabel { + font-weight: bold; +} +#ExpandLabel:hover { + color: #b8c1c5; +} + +#ContentWidget { + background-color: transparent; +} +#ContentWidget[content_state="hightlighted"] { + background-color: rgba(19, 26, 32, 15%); +} + +#SideLineWidget { + background-color: #333942; + border-style: solid; + border-color: #4e5254; + border-left-width: 3px; + border-bottom-width: 0px; + border-right-width: 0px; + border-top-width: 0px; +} + +#SideLineWidget:hover { + border-color: #7d8386; +} + +#SideLineWidget[state="child-studio"] {border-color: #56a06f;} +#SideLineWidget[state="child-studio"]:hover {border-color: #73C990;} + +#SideLineWidget[state="child-modified"] {border-color: #106aa2;} +#SideLineWidget[state="child-modified"]:hover {border-color: #189aea;} + +#SideLineWidget[state="child-invalid"] {border-color: #ad2e2e;} +#SideLineWidget[state="child-invalid"]:hover {border-color: #c93636;} + +#SideLineWidget[state="child-overriden"] {border-color: #e67300;} +#SideLineWidget[state="child-overriden"]:hover {border-color: #ff8c1a;} + +#SideLineWidget[state="child-overriden-modified"] {border-color: #106aa2;} +#SideLineWidget[state="child-overriden-modified"]:hover {border-color: #189aea;} + +#DictAsWidgetBody { + background: transparent; +} +#DictAsWidgetBody[show_borders="1"] { + border: 1px solid #4e5254; + border-radius: 5px; +} + +#ShadowWidget { + font-size: 36pt; +} + +#BreadcrumbsPathInput { + padding: 2px; + font-size: 9pt; +} + +#BreadcrumbsButton { + padding-right: 12px; + font-size: 9pt; + background: transparent; +} + +#BreadcrumbsButton[empty="1"] { + padding-right: 0px; +} + +#BreadcrumbsButton::menu-button { + border: none; + width: 12px; + background: rgba(127, 127, 127, 60); +} +#BreadcrumbsButton::menu-button:hover { + background: rgba(127, 127, 127, 90); +} + +#BreadcrumbsPanel { + border: 1px solid #4e5254; + border-radius: 5px; + background: #21252B;; +} From 7c3646dd40b3f6259b8c2136aa2a5d88758d0a05 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 16 Nov 2021 14:23:41 +0100 Subject: [PATCH 15/46] moved general names to bottom --- openpype/style/style.css | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index e2198ced31..6ba90921dd 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -669,15 +669,6 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: none; } -/* Globally used names */ -#Separator { - background: {color:bg-menu-separator}; -} - -#IconButton { - padding: 4px 4px 4px 4px; -} - /* Password dialog*/ #PasswordBtn { border: none; @@ -950,11 +941,6 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: transparent; } -#NiceCheckbox { - /* Default size hint of NiceCheckbox is defined by font size. */ - font-size: 7pt; -} - /* Settings - NOT USED YET - we need to define font family for settings UI */ @@ -1125,3 +1111,17 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} border-radius: 5px; background: #21252B;; } + +/* Globally used names */ +#Separator { + background: {color:bg-menu-separator}; +} + +#IconButton { + padding: 4px 4px 4px 4px; +} + +#NiceCheckbox { + /* Default size hint of NiceCheckbox is defined by font size. */ + font-size: 7pt; +} From 1aa7e195bf1140da7dec53595433a52f3aa73c3f Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 16 Nov 2021 14:23:57 +0100 Subject: [PATCH 16/46] removed ProjectListWidget styles --- openpype/style/style.css | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index 6ba90921dd..1ba39e01f7 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -999,19 +999,6 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} border-bottom: 1px solid #21252B; } -#ProjectListWidget QListView { - border: 1px solid #464b54; - background: #21252B; -} - -#ProjectListWidget QListView:disabled { - background: #282C34; -} - -#ProjectListWidget QListView::item:disabled { - color: #4e5254; -} - #ProjectListWidget QLabel { background: transparent; font-weight: bold; From 573f6c3aebbcbf6a6f0d7fe799afc405ac130759 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 16 Nov 2021 14:25:31 +0100 Subject: [PATCH 17/46] replace colors with data colors --- openpype/style/data.json | 17 +++++++++++ openpype/style/style.css | 66 +++++++++++++++++++--------------------- 2 files changed, 48 insertions(+), 35 deletions(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index b92ee61764..6dbe8f4d8e 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -71,6 +71,23 @@ "bg-expander-hover": "#2d6c9f", "bg-expander-selected-hover": "#3784c5" } + }, + "settings": { + "invalid-light": "#C93636", + "invalid-dark": "#AD2E2E", + "modified-light": "#46b1f3", + "modified-mid": "#189AEA", + "modified-dark": "#106AA2", + "studio-light": "#73C990", + "studio-dark": "#56a06f", + "studio-label-hover": "#FFFFFF", + "project-light": "#FFA64D", + "project-mid": "#FF8C1A", + "project-dark": "#E67300", + "breadcrumbs-btn-bg": "rgba(127, 127, 127, 60)", + "breadcrumbs-btn-bg-hover": "rgba(127, 127, 127, 90)", + "content-hightlighted": "rgba(19, 26, 32, 15%)", + "tool-btn-color": "#21252B" } } } diff --git a/openpype/style/style.css b/openpype/style/style.css index 1ba39e01f7..dfd809f0a2 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -961,7 +961,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #SettingsToolBtn:hover { border-color: #189aea; - color: #46b1f3; + color: {color:settings:modified-light}; background-color: transparent; } #SettingsToolBtn:disabled { @@ -977,23 +977,22 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { color: #969b9e; } #SettingsLabel:hover {color: #b8c1c5;} -#SettingsLabel[state="studio"] {color: #73C990;} -#SettingsLabel[state="studio"]:hover {color: #ffffff;} -#SettingsLabel[state="modified"] {color: #189aea;} -#SettingsLabel[state="modified"]:hover {color: #46b1f3;} -#SettingsLabel[state="overriden-modified"] {color: #189aea;} -#SettingsLabel[state="overriden-modified"]:hover {color: #46b1f3;} -#SettingsLabel[state="overriden"] {color: #ff8c1a;} -#SettingsLabel[state="overriden"]:hover {color: #ffa64d;} -#SettingsLabel[state="invalid"] {color: #ad2e2e;} -#SettingsLabel[state="invalid"]:hover {color: #ad2e2e;} +#SettingsLabel[state="studio"] {color: {color:settings:studio-light};} +#SettingsLabel[state="studio"]:hover {color: {color:settings:studio-label-hover};} +#SettingsLabel[state="modified"] {color: {color:settings:modified-mid};} +#SettingsLabel[state="modified"]:hover {color: {color:settings:modified-light};} +#SettingsLabel[state="overriden-modified"] {color: {color:settings:modified-mid};} +#SettingsLabel[state="overriden-modified"]:hover {color: {color:settings:modified-light};} +#SettingsLabel[state="overriden"] {color: {color:settings:project-mid};} +#SettingsLabel[state="overriden"]:hover {color: {color:settings:project-light};} +#SettingsLabel[state="invalid"] {color:{color:settings:invalid-dark};} +#SettingsLabel[state="invalid"]:hover {color: {color:settings:invalid-dark};} /* TODO Replace these with explicit widget types if possible */ -QWidget[input-state="studio"] {border-color: #858a94;} -QWidget[input-state="modified"] {border-color: #189aea;} -QWidget[input-state="overriden-modified"] {border-color: #189aea;} -QWidget[input-state="overriden"] {border-color: #ff8c1a;} -QWidget[input-state="invalid"] {border-color: #ad2e2e;} +QWidget[input-state="modified"] {border-color: {color:settings:modified-mid};} +QWidget[input-state="overriden-modified"] {border-color: {color:settings:modified-mid};} +QWidget[input-state="overriden"] {border-color: {color:settings:project-mid};} +QWidget[input-state="invalid"] {border-color: {color:settings:invalid-dark};} #GroupWidget { border-bottom: 1px solid #21252B; @@ -1008,11 +1007,8 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} font-size: 12px; } -#DictKey[state="studio"] {border-color: #464b54;} -#DictKey[state="modified"] {border-color: #189aea;} -#DictKey[state="overriden"] {border-color: #00f;} -#DictKey[state="overriden-modified"] {border-color: #0f0;} -#DictKey[state="invalid"] {border-color: #ad2e2e;} +#DictKey[state="modified"] {border-color: {color:settings:modified-mid};} +#DictKey[state="invalid"] {border-color: {color:settings:invalid-dark};} #ExpandLabel { font-weight: bold; @@ -1025,7 +1021,7 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} background-color: transparent; } #ContentWidget[content_state="hightlighted"] { - background-color: rgba(19, 26, 32, 15%); + background-color: {color:settings:content-hightlighted}; } #SideLineWidget { @@ -1042,20 +1038,20 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} border-color: #7d8386; } -#SideLineWidget[state="child-studio"] {border-color: #56a06f;} -#SideLineWidget[state="child-studio"]:hover {border-color: #73C990;} +#SideLineWidget[state="child-studio"] {border-color: {color:settings:studio-dark};} +#SideLineWidget[state="child-studio"]:hover {border-color: {color:settings:studio-light};} -#SideLineWidget[state="child-modified"] {border-color: #106aa2;} -#SideLineWidget[state="child-modified"]:hover {border-color: #189aea;} +#SideLineWidget[state="child-modified"] {border-color: {color:settings:modified-dark};} +#SideLineWidget[state="child-modified"]:hover {border-color: {color:settings:modified-mid};} -#SideLineWidget[state="child-invalid"] {border-color: #ad2e2e;} -#SideLineWidget[state="child-invalid"]:hover {border-color: #c93636;} +#SideLineWidget[state="child-invalid"] {border-color: {color:settings:invalid-dark};} +#SideLineWidget[state="child-invalid"]:hover {border-color: {color:settings:invalid-light};} -#SideLineWidget[state="child-overriden"] {border-color: #e67300;} -#SideLineWidget[state="child-overriden"]:hover {border-color: #ff8c1a;} +#SideLineWidget[state="child-overriden"] {border-color: {color:settings:project-dark};} +#SideLineWidget[state="child-overriden"]:hover {border-color: {color:settings:project-mid};} -#SideLineWidget[state="child-overriden-modified"] {border-color: #106aa2;} -#SideLineWidget[state="child-overriden-modified"]:hover {border-color: #189aea;} +#SideLineWidget[state="child-overriden-modified"] {border-color: {color:settings:modified-dark};} +#SideLineWidget[state="child-overriden-modified"]:hover {border-color: {color:settings:modified-mid};} #DictAsWidgetBody { background: transparent; @@ -1087,16 +1083,16 @@ QWidget[input-state="invalid"] {border-color: #ad2e2e;} #BreadcrumbsButton::menu-button { border: none; width: 12px; - background: rgba(127, 127, 127, 60); + background: {color:settings:breadcrumbs-btn-bg}; } #BreadcrumbsButton::menu-button:hover { - background: rgba(127, 127, 127, 90); + background: {color:settings:breadcrumbs-btn-bg-hover}; } #BreadcrumbsPanel { border: 1px solid #4e5254; border-radius: 5px; - background: #21252B;; + background: #21252B; } /* Globally used names */ From 609351d264ac31c2a28c8f9b5e8476719b1b251f Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 16 Nov 2021 17:39:34 +0100 Subject: [PATCH 18/46] fix percent in rgba --- openpype/style/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index 6dbe8f4d8e..2f5984d5ab 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -86,7 +86,7 @@ "project-dark": "#E67300", "breadcrumbs-btn-bg": "rgba(127, 127, 127, 60)", "breadcrumbs-btn-bg-hover": "rgba(127, 127, 127, 90)", - "content-hightlighted": "rgba(19, 26, 32, 15%)", + "content-hightlighted": "rgba(19, 26, 32, 15)", "tool-btn-color": "#21252B" } } From 5cbdbd0bfe9c7a70ceb8391cbe19722f71dce1ea Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:28:59 +0100 Subject: [PATCH 19/46] changed focus color of inputs --- openpype/style/data.json | 8 +++++++- openpype/style/style.css | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index 49602d83d4..438e8e11e1 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -83,19 +83,25 @@ "settings": { "invalid-light": "#C93636", "invalid-dark": "#AD2E2E", + "modified-light": "#46b1f3", "modified-mid": "#189AEA", "modified-dark": "#106AA2", + "studio-light": "#73C990", "studio-dark": "#56a06f", "studio-label-hover": "#FFFFFF", + "project-light": "#FFA64D", "project-mid": "#FF8C1A", "project-dark": "#E67300", + "breadcrumbs-btn-bg": "rgba(127, 127, 127, 60)", "breadcrumbs-btn-bg-hover": "rgba(127, 127, 127, 90)", + "content-hightlighted": "rgba(19, 26, 32, 15)", - "tool-btn-color": "#21252B" + "tool-btn-color": "#21252B", + "focus-border": "#839caf" } } } diff --git a/openpype/style/style.css b/openpype/style/style.css index 33e85c331f..4126f78373 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -968,6 +968,9 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #SettingsMainWidget { background: #141a1f; } +#SettingsMainWidget QAbstractSpinBox:focus, #SettingsMainWidget QLineEdit:focus, #SettingsMainWidget QPlainTextEdit:focus, #SettingsMainWidget QTextEdit:focus { + border-color: {color:settings:focus-border}; +} #SettingsToolIconBtn { border: 0px solid #bfccd6; From cb26d111b9466d1ff0d8f558c423bdfc3f5318de Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:29:13 +0100 Subject: [PATCH 20/46] reduced input state to widgets in settings window --- openpype/style/style.css | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index 4126f78373..8075ddb1e6 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1013,10 +1013,18 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #SettingsLabel[state="invalid"]:hover {color: {color:settings:invalid-dark};} /* TODO Replace these with explicit widget types if possible */ -QWidget[input-state="modified"] {border-color: {color:settings:modified-mid};} -QWidget[input-state="overriden-modified"] {border-color: {color:settings:modified-mid};} -QWidget[input-state="overriden"] {border-color: {color:settings:project-mid};} -QWidget[input-state="invalid"] {border-color: {color:settings:invalid-dark};} +#SettingsMainWidget QWidget[input-state="modified"] { + border-color: {color:settings:modified-mid}; +} +#SettingsMainWidget QWidget[input-state="overriden-modified"] { + border-color: {color:settings:modified-mid}; +} +#SettingsMainWidget QWidget[input-state="overriden"] { + border-color: {color:settings:project-mid}; +} +#SettingsMainWidget QWidget[input-state="invalid"] { + border-color: {color:settings:invalid-dark}; +} #GroupWidget { border-bottom: 1px solid #21252B; From b89a87fa012cf67b12cb2b3d2123f892e51869c5 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:29:26 +0100 Subject: [PATCH 21/46] removed unused variable --- openpype/tools/settings/settings/item_widgets.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/openpype/tools/settings/settings/item_widgets.py b/openpype/tools/settings/settings/item_widgets.py index d808de74a4..6fb0596558 100644 --- a/openpype/tools/settings/settings/item_widgets.py +++ b/openpype/tools/settings/settings/item_widgets.py @@ -326,9 +326,6 @@ class DictImmutableKeysWidget(BaseWidget): class BoolWidget(InputWidget): def _add_inputs_to_layout(self): - checkbox_height = self.style().pixelMetric( - QtWidgets.QStyle.PM_IndicatorHeight - ) self.input_field = SettingsNiceCheckbox(parent=self.content_widget) self.content_layout.addWidget(self.input_field, 0) From 227afc9b374d28a70243d3e030c1a1c027098c39 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:29:40 +0100 Subject: [PATCH 22/46] removed unused method --- openpype/widgets/nice_checkbox.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/openpype/widgets/nice_checkbox.py b/openpype/widgets/nice_checkbox.py index d550f361ff..17bbc24776 100644 --- a/openpype/widgets/nice_checkbox.py +++ b/openpype/widgets/nice_checkbox.py @@ -73,15 +73,6 @@ class NiceCheckbox(QtWidgets.QFrame): self._draw_icons = draw_icons self.repaint() - def _checkbox_size_hint(self): - checkbox_height = self.style().pixelMetric( - QtWidgets.QStyle.PM_IndicatorHeight - ) - checkbox_height += checkbox_height % 2 - width = (2 * checkbox_height) - (checkbox_height / 5) - new_size = QtCore.QSize(width, checkbox_height) - return new_size - def sizeHint(self): height = self.fontMetrics().height() width = self.get_width_hint_by_height(height) From 29997bb7818ed1bc586572fc2b0a2e89f5454423 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:30:06 +0100 Subject: [PATCH 23/46] start animation only if checkbox is visible --- openpype/widgets/nice_checkbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/widgets/nice_checkbox.py b/openpype/widgets/nice_checkbox.py index 17bbc24776..447f48caa7 100644 --- a/openpype/widgets/nice_checkbox.py +++ b/openpype/widgets/nice_checkbox.py @@ -150,7 +150,7 @@ class NiceCheckbox(QtWidgets.QFrame): if self._animation_timer.isActive(): self._animation_timer.stop() - if self.isEnabled(): + if self.isVisible() and self.isEnabled(): # Start animation self._animation_timer.start(self._animation_timeout) else: From 40eb19231d52a3abac9cbf81348a1c0f1322c684 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:31:27 +0100 Subject: [PATCH 24/46] use safer approach of animating --- openpype/widgets/nice_checkbox.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openpype/widgets/nice_checkbox.py b/openpype/widgets/nice_checkbox.py index 447f48caa7..b032453a7f 100644 --- a/openpype/widgets/nice_checkbox.py +++ b/openpype/widgets/nice_checkbox.py @@ -226,14 +226,16 @@ class NiceCheckbox(QtWidgets.QFrame): def _on_animation_timeout(self): if self._checkstate == QtCore.Qt.Checked: - self._current_step += 1 if self._current_step == self._steps: self._animation_timer.stop() + return + self._current_step += 1 elif self._checkstate == QtCore.Qt.Unchecked: - self._current_step -= 1 if self._current_step == 0: self._animation_timer.stop() + return + self._current_step -= 1 else: if self._current_step < self._middle_step: From a43463d3b9f014f960e1bb43999f9a1a1b00484b Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:31:42 +0100 Subject: [PATCH 25/46] boolean has defferend setting of entity too --- openpype/tools/settings/settings/item_widgets.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openpype/tools/settings/settings/item_widgets.py b/openpype/tools/settings/settings/item_widgets.py index 6fb0596558..2e00967a60 100644 --- a/openpype/tools/settings/settings/item_widgets.py +++ b/openpype/tools/settings/settings/item_widgets.py @@ -349,6 +349,9 @@ class BoolWidget(InputWidget): def _on_value_change(self): if self.ignore_input_changes: return + self.start_value_timer() + + def _on_value_change_timer(self): self.entity.set(self.input_field.isChecked()) From 73f729cc78e4326e953fd4ae8d6ae1f68c399c34 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 19:31:53 +0100 Subject: [PATCH 26/46] use openpype style in settings UIs --- openpype/tools/settings/local_settings/window.py | 2 +- openpype/tools/settings/settings/window.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index dc4e4d67f3..a00bc232f4 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -1,7 +1,7 @@ import logging from Qt import QtWidgets, QtGui -from ..settings import style +from openpype import style from openpype.settings.lib import ( get_local_settings, diff --git a/openpype/tools/settings/settings/window.py b/openpype/tools/settings/settings/window.py index 3ee303cfe9..fd0cd1d7cd 100644 --- a/openpype/tools/settings/settings/window.py +++ b/openpype/tools/settings/settings/window.py @@ -5,7 +5,7 @@ from .categories import ( ProjectWidget ) from .widgets import ShadowWidget, RestartDialog -from . import style +from openpype import style from openpype.lib import is_admin_password_required from openpype.widgets import PasswordDialog From 8f0dee171d483a9982aa49c9dad258e5005c4a65 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:37:16 +0100 Subject: [PATCH 27/46] added images for icons --- .../settings/settings/images/__init__.py | 19 ++++++++++++++++++ .../tools/settings/settings/images/add.png | Bin 0 -> 822 bytes .../tools/settings/settings/images/add.svg | 17 ++++++++++++++++ .../settings/settings/images/confirm.png | Bin 0 -> 931 bytes .../settings/settings/images/confirm.svg | 19 ++++++++++++++++++ .../tools/settings/settings/images/down.png | Bin 0 -> 924 bytes .../tools/settings/settings/images/down.svg | 19 ++++++++++++++++++ .../tools/settings/settings/images/mask.png | Bin 0 -> 744 bytes .../tools/settings/settings/images/mask.svg | 11 ++++++++++ .../tools/settings/settings/images/remove.png | Bin 0 -> 819 bytes .../tools/settings/settings/images/remove.svg | 14 +++++++++++++ .../tools/settings/settings/images/up.png | Bin 0 -> 930 bytes .../tools/settings/settings/images/up.svg | 19 ++++++++++++++++++ 13 files changed, 118 insertions(+) create mode 100644 openpype/tools/settings/settings/images/__init__.py create mode 100644 openpype/tools/settings/settings/images/add.png create mode 100644 openpype/tools/settings/settings/images/add.svg create mode 100644 openpype/tools/settings/settings/images/confirm.png create mode 100644 openpype/tools/settings/settings/images/confirm.svg create mode 100644 openpype/tools/settings/settings/images/down.png create mode 100644 openpype/tools/settings/settings/images/down.svg create mode 100644 openpype/tools/settings/settings/images/mask.png create mode 100644 openpype/tools/settings/settings/images/mask.svg create mode 100644 openpype/tools/settings/settings/images/remove.png create mode 100644 openpype/tools/settings/settings/images/remove.svg create mode 100644 openpype/tools/settings/settings/images/up.png create mode 100644 openpype/tools/settings/settings/images/up.svg diff --git a/openpype/tools/settings/settings/images/__init__.py b/openpype/tools/settings/settings/images/__init__.py new file mode 100644 index 0000000000..3ad65e114a --- /dev/null +++ b/openpype/tools/settings/settings/images/__init__.py @@ -0,0 +1,19 @@ +import os +from Qt import QtGui + + +def get_image_path(image_filename): + return os.path.join( + os.path.dirname(os.path.abspath(__file__)), + image_filename + ) + + +def get_image(image_filename): + image_path = get_image_path(image_filename) + return QtGui.QImage(image_path) + + +def get_pixmap(image_filename): + image_path = get_image_path(image_filename) + return QtGui.QPixmap(image_path) diff --git a/openpype/tools/settings/settings/images/add.png b/openpype/tools/settings/settings/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..81a68e6d5f6ff7b318bb32aaad01ace2212e4bea GIT binary patch literal 822 zcmV-61Ihe}P)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_00A~hL_t(YiM5tX7Q-M2McJeoWC`rY zB{;xUHc>=0c{xp*GU%aR1d41`RRun8YQ8F$1$P?Sh~6COb7U>!hk;z9CY zbs)Bx-94G>Zj%k9z8Pt@NG-MPn@+mkK82`Ns=6&GOISg&Q|11T>YVJPt|!yHtqNqY zRBUkp$zNP<6D!DrG!RD@IzT$13@qkE0XGxoWCvm{oWfTinQsGe^GfA+0{h$x(9dmP zcY6u)40es=9PkE~BZyZZor84)>k*_!AodIQU^xf!Baq-!1>$3nzX5a9{sY|K6+GbE zA91><7as$BaQELX3 + + + + + + + + + + + + + + + + diff --git a/openpype/tools/settings/settings/images/confirm.png b/openpype/tools/settings/settings/images/confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..d40e40f2e90e03d71be7ece9f47a80c027bac276 GIT binary patch literal 931 zcmV;U16=%xP)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_00E;(L_t(YiItYwjRPSJKxvYZG9}Ot zCHTWsxqxq2N4x%rm^`onUzCwZ(Gk`u?FRdQM-)_+6LbMj1XxvC0ASz^pgQpYJa`@G zGSkc#HElYZ0-8#-wH6xdg1w|M06o>PuR?Q%6Ix$%`a407w(%Kz?ggL=4=P>INJeKpIXj%rEogI(*C-fGq818 zS{vB9EUlNL*tHXUEa#lh!Pi3%FqC5g4_~aS#w*|?M0*X@%wiXv2?kas6|6MS#OW@z zLaMo16LZid3IR>$uHeXXcq6csQrlEA{$G94LY9}lv{ zdFAacZIEe8O`CAuw$nzRKMm5yMEd;5A1wJ3Cw&y1@&i=76&I5l7YG0V002ovPDHLk FV1m6mq!R!D literal 0 HcmV?d00001 diff --git a/openpype/tools/settings/settings/images/confirm.svg b/openpype/tools/settings/settings/images/confirm.svg new file mode 100644 index 0000000000..ebc5e024e6 --- /dev/null +++ b/openpype/tools/settings/settings/images/confirm.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/openpype/tools/settings/settings/images/down.png b/openpype/tools/settings/settings/images/down.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6b7f74714704f79867c0c62d84824570c6d157 GIT binary patch literal 924 zcmV;N17rM&P)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_00EpyL_t(YiItYik;EVjL`l*6^TTP$`coMjvA?OGm z0L?5zzPNPwtPXl?W|*&{o^1QxFS_1;#Za$B`o3TGpsJh;~k1-z*lXjwuhiW(du3Tg&Jz&Itu^b6>x_ELW)Xs7nOZNGqzP06;t0w252 z1z@-R4p1k6dl0<@LT!QgJ~*)X2@}|;#}W4gTEtTZ5H$-lytQUDg#&bmz=5DaI3+M= zn~5M;H`^~Uf;H*a9>I2FA_(@Ji2x8UCIUdFOay>BQ4s(-qdb85P>}$kx(x#O&k&aZ z{P&54gGd3kZ3U46>_cxk+7>rwJM}Y%w7P8!V3z3t?vxvb{N+ckD2Bos``v92pY1Vl zVF1j2l`zpE&eUbhbZHY7=`Pp^E4L0000 + + + + + + + + + + + + + + + + + + diff --git a/openpype/tools/settings/settings/images/mask.png b/openpype/tools/settings/settings/images/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..601a67733e0c0fcd6d6ad9e1c9929b7cd55497c2 GIT binary patch literal 744 zcmVP)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_008JoL_t(YiS3p_3dJA{M7^XgJc9S} z2rld?zlyaO$blQc3f&+}5IRT__zt23t^;}AOpIdDOpIdDOlIKa-Q11l zUEL=@2~}fFfD)?4GFqq_YXY?M5^DpfX-nP>p#ER^!;>KD!2Q9mfN$KAgO~c?Q`>mw zaAd4cpY;ichvoX*g(DmeeOwc;SYQ>w^1^io3ldf;EMZ*Ru;}q>0GA24e&B@#uQ+fi alKKE?Ikf`1;C}4@0000 + + + + + + + + + + diff --git a/openpype/tools/settings/settings/images/remove.png b/openpype/tools/settings/settings/images/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..44a4c7e31f27e8c90d9e26e31a80d38b12a1c77c GIT binary patch literal 819 zcmV-31I+x1P)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_00A>eL_t(YiM^If7Q-M2McHIJ$P(O- zOK^azZ2Tc&o~P!tWn{d{$0$G%2+4?#OWX|dydnaQDi-(#UL)W`#0?;Ha1P*5qCwE$ zRKT~D-8_luuG0w!-5GAWsA_8N%b4nZISQ^?sf=Yq-r_0<5>@P9RMtc#Wk1PC>neZ; zO<9-AAm|?#+rk3kAPxA@M4h0zz!<5(jerYaYoaV&fM9JW>*oc$wH@=?1(=*FZY_bG zPi{rJ@izN=fyvwC?*iP!mm|Eu6h;c<3Gj1#`AqHs{{XOlgYFYxU+pizzE}S^D=X}MaC$Z+a|$r7eln2=!#he;oo30PQQDT2idmpfP> xVM&EW7?*8W=y7WRn+e!{;D!aaIIt + + + + + + + + + + + + + diff --git a/openpype/tools/settings/settings/images/up.png b/openpype/tools/settings/settings/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..4c03bcd5c9701957e6a3b20976f53aafbf54c03d GIT binary patch literal 930 zcmV;T16}-yP)efLXk z^X>bcBv<9SqQu3o1AhTm<*XEulACfSF08N5cUx`AK2M+L^LpOT^ZE2Vp9ieLl#tC_aK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{ zS>Z|H>GiB?@~&{3k_<Tf7UM0DgQpnPQwVh8SQ(<{{j8>6aB%@;!z8Sym-iky&K} zjTI6k$>I`qO{&Kv#zl|GNU>q||8HOQ_@K8~-R^_B7sL4Ih58-H=M3Zf*f8=ZQ1c8| znR5Q>5e$Edo-1oThv3+Pi|eu$*@Me%=zLPcTDTz9h+E@vct3;Y5VYPx(^9c#rF~8x zA-E}Dbp!hc&?n~|%fCV*XVv-qhME8X00~e`R7C&)0Dpgf$wemcv;uMf000AYQchF< z{{Yv@4M6|^010qNS#tmY3ljhU3ljkVnw%H_00E*&L_t(YiJg{9wuB%IMA@VcTmt)H z2@GJBP5yy?!R=buNbOYUUp3>dNX$$_-YnV+8{IeJKH+o%IO|Jlh=dBIyC#gqM|p8Cy(Z2sDy! zZX&B{84HLdCn3W?n24wYH_?ayW}=z_%tQkMn2AaTa8uz4h=wU9Adf7E1VkjVcEHd4 zJ2M~^|1%lTL;sfH`ZIE`6|A!tx3WGA!Y+=;Jm48w+ej zuzBHj2OA`8sjvy-whbFSJ{rKo1U!D=0}DRlz(dhFKK)!1JnycGuK)l507*qoM6N<$ Eg7%u8G5`Po literal 0 HcmV?d00001 diff --git a/openpype/tools/settings/settings/images/up.svg b/openpype/tools/settings/settings/images/up.svg new file mode 100644 index 0000000000..5b813f44f8 --- /dev/null +++ b/openpype/tools/settings/settings/images/up.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + From 1e29a7c14a069c203808ad5f64bd0c1014ef1b92 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:37:58 +0100 Subject: [PATCH 28/46] implemented basic ImageButton --- openpype/tools/utils/widgets.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/openpype/tools/utils/widgets.py b/openpype/tools/utils/widgets.py index 493255071d..3b1ae877b9 100644 --- a/openpype/tools/utils/widgets.py +++ b/openpype/tools/utils/widgets.py @@ -38,6 +38,32 @@ class PlaceholderLineEdit(QtWidgets.QLineEdit): self.setPalette(filter_palette) +class ImageButton(QtWidgets.QPushButton): + """PushButton with icon and size of font. + + Using font metrics height as icon size reference. + + TODO: + - handle changes of screen (different resolution) + """ + + def __init__(self, *args, **kwargs): + super(ImageButton, self).__init__(*args, **kwargs) + self.setObjectName("ImageButton") + + def _change_size(self): + font_height = self.fontMetrics().height() + self.setIconSize(QtCore.QSize(font_height, font_height)) + + def showEvent(self, event): + super(ImageButton, self).showEvent(event) + + self._change_size() + + def sizeHint(self): + return self.iconSize() + + class AssetWidget(QtWidgets.QWidget): """A Widget to display a tree of assets with filter From 7aacff9591a6946308dd52a6f30dfb8c9628a953 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:38:29 +0100 Subject: [PATCH 29/46] extracted paint_image_with_color from publisher --- openpype/tools/utils/lib.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/openpype/tools/utils/lib.py b/openpype/tools/utils/lib.py index 4626e35a93..738e1a348c 100644 --- a/openpype/tools/utils/lib.py +++ b/openpype/tools/utils/lib.py @@ -25,6 +25,34 @@ def center_window(window): window.move(geo.topLeft()) +def paint_image_with_color(image, color): + """Redraw image with single color using it's alpha. + + It is expected that input image is singlecolor image with alpha. + + Args: + image (QImage): Loaded image with alpha. + color (QColor): Color that will be used to paint image. + """ + width = image.width() + height = image.height() + + alpha_mask = image.createAlphaMask() + alpha_region = QtGui.QRegion(QtGui.QBitmap.fromImage(alpha_mask)) + + pixmap = QtGui.QPixmap(width, height) + pixmap.fill(QtCore.Qt.transparent) + + painter = QtGui.QPainter(pixmap) + painter.setClipRegion(alpha_region) + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(color) + painter.drawRect(QtCore.QRect(0, 0, width, height)) + painter.end() + + return pixmap + + def format_version(value, hero_version=False): """Formats integer to displayable version name""" label = "v{0:03d}".format(value) From 190b261e70a2fb9d8b71e12cc5dc29fb25c6fa54 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:38:54 +0100 Subject: [PATCH 30/46] added styles for ImageButton --- openpype/style/style.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openpype/style/style.css b/openpype/style/style.css index 8075ddb1e6..b1ec152f0e 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1140,3 +1140,13 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { /* Default size hint of NiceCheckbox is defined by font size. */ font-size: 7pt; } + +#ImageButton { + padding: 0; + background: transparent; + font-size: 12pt; +} + +#ImageButton:disabled { + background: {color:bg-buttons-disabled}; +} From 971bb2bb62c471e765e71fd1941913b4b86bedd3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:39:04 +0100 Subject: [PATCH 31/46] define colors of settings buttons --- openpype/style/data.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index 438e8e11e1..5e590bce79 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -100,8 +100,10 @@ "breadcrumbs-btn-bg-hover": "rgba(127, 127, 127, 90)", "content-hightlighted": "rgba(19, 26, 32, 15)", - "tool-btn-color": "#21252B", - "focus-border": "#839caf" + "focus-border": "#839caf", + "image-btn": "#bfccd6", + "image-btn-hover": "#189aea", + "image-btn-disabled": "#bfccd6" } } } From 5a5285e18a4e4b2ebe522bcd3d489e787ef37055 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:39:46 +0100 Subject: [PATCH 32/46] implemented which has more abilities than a base ImageButton --- openpype/tools/settings/settings/widgets.py | 80 +++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/openpype/tools/settings/settings/widgets.py b/openpype/tools/settings/settings/widgets.py index 7480d4c51b..7a7213fa66 100644 --- a/openpype/tools/settings/settings/widgets.py +++ b/openpype/tools/settings/settings/widgets.py @@ -6,8 +6,16 @@ from avalon.mongodb import ( AvalonMongoDB ) +from openpype.style import get_objected_colors +from openpype.tools.utils.widgets import ImageButton +from openpype.tools.utils.lib import paint_image_with_color + from openpype.widgets.nice_checkbox import NiceCheckbox from openpype.settings.lib import get_system_settings +from .images import ( + get_pixmap, + get_image +) from .constants import ( DEFAULT_PROJECT_LABEL, PROJECT_NAME_ROLE, @@ -32,6 +40,78 @@ class SettingsPlainTextEdit(QtWidgets.QPlainTextEdit): self.focused_in.emit() +class SettingsToolBtn(ImageButton): + _mask_pixmap = None + _cached_icons = {} + + def __init__(self, btn_type, parent): + super(SettingsToolBtn, self).__init__(parent) + + icon, hover_icon = self._get_icon_type(btn_type) + + self.setIcon(icon) + + self._icon = icon + self._hover_icon = hover_icon + + @classmethod + def _get_icon_type(cls, btn_type): + if btn_type not in cls._cached_icons: + settings_colors = get_objected_colors()["settings"] + normal_color = settings_colors["image-btn"].get_qcolor() + hover_color = settings_colors["image-btn-hover"].get_qcolor() + disabled_color = settings_colors["image-btn-disabled"].get_qcolor() + + image = get_image("{}.png".format(btn_type)) + + pixmap = paint_image_with_color(image, normal_color) + hover_pixmap = paint_image_with_color(image, hover_color) + disabled_pixmap = paint_image_with_color(image, disabled_color) + + icon = QtGui.QIcon(pixmap) + hover_icon = QtGui.QIcon(hover_pixmap) + icon.addPixmap( + disabled_pixmap, QtGui.QIcon.Disabled, QtGui.QIcon.On + ) + icon.addPixmap( + disabled_pixmap, QtGui.QIcon.Disabled, QtGui.QIcon.Off + ) + hover_icon.addPixmap( + disabled_pixmap, QtGui.QIcon.Disabled, QtGui.QIcon.On + ) + hover_icon.addPixmap( + disabled_pixmap, QtGui.QIcon.Disabled, QtGui.QIcon.Off + ) + cls._cached_icons[btn_type] = icon, hover_icon + return cls._cached_icons[btn_type] + + def enterEvent(self, event): + self.setIcon(self._hover_icon) + super(SettingsToolBtn, self).enterEvent(event) + + def leaveEvent(self, event): + self.setIcon(self._icon) + super(SettingsToolBtn, self).leaveEvent(event) + + @classmethod + def _get_mask_pixmap(cls): + if cls._mask_pixmap is None: + mask_pixmap = get_pixmap("mask.png") + cls._mask_pixmap = mask_pixmap + return cls._mask_pixmap + + def _change_size(self): + super(SettingsToolBtn, self)._change_size() + size = self.iconSize() + scaled = self._get_mask_pixmap().scaled( + size.width(), + size.height(), + QtCore.Qt.IgnoreAspectRatio, + QtCore.Qt.SmoothTransformation + ) + self.setMask(scaled.mask()) + + class ShadowWidget(QtWidgets.QWidget): def __init__(self, message, parent): super(ShadowWidget, self).__init__(parent) From 1b05dbbf52c5874e68626f595ab04d0d749519bb Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:40:07 +0100 Subject: [PATCH 33/46] added functions creating SettingsToolBtn objects --- openpype/tools/settings/settings/lib.py | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/openpype/tools/settings/settings/lib.py b/openpype/tools/settings/settings/lib.py index 577aaa5671..d12a14259a 100644 --- a/openpype/tools/settings/settings/lib.py +++ b/openpype/tools/settings/settings/lib.py @@ -1,5 +1,7 @@ from Qt import QtCore +from .widgets import SettingsToolBtn + # Offset of value change trigger in ms VALUE_CHANGE_OFFSET_MS = 300 @@ -16,3 +18,33 @@ def create_deffered_value_change_timer(callback): timer.setInterval(VALUE_CHANGE_OFFSET_MS) timer.timeout.connect(callback) return timer + + +def create_add_btn(parent): + add_btn = SettingsToolBtn("add", parent) + add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) + return add_btn + + +def create_remove_btn(parent): + remove_btn = SettingsToolBtn("remove", parent) + remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) + return remove_btn + + +def create_up_btn(parent): + remove_btn = SettingsToolBtn("up", parent) + remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) + return remove_btn + + +def create_down_btn(parent): + add_btn = SettingsToolBtn("down", parent) + add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) + return add_btn + + +def create_confirm_btn(parent): + remove_btn = SettingsToolBtn("confirm", parent) + remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) + return remove_btn From ca3a29b28bcc7388dc67309d0837ca6508de8925 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:40:44 +0100 Subject: [PATCH 34/46] use create functions to create buttons --- .../settings/settings/dict_mutable_widget.py | 93 ++----------------- .../settings/settings/list_item_widget.py | 52 +++-------- 2 files changed, 20 insertions(+), 125 deletions(-) diff --git a/openpype/tools/settings/settings/dict_mutable_widget.py b/openpype/tools/settings/settings/dict_mutable_widget.py index 07d64263ce..294711b38a 100644 --- a/openpype/tools/settings/settings/dict_mutable_widget.py +++ b/openpype/tools/settings/settings/dict_mutable_widget.py @@ -3,7 +3,12 @@ from uuid import uuid4 from Qt import QtWidgets, QtCore, QtGui from .base import BaseWidget -from .lib import create_deffered_value_change_timer +from .lib import ( + create_deffered_value_change_timer, + create_add_btn, + create_remove_btn, + create_confirm_btn +) from .widgets import ( ExpandingWidget, IconButton @@ -21,92 +26,6 @@ KEY_INPUT_TOOLTIP = ( ) -class PaintHelper: - cached_icons = {} - - @classmethod - def _draw_image(cls, width, height, brush): - image = QtGui.QPixmap(width, height) - image.fill(QtCore.Qt.transparent) - - icon_path_stroker = QtGui.QPainterPathStroker() - icon_path_stroker.setCapStyle(QtCore.Qt.RoundCap) - icon_path_stroker.setJoinStyle(QtCore.Qt.RoundJoin) - icon_path_stroker.setWidth(height / 5) - - painter = QtGui.QPainter(image) - painter.setPen(QtCore.Qt.transparent) - painter.setBrush(brush) - rect = QtCore.QRect(0, 0, image.width(), image.height()) - fifteenth = rect.height() / 15 - # Left point - p1 = QtCore.QPoint( - rect.x() + (5 * fifteenth), - rect.y() + (9 * fifteenth) - ) - # Middle bottom point - p2 = QtCore.QPoint( - rect.center().x(), - rect.y() + (11 * fifteenth) - ) - # Top right point - p3 = QtCore.QPoint( - rect.x() + (10 * fifteenth), - rect.y() + (5 * fifteenth) - ) - - path = QtGui.QPainterPath(p1) - path.lineTo(p2) - path.lineTo(p3) - - stroked_path = icon_path_stroker.createStroke(path) - painter.drawPath(stroked_path) - - painter.end() - - return image - - @classmethod - def get_confirm_icon(cls, width, height): - key = "{}x{}-confirm_image".format(width, height) - icon = cls.cached_icons.get(key) - - if icon is None: - image = cls._draw_image(width, height, QtCore.Qt.white) - icon = QtGui.QIcon(image) - cls.cached_icons[key] = icon - return icon - - -def create_add_btn(parent): - add_btn = QtWidgets.QPushButton("+", parent) - add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - add_btn.setObjectName("SettingsToolBtn") - add_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - return add_btn - - -def create_remove_btn(parent): - remove_btn = QtWidgets.QPushButton("-", parent) - remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - remove_btn.setObjectName("SettingsToolBtn") - remove_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - return remove_btn - - -def create_confirm_btn(parent): - confirm_btn = QtWidgets.QPushButton(parent) - - icon = PaintHelper.get_confirm_icon( - BTN_FIXED_SIZE, BTN_FIXED_SIZE - ) - confirm_btn.setIcon(icon) - confirm_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - confirm_btn.setObjectName("SettingsToolBtn") - confirm_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - return confirm_btn - - class ModifiableDictEmptyItem(QtWidgets.QWidget): def __init__(self, entity_widget, store_as_list, parent): super(ModifiableDictEmptyItem, self).__init__(parent) diff --git a/openpype/tools/settings/settings/list_item_widget.py b/openpype/tools/settings/settings/list_item_widget.py index cc539933ff..251c2fe239 100644 --- a/openpype/tools/settings/settings/list_item_widget.py +++ b/openpype/tools/settings/settings/list_item_widget.py @@ -1,13 +1,18 @@ from Qt import QtWidgets, QtCore -from .base import InputWidget -from .widgets import ExpandingWidget from openpype.tools.settings import ( BTN_FIXED_SIZE, CHILD_OFFSET ) -from avalon.vendor import qtawesome +from .base import InputWidget +from .widgets import ExpandingWidget +from .lib import ( + create_add_btn, + create_remove_btn, + create_up_btn, + create_down_btn +) class EmptyListItem(QtWidgets.QWidget): @@ -16,18 +21,11 @@ class EmptyListItem(QtWidgets.QWidget): self.entity_widget = entity_widget - add_btn = QtWidgets.QPushButton("+", self) - remove_btn = QtWidgets.QPushButton("-", self) + add_btn = create_add_btn(self) + remove_btn = create_remove_btn(self) - add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) remove_btn.setEnabled(False) - add_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - remove_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - - add_btn.setObjectName("SettingsToolBtn") - remove_btn.setObjectName("SettingsToolBtn") - layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(3) @@ -52,32 +50,10 @@ class ListItem(QtWidgets.QWidget): self.ignore_input_changes = entity_widget.ignore_input_changes - char_up = qtawesome.charmap("fa.angle-up") - char_down = qtawesome.charmap("fa.angle-down") - - add_btn = QtWidgets.QPushButton("+") - remove_btn = QtWidgets.QPushButton("-") - up_btn = QtWidgets.QPushButton(char_up) - down_btn = QtWidgets.QPushButton(char_down) - - font_up_down = qtawesome.font("fa", 13) - up_btn.setFont(font_up_down) - down_btn.setFont(font_up_down) - - add_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - remove_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - up_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - down_btn.setFocusPolicy(QtCore.Qt.ClickFocus) - - add_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - remove_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - up_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - down_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE) - - add_btn.setObjectName("SettingsToolBtn") - remove_btn.setObjectName("SettingsToolBtn") - up_btn.setObjectName("SettingsToolBtn") - down_btn.setObjectName("SettingsToolBtn") + add_btn = create_add_btn(self) + remove_btn = create_remove_btn(self) + up_btn = create_up_btn(self) + down_btn = create_down_btn(self) add_btn.clicked.connect(self._on_add_clicked) remove_btn.clicked.connect(self._on_remove_clicked) From c6450e25e0518a3ce4d3d4287ffe1106bc028a73 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 12:47:27 +0100 Subject: [PATCH 35/46] buttons are smaller --- openpype/style/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index b1ec152f0e..5e2d200d17 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1144,7 +1144,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #ImageButton { padding: 0; background: transparent; - font-size: 12pt; + font-size: 11pt; } #ImageButton:disabled { From 26a12167da149ed5b50de9103e48ab000ab08fa7 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 17:07:30 +0100 Subject: [PATCH 36/46] removed unused import --- openpype/tools/settings/settings/list_item_widget.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/tools/settings/settings/list_item_widget.py b/openpype/tools/settings/settings/list_item_widget.py index 251c2fe239..cd1fd912ae 100644 --- a/openpype/tools/settings/settings/list_item_widget.py +++ b/openpype/tools/settings/settings/list_item_widget.py @@ -1,7 +1,6 @@ from Qt import QtWidgets, QtCore from openpype.tools.settings import ( - BTN_FIXED_SIZE, CHILD_OFFSET ) From 4a137b4b61f010274743486b17c29cabb167c0ed Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 17:13:18 +0100 Subject: [PATCH 37/46] removed settings style imports --- openpype/tools/settings/__init__.py | 5 ++--- openpype/tools/settings/settings/__init__.py | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/openpype/tools/settings/__init__.py b/openpype/tools/settings/__init__.py index a156228dc1..3e77a8348a 100644 --- a/openpype/tools/settings/__init__.py +++ b/openpype/tools/settings/__init__.py @@ -1,12 +1,13 @@ import sys from Qt import QtWidgets, QtGui + +from openpype import style from .lib import ( BTN_FIXED_SIZE, CHILD_OFFSET ) from .local_settings import LocalSettingsWindow from .settings import ( - style, MainWidget, ProjectListWidget ) @@ -36,8 +37,6 @@ __all__ = ( "BTN_FIXED_SIZE", "CHILD_OFFSET", - "style", - "MainWidget", "ProjectListWidget", "LocalSettingsWindow", diff --git a/openpype/tools/settings/settings/__init__.py b/openpype/tools/settings/settings/__init__.py index 6b4cf94357..9eadd456b7 100644 --- a/openpype/tools/settings/settings/__init__.py +++ b/openpype/tools/settings/settings/__init__.py @@ -1,10 +1,8 @@ -from . import style from .window import MainWidget from .widgets import ProjectListWidget __all__ = ( - "style", "MainWidget", "ProjectListWidget" ) From 48f8959e1d43ff10c54721fd9ab772e1d4534116 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 23 Nov 2021 17:13:26 +0100 Subject: [PATCH 38/46] removed settings style --- .../tools/settings/settings/style/__init__.py | 13 - .../tools/settings/settings/style/style.css | 468 ------------------ 2 files changed, 481 deletions(-) delete mode 100644 openpype/tools/settings/settings/style/__init__.py delete mode 100644 openpype/tools/settings/settings/style/style.css diff --git a/openpype/tools/settings/settings/style/__init__.py b/openpype/tools/settings/settings/style/__init__.py deleted file mode 100644 index f1d9829a04..0000000000 --- a/openpype/tools/settings/settings/style/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -import os -from openpype import resources - - -def load_stylesheet(): - style_path = os.path.join(os.path.dirname(__file__), "style.css") - with open(style_path, "r") as style_file: - stylesheet = style_file.read() - return stylesheet - - -def app_icon_path(): - return resources.get_openpype_icon_filepath() diff --git a/openpype/tools/settings/settings/style/style.css b/openpype/tools/settings/settings/style/style.css deleted file mode 100644 index 88ef74101a..0000000000 --- a/openpype/tools/settings/settings/style/style.css +++ /dev/null @@ -1,468 +0,0 @@ -/* :root { - --border-color-: #464b54; -} - */ - - -QWidget { - color: #bfccd6; - background-color: #282C34; - font-size: 12px; - border-radius: 0px; -} - -QMenu { - border: 1px solid #555555; - background-color: #21252B; -} - -QMenu::item { - padding: 5px 10px 5px 10px; - border-left: 5px solid #313131; -} - -QMenu::item:selected { - border-left-color: #61839e; - background-color: #222d37; -} -QCheckBox { - spacing: 0px; -} -QCheckBox::indicator {} -QCheckBox::indicator:focus {} - -QLineEdit, QSpinBox, QDoubleSpinBox, QPlainTextEdit, QTextEdit { - border: 1px solid #464b54; - border-radius: 3px; - background-color: #21252B; -} - -QLineEdit:disabled, QSpinBox:disabled, QDoubleSpinBox:disabled, QPlainTextEdit:disabled, QTextEdit:disabled, QPushButton:disabled { - background-color: #464b54; -} - -QLineEdit:focus, QSpinBox:focus, QDoubleSpinBox:focus, QPlainTextEdit:focus, QTextEdit:focus { - border: 1px solid #839caf; -} - -QComboBox { - border: 1px solid #464b54; - border-radius: 3px; - padding: 2px 2px 4px 4px; - background: #21252B; -} - -QComboBox QAbstractItemView::item { - padding: 3px; -} - -QToolButton { - background: transparent; -} -QLabel { - background: transparent; - color: #969b9e; -} - -#SettingsLabel { - background: transparent; - color: #969b9e; -} -#SettingsLabel:hover {color: #b8c1c5;} - -#SettingsLabel[state="studio"] {color: #73C990;} -#SettingsLabel[state="studio"]:hover {color: #ffffff;} -#SettingsLabel[state="modified"] {color: #189aea;} -#SettingsLabel[state="modified"]:hover {color: #46b1f3;} -#SettingsLabel[state="overriden-modified"] {color: #189aea;} -#SettingsLabel[state="overriden-modified"]:hover {color: #46b1f3;} -#SettingsLabel[state="overriden"] {color: #ff8c1a;} -#SettingsLabel[state="overriden"]:hover {color: #ffa64d;} -#SettingsLabel[state="invalid"] {color: #ad2e2e;} -#SettingsLabel[state="invalid"]:hover {color: #ad2e2e;} - - -QWidget[input-state="studio"] {border-color: #858a94;} -QWidget[input-state="modified"] {border-color: #189aea;} -QWidget[input-state="overriden-modified"] {border-color: #189aea;} -QWidget[input-state="overriden"] {border-color: #ff8c1a;} -QWidget[input-state="invalid"] {border-color: #ad2e2e;} - -QPushButton { - border: 1px solid #aaaaaa; - border-radius: 3px; - padding: 5px; -} -QPushButton:hover { - background-color: #333840; - border: 1px solid #fff; - color: #fff; -} -#SettingsToolBtn { - background: transparent; - border: 1px solid #bfccd6; - border-radius: 10px; -} -#SettingsToolBtn:hover { - border-color: #189aea; - color: #46b1f3; - background-color: transparent; -} -#SettingsToolBtn:disabled { - background-color: #464b54; -} - -#SettingsToolIconBtn { - border: 0px solid #bfccd6; - background-color: transparent; -} - -#ExpandToggleBtn { - background: transparent; -} - -/* SLider */ -QSlider::groove { - border: 1px solid #464b54; - border-radius: 0.3em; -} -QSlider::groove:horizontal { - height: 8px; -} -QSlider::groove:vertical { - width: 8px; -} -QSlider::handle { - width: 10px; - height: 10px; - - border-radius: 5px; -} -QSlider::handle:horizontal { - margin: -2px 0; -} -QSlider::handle:vertical { - margin: 0 -2px; -} - -#GroupWidget { - border-bottom: 1px solid #21252B; -} - -#ProjectListWidget QListView { - border: 1px solid #464b54; - background: #21252B; -} - -#ProjectListWidget QListView:disabled { - background: #282C34; -} - -#ProjectListWidget QListView::item:disabled { - color: #4e5254; -} - -#ProjectListWidget QLabel { - background: transparent; - font-weight: bold; -} - -#MultiSelectionComboBox { - font-size: 12px; -} - -#DictKey[state="studio"] {border-color: #464b54;} -#DictKey[state="modified"] {border-color: #189aea;} -#DictKey[state="overriden"] {border-color: #00f;} -#DictKey[state="overriden-modified"] {border-color: #0f0;} -#DictKey[state="invalid"] {border-color: #ad2e2e;} - -#ExpandLabel { - font-weight: bold; -} -#ExpandLabel:hover { - color: #b8c1c5; -} - -#ContentWidget { - background-color: transparent; -} -#ContentWidget[content_state="hightlighted"] { - background-color: rgba(19, 26, 32, 15%); -} - -#SideLineWidget { - background-color: #333942; - border-style: solid; - border-color: #4e5254; - border-left-width: 3px; - border-bottom-width: 0px; - border-right-width: 0px; - border-top-width: 0px; -} - -#SideLineWidget:hover { - border-color: #7d8386; -} - -#SideLineWidget[state="child-studio"] {border-color: #56a06f;} -#SideLineWidget[state="child-studio"]:hover {border-color: #73C990;} - -#SideLineWidget[state="child-modified"] {border-color: #106aa2;} -#SideLineWidget[state="child-modified"]:hover {border-color: #189aea;} - -#SideLineWidget[state="child-invalid"] {border-color: #ad2e2e;} -#SideLineWidget[state="child-invalid"]:hover {border-color: #c93636;} - -#SideLineWidget[state="child-overriden"] {border-color: #e67300;} -#SideLineWidget[state="child-overriden"]:hover {border-color: #ff8c1a;} - -#SideLineWidget[state="child-overriden-modified"] {border-color: #106aa2;} -#SideLineWidget[state="child-overriden-modified"]:hover {border-color: #189aea;} - -#SettingsMainWidget { - background: #141a1f; -} - -#DictAsWidgetBody { - background: transparent; -} -#DictAsWidgetBody[show_borders="1"] { - border: 1px solid #4e5254; - border-radius: 5px; -} - -#Separator { - background-color: #21252B; -} - -#ShadowWidget { - font-size: 36pt; -} -QTabWidget::pane { - border-top-style: none; -} - -QTabBar { - background: transparent; -} - -QTabBar::tab { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - padding: 5px; -} - -QTabBar::tab:selected { - background: #282C34; - border-color: #9B9B9B; - border-bottom-color: #C2C7CB; -} - -QTabBar::tab:!selected { - margin-top: 2px; - background: #21252B; -} - -QTabBar::tab:!selected:hover { - background: #333840; -} - -QTabBar::tab:first:selected { - margin-left: 0; -} - -QTabBar::tab:last:selected { - margin-right: 0; -} - -QTabBar::tab:only-one { - margin: 0; -} - -QScrollBar:horizontal { - height: 15px; - margin: 3px 15px 3px 15px; - border: 1px transparent #21252B; - border-radius: 4px; - background-color: #21252B; -} - -QScrollBar::handle:horizontal { - background-color: #4B5362; - min-width: 5px; - border-radius: 4px; -} - -QScrollBar::add-line:horizontal { - margin: 0px 3px 0px 3px; - border-image: url(:/qss_icons/rc/right_arrow_disabled.png); - width: 10px; - height: 10px; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal { - margin: 0px 3px 0px 3px; - border-image: url(:/qss_icons/rc/left_arrow_disabled.png); - height: 10px; - width: 10px; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on { - border-image: url(:/qss_icons/rc/right_arrow.png); - height: 10px; - width: 10px; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on { - border-image: url(:/qss_icons/rc/left_arrow.png); - height: 10px; - width: 10px; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal { - background: none; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { - background: none; -} - -QScrollBar:vertical { - background-color: #21252B; - width: 15px; - margin: 15px 3px 15px 3px; - border: 1px transparent #21252B; - border-radius: 4px; -} - -QScrollBar::handle:vertical { - background-color: #4B5362; - min-height: 5px; - border-radius: 4px; -} - -QScrollBar::sub-line:vertical { - margin: 3px 0px 3px 0px; - border-image: url(:/qss_icons/rc/up_arrow_disabled.png); - height: 10px; - width: 10px; - subcontrol-position: top; - subcontrol-origin: margin; -} - -QScrollBar::add-line:vertical { - margin: 3px 0px 3px 0px; - border-image: url(:/qss_icons/rc/down_arrow_disabled.png); - height: 10px; - width: 10px; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on { - - border-image: url(:/qss_icons/rc/up_arrow.png); - height: 10px; - width: 10px; - subcontrol-position: top; - subcontrol-origin: margin; -} - - -QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on { - border-image: url(:/qss_icons/rc/down_arrow.png); - height: 10px; - width: 10px; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { - background: none; -} - - -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QTableView -{ - border: 1px solid #444; - gridline-color: #6c6c6c; - background-color: #201F1F; - alternate-background-color:#21252B; -} - -QHeaderView -{ - border: 1px transparent; - border-radius: 2px; - margin: 0px; - padding: 0px; -} - -QHeaderView::section { - background-color: #21252B; - /*color: silver;*/ - padding: 4px; - border: 1px solid #6c6c6c; - border-radius: 0px; - text-align: center; - color: #969b9e; - font-weight: bold; -} - -QAbstractItemView::item:pressed { - background: #78879b; - color: #FFFFFF; -} - -QAbstractItemView::item:selected:active { - background: #3d8ec9; -} -QAbstractItemView::item:selected:!active { - background: #3d8ec9; -} - -#BreadcrumbsPathInput { - padding: 2px; - font-size: 9pt; -} - -#BreadcrumbsButton { - padding-right: 12px; - font-size: 9pt; -} - -#BreadcrumbsButton[empty="1"] { - padding-right: 0px; -} - -#BreadcrumbsButton::menu-button { - width: 12px; - background: rgba(127, 127, 127, 60); -} -#BreadcrumbsButton::menu-button:hover { - background: rgba(127, 127, 127, 90); -} - -#BreadcrumbsPanel { - border: 1px solid #4e5254; - border-radius: 5px; - background: #21252B;; -} - -#NiceCheckbox { - /* Default size hint of NiceCheckbox is defined by font size. */ - font-size: 7pt; -} From 42fd92173c2b8c7922b63800b3a247ad7518bc64 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 24 Nov 2021 20:39:24 +0100 Subject: [PATCH 39/46] removed unused svgs --- .../tools/settings/settings/images/add.svg | 17 ----------------- .../settings/settings/images/confirm.svg | 19 ------------------- .../tools/settings/settings/images/down.svg | 19 ------------------- .../tools/settings/settings/images/mask.svg | 11 ----------- .../tools/settings/settings/images/remove.svg | 14 -------------- .../tools/settings/settings/images/up.svg | 19 ------------------- 6 files changed, 99 deletions(-) delete mode 100644 openpype/tools/settings/settings/images/add.svg delete mode 100644 openpype/tools/settings/settings/images/confirm.svg delete mode 100644 openpype/tools/settings/settings/images/down.svg delete mode 100644 openpype/tools/settings/settings/images/mask.svg delete mode 100644 openpype/tools/settings/settings/images/remove.svg delete mode 100644 openpype/tools/settings/settings/images/up.svg diff --git a/openpype/tools/settings/settings/images/add.svg b/openpype/tools/settings/settings/images/add.svg deleted file mode 100644 index 9948084cd5..0000000000 --- a/openpype/tools/settings/settings/images/add.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/openpype/tools/settings/settings/images/confirm.svg b/openpype/tools/settings/settings/images/confirm.svg deleted file mode 100644 index ebc5e024e6..0000000000 --- a/openpype/tools/settings/settings/images/confirm.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/openpype/tools/settings/settings/images/down.svg b/openpype/tools/settings/settings/images/down.svg deleted file mode 100644 index 9f3f955a80..0000000000 --- a/openpype/tools/settings/settings/images/down.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/openpype/tools/settings/settings/images/mask.svg b/openpype/tools/settings/settings/images/mask.svg deleted file mode 100644 index 260b2c6fad..0000000000 --- a/openpype/tools/settings/settings/images/mask.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/openpype/tools/settings/settings/images/remove.svg b/openpype/tools/settings/settings/images/remove.svg deleted file mode 100644 index 4a1b075db1..0000000000 --- a/openpype/tools/settings/settings/images/remove.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/openpype/tools/settings/settings/images/up.svg b/openpype/tools/settings/settings/images/up.svg deleted file mode 100644 index 5b813f44f8..0000000000 --- a/openpype/tools/settings/settings/images/up.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - From 2fc409fed3a8d677a6c02b9295e0e995e1b1b5f5 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 24 Nov 2021 20:39:45 +0100 Subject: [PATCH 40/46] modified icon images --- openpype/tools/settings/settings/images/add.png | Bin 822 -> 778 bytes .../tools/settings/settings/images/confirm.png | Bin 931 -> 853 bytes .../tools/settings/settings/images/down.png | Bin 924 -> 820 bytes .../tools/settings/settings/images/mask.png | Bin 744 -> 720 bytes .../tools/settings/settings/images/remove.png | Bin 819 -> 767 bytes openpype/tools/settings/settings/images/up.png | Bin 930 -> 819 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/openpype/tools/settings/settings/images/add.png b/openpype/tools/settings/settings/images/add.png index 81a68e6d5f6ff7b318bb32aaad01ace2212e4bea..91ef720d32d15cd31f887fe387dcffc5cc9b09cc 100644 GIT binary patch delta 766 zcmVg@CzN3%PZUa5%-uc7e*xMM-E z!@#J&iGRi>Wl{SYQb7I;t%pJBBM{jQBT==1cqsg1U0h$h1~j9@ePNvqe>7=}~Sj7iZldPUC|6f>h!EDWRY zUx-!_8boLm(URX`XxkcZj@*u#7MUS)yNrCMj(28RPgWi-FzlEw&>qq4SpI{O5J606 zegpi$ANK~wzWJ(dzIeDSxJI~OxOxZ$#N|9y=SjrCLX;uo5Pv8PC>bawC^INPEKMj{ wC}${iXaUe1ux&s?fmQ=e2-{PX92MyJ00m0wZbXtbVE_OC07*qoM6N<$g8R8Z1ONa4 delta 791 zcmV+y1L*vU2DS!}7=Ho-0001=_MfW&00Dw&Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&=02!(kl9UmNmc(-h(0u!Pg5nGzR=iBUMrl;N^{_e*W_?fac1SLM2*#Ko@ze*stJ ztQ3)wn{p;Dtgp{^TW!fcPoL-Wdfw0T`Sd)W2du%AlGbZIkbll(wSeE}TnH^X>tC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!&O=( zK~zYIwU$d3!ypJn*`yg{3GBxuIKWjlQA9L(IZc`}=%HQ(jq;%kgiMpL2_Hcjcf>$Y znL%t|8G!^79zg0~9YAp6LGoaAAhwy^J(=rnlMST48ELjiEw$~NPP*Pcg{W1kx-BS6 zSV6K=<^GTAob05oC)2#G3S_WUe{699$zNP<6D!DrG!RD@IzT$13@qkE0XGxoWCvm{ zoWfTinQsGe^GfA+0{h$x(9dmPcY6u)40es=9PkE~BZyZZor84)>k*_!AodIQU^xf! zBaq-!1>$3nzX5a9{sY|K6+GbEA91><7as$BaQELX3$0!nkb1LXTSm*i69o12-(V#eq%HEFUks V2!e~iK)V0{002ovPDHLkV1i27Y7qbc diff --git a/openpype/tools/settings/settings/images/confirm.png b/openpype/tools/settings/settings/images/confirm.png index d40e40f2e90e03d71be7ece9f47a80c027bac276..a0fdc66d3e01698711a669366568797f2a6aabe7 100644 GIT binary patch delta 842 zcmV-Q1GW642h|3U7=Hl+0002kR^@vD00Dz(Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&g@CFutXz7ev5E!P!14gX zE{hbIet)E6eoI*hpMrGy5z5U$@{x$fij}CZAU+(i%lRA%R=$XR!A)*C706k?VWdH@ zjf$x6NI|jM>wCp)m=zbpT`?Fo!4V8`Vx-Z)XUfr66BwIgVB8%S#_X6Gi{rt#I(9~I z#5WwHBTa}jIgXLy3xR5A92{*g478W4znrfXgMZ*rp628%A0cU7sH`Azh!2OP`VA$Y z>m(=(mGbP4->*0|kN_&Qt_}&{GbDft37|qdMiEDmg}R1MZ?fySz1fwo&``~C_OXg0FibFJFn~CkFtjkvFzB!az~+G425cy>)xai%+tWc-N6O9d4@Uj_ USpNg^4gdfE07*qoM6N<$f^*Sre*gdg delta 901 zcmV;01A6?`2BQa%7=Ho-0001=_MfW&00Dw&Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&=02!(kl9UmNmc(-h(0u!Pg5nGzR=iBUMrl;N^{_e*W_?fac1SLM2*#Ko@ze*stJ ztQ3)wn{p;Dtgp{^TW!fcPoL-Wdfw0T`Sd)W2du%AlGbZIkbll(wSeE}TnH^X>tC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!&hYJbrHazY3phme}H$~kck9F5CJ`!;6DmaIE*l85g-9PP0-XY08ZP> z`a407w(%Kz?ggLSy~&|x-6}iqu8|*d@Sdj&%xJ24=|Kt0uNuTtHvwf zBt&}+)y!fSoe2h3CKaqS(8TF3wL+@7S`%~7B?b1JI0c>qO^JC?JjMQX-iF;aNf4lMxQ?o(#J&l{Ky|H`4cC7 b6rJ(|RJ;`zlNuKY00000NkvXXu0mjf(YT~} diff --git a/openpype/tools/settings/settings/images/down.png b/openpype/tools/settings/settings/images/down.png index 4c6b7f74714704f79867c0c62d84824570c6d157..f78622922f9e42d20e2b794375b248ca82e76cd8 100644 GIT binary patch delta 809 zcmV+^1J?YU2ebx|7=Hl+0002kR^@vD00Dz(Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&g@C?@hL=;d6&ju*hp zh6RBss(%3eC$ZDSh@UY*s0XFXpnMBNW5Y(&HxQ2s|CQ3WDcJbI_XSJ-q$|j?ykUeP z!;JzjYXl?MbopMeDptX)cnJoD%ZNtdEhCHyo+ta^MSMzuAV=NyZdR(*;X+!PZ~kh6`kw3eAOrXce&S z50C1@gTId)1Q1wxNzccF_s$Lr64=00000NkvXXu0mjf(cV_+ delta 894 zcmV-^1A+Xs2Al_w7=Ho-0001=_MfW&00Dw&Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&=02!(kl9UmNmc(-h(0u!Pg5nGzR=iBUMrl;N^{_e*W_?fac1SLM2*#Ko@ze*stJ ztQ3)wn{p;Dtgp{^TW!fcPoL-Wdfw0T`Sd)W2du%AlGbZIkbll(wSeE}TnH^X>tC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!&L=LqKpb4! zPS6b88H~$YO`r#O61bot=m;JF%`8K{xODie4ti{6n6ILqZ2R6Xy54`qP_IS$zF;q@ z3c7#Q8>1pNFEm+SyobI7jO1zif2tdFJh;~k1-z*lXjwuhiW(du3Tg&Jz&Itu^b6>x z_ELW)Xs7nOZNGqzP06;t0w2521z@-R4p1k6dl0<@LT!QgJ~*)X2@}|;#}W4gTEtTZ z5H$-lytQUDg#&bmz=5DaI3+M=n~5M;H`^~Uf;H*a9>I2FA_(@Ji2x8UelA5E4t zz0!nCQ#eifyiCx-LQ4@XG+w;i(E>?JDlNjiY|}!|p9b_XL7yM|!NQ+7^ig!SKT&EE Udmy2T=l}o!07*qoM6N<$f{HkwHvj+t diff --git a/openpype/tools/settings/settings/images/mask.png b/openpype/tools/settings/settings/images/mask.png index 601a67733e0c0fcd6d6ad9e1c9929b7cd55497c2..f10f00be2c7849aed4714b920c75028fe933a4df 100644 GIT binary patch delta 708 zcmV;#0z3Wa1<(bM7=Hl+0002kR^@vD00Dz(Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&g@Cw z0J0tKORztC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!& zK~zYI?Uq3b#UKnsy`(NYg7@(VF6=44inU3a5fu6G;m@l07BdCS#9TmTd}Uh{-k_Zm zGJx%pAl|@nknK=lAU(h{V2LP56nFw61?~aaGKB#W2Y!Iafg8XI-5^U4I!F@u4x$9E z19{#|jAGGDjAGGDX5i)B+>Pd4e%&WP2~}fFfD)?4GFqq_YXY?M5^DpfX-nP>p#ER^ z!;>KD!2Q9mfN$KAgO~c?Q`>mwaAd4cpY;ichvoX*g(DmeeOwc;SYQ>w^1^io3ldf; uEMZ*Ru;}q>0GA24e&B@#uQ+filKKE?Ikf`1;C}4@0000g@CU6Fdzp-pFI<)Jj*mPu;#ux6d>ye^ zfs;AB5sYd2O3)|tf;M3i)Co&OFbS?gy+MIrkVJwQ8F)3O`ujm^E$9$)!Ek}0U~IlXdqh{T{s%cBf)LUC26(|A*9M<` z^H<&c@#i}S8w^_yp@6uYr|LY37+8ohgdE}zg#jf4#RO#r1&E~yMGNH&g$^wMngg~C lXeiKXpb24n3X-D?9UoWP1bfEv-{k-R002ovPDHLkV1k{PI-dXl delta 788 zcmV+v1MB?%1+xZ_7=Ho-0001=_MfW&00Dw&Lqkw=Qb$4{Nkv08F*!CiEix`K001bF zb&=02!(kl9UmNmc(-h(0u!Pg5nGzR=iBUMrl;N^{_e*W_?fac1SLM2*#Ko@ze*stJ ztQ3)wn{p;Dtgp{^TW!fcPoL-Wdfw0T`Sd)W2du%AlGbZIkbll(wSeE}TnH^X>tC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!&)*oc$wH@=?1(=*FZY_bGPi{rJ@izN=fyvwC?*iP!mm|Eu6h;c<3Gj1#`AqHs z{{XOlgYFYxU+pizzE}S^D=X}MaCO2}~PgUJ%6 zSD27t3WrG_mkC%{U@3yd3zs`sAYn;`MHrWDSm<$U0GkQee&B`$w>YpVvhoHkMkTt} S5K0sP0000g@CJpuadcczbY6HM_J0e{H+Wvy-(cy%8x6d`Qy>Rf;B<#W zb+BWHb?7k99ftKn7_DjWDyN{pX`V=MOq>#dHDPR6B}{^uKLvv%Ot5fR3VvezWx%#S zJgN^5{{H6Rg5l~R6cCsDRNW^L0}D}xkVE{TFrZ|hn4rv{0I@WoXrY{;(4hrDbHKI% m4Iu?u4KyKaPl3oZ)bR()5DD(#*KKtC_a zK_l%r!iuiW%uNKTYF`gn%y{QEYgIq@ui2t8T>(pj@Tj6{S>Z|H>GiB?@~&{3k_< zTf7UM0DgQpnSWxOF@_jmMCKvfc``9q@Cs6YYSDAAD>Jbcoik>TLJ%`}f zf{W|27TJT#ZRmVb!&el@N&>Nnu$i8#1) zoS+%FcQ7s=bpt)XvwnV+8{IeJKH+o%IO| zJlh=dBIyC#gqM|p8Cy(Z2sDy!ZX&B{84HLdCn3W?n24wYH_?ayW}=z_f6PP!0+@+P z25?j135bR%CLoV2hXh0u;}A9IsqFCY(=nn;dTcbBy6d$3FEd68$CW6z{3PQe&7QOKH|Vb a(K$Z-ToXL+u8OY!0000 Date: Wed, 24 Nov 2021 21:04:38 +0100 Subject: [PATCH 41/46] added colors for nice checkbox into style --- openpype/style/data.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index 5e590bce79..c17e31afcc 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -59,7 +59,12 @@ "color-selected": "#F0F2F5", "color-hover": "#F0F2F5" }, - + "nice-checkbox": { + "bg-checked": "#56a06f", + "bg-unchecked": "#434b56", + "bg-checker": "#D3D8DE", + "bg-checker-hover": "#F0F2F5" + }, "loader": { "asset-view": { "selected": "rgba(168, 175, 189, 0.6)", From 52cf1a4e2a25569fb6532b68c5c9db56860e1ebe Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 24 Nov 2021 21:04:58 +0100 Subject: [PATCH 42/46] skip drawing of shadow under checker --- openpype/widgets/nice_checkbox.py | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/openpype/widgets/nice_checkbox.py b/openpype/widgets/nice_checkbox.py index b032453a7f..b517e90901 100644 --- a/openpype/widgets/nice_checkbox.py +++ b/openpype/widgets/nice_checkbox.py @@ -353,31 +353,6 @@ class NiceCheckbox(QtWidgets.QFrame): under_mouse = self.isEnabled() and self._under_mouse - shadow_x = checker_rect.x() - shadow_y = checker_rect.y() + margin_size_c - shadow_size = min( - frame_rect.right() - shadow_x, - frame_rect.bottom() - shadow_y, - checker_size + (2 * margin_size_c) - ) - shadow_rect = QtCore.QRect( - checker_rect.x(), - shadow_y, - shadow_size, - shadow_size - ) - - shadow_brush = QtGui.QRadialGradient( - shadow_rect.center(), - shadow_rect.height() / 2 - ) - shadow_brush.setColorAt(0.6, QtCore.Qt.black) - shadow_brush.setColorAt(1, QtCore.Qt.transparent) - - painter.setPen(QtCore.Qt.transparent) - painter.setBrush(shadow_brush) - painter.drawEllipse(shadow_rect) - painter.setBrush(checker_color) painter.drawEllipse(checker_rect) From 0d3f4ba7abbfcc65701aafea0ab38daf0ad8edbc Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 24 Nov 2021 21:05:17 +0100 Subject: [PATCH 43/46] use colors from openpype styles to draw nice checkbox --- openpype/widgets/nice_checkbox.py | 72 ++++++++++++++++++------------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/openpype/widgets/nice_checkbox.py b/openpype/widgets/nice_checkbox.py index b517e90901..ccd079c0fb 100644 --- a/openpype/widgets/nice_checkbox.py +++ b/openpype/widgets/nice_checkbox.py @@ -1,11 +1,18 @@ from math import floor, sqrt, ceil from Qt import QtWidgets, QtCore, QtGui +from openpype.style import get_objected_colors + class NiceCheckbox(QtWidgets.QFrame): stateChanged = QtCore.Signal(int) clicked = QtCore.Signal() + _checked_bg_color = None + _unchecked_bg_color = None + _checker_color = None + _checker_hover_color = None + def __init__(self, checked=False, draw_icons=False, parent=None): super(NiceCheckbox, self).__init__(parent) @@ -41,12 +48,6 @@ class NiceCheckbox(QtWidgets.QFrame): self._pressed = False self._under_mouse = False - self.checked_bg_color = QtGui.QColor(67, 181, 129) - self.unchecked_bg_color = QtGui.QColor(79, 79, 79) - - self.checker_checked_color = QtGui.QColor(255, 255, 255) - self.checker_unchecked_color = self.checker_checked_color - self.icon_scale_factor = sqrt(2) / 2 icon_path_stroker = QtGui.QPainterPathStroker() @@ -58,6 +59,37 @@ class NiceCheckbox(QtWidgets.QFrame): self._animation_timer.timeout.connect(self._on_animation_timeout) self._base_size = QtCore.QSize(90, 50) + self._load_colors() + + @classmethod + def _load_colors(cls): + if cls._checked_bg_color is not None: + return + + colors_data = get_objected_colors() + colors_info = colors_data["nice-checkbox"] + + cls._checked_bg_color = colors_info["bg-checked"].get_qcolor() + cls._unchecked_bg_color = colors_info["bg-unchecked"].get_qcolor() + + cls._checker_color = colors_info["bg-checker"].get_qcolor() + cls._checker_hover_color = colors_info["bg-checker-hover"].get_qcolor() + + @property + def checked_bg_color(self): + return self._checked_bg_color + + @property + def unchecked_bg_color(self): + return self._unchecked_bg_color + + @property + def checker_color(self): + return self._checker_color + + @property + def checker_hover_color(self): + return self._checker_hover_color def setTristate(self, tristate=True): if self._is_tristate != tristate: @@ -284,11 +316,9 @@ class NiceCheckbox(QtWidgets.QFrame): # Draw inner background if self._current_step == self._steps: bg_color = self.checked_bg_color - checker_color = self.checker_checked_color elif self._current_step == 0: bg_color = self.unchecked_bg_color - checker_color = self.checker_unchecked_color else: offset_ratio = self._current_step / self._steps @@ -298,11 +328,6 @@ class NiceCheckbox(QtWidgets.QFrame): self.unchecked_bg_color, offset_ratio ) - checker_color = self.steped_color( - self.checker_checked_color, - self.checker_unchecked_color, - offset_ratio - ) margins_ratio = self._checker_margins_divider if margins_ratio > 0: @@ -352,27 +377,14 @@ class NiceCheckbox(QtWidgets.QFrame): checker_rect = QtCore.QRect(pos_x, pos_y, checker_size, checker_size) under_mouse = self.isEnabled() and self._under_mouse + if under_mouse: + checker_color = self.checker_hover_color + else: + checker_color = self.checker_color painter.setBrush(checker_color) painter.drawEllipse(checker_rect) - if under_mouse: - adjust = margin_size_c - if adjust < 1 and checker_rect.height() > 4: - adjust = 1 - - smaller_checker_rect = checker_rect.adjusted( - adjust, adjust, -adjust, -adjust - ) - gradient = QtGui.QLinearGradient( - smaller_checker_rect.bottomRight(), - smaller_checker_rect.topLeft() - ) - gradient.setColorAt(0, checker_color) - gradient.setColorAt(1, checker_color.darker(155)) - painter.setBrush(gradient) - painter.drawEllipse(smaller_checker_rect) - if self._draw_icons: painter.setBrush(bg_color) icon_path = self._get_icon_path(painter, checker_rect) From f10143371fa5a47b07c3a36a5ff41e58acaa4266 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 25 Nov 2021 19:03:14 +0100 Subject: [PATCH 44/46] keep tab widget same as before --- openpype/style/style.css | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/openpype/style/style.css b/openpype/style/style.css index 5e2d200d17..8118fb5221 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -968,9 +968,52 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #SettingsMainWidget { background: #141a1f; } +/* Change focus borders. */ #SettingsMainWidget QAbstractSpinBox:focus, #SettingsMainWidget QLineEdit:focus, #SettingsMainWidget QPlainTextEdit:focus, #SettingsMainWidget QTextEdit:focus { border-color: {color:settings:focus-border}; } +/* Modify tab widget for settings */ +#SettingsMainWidget QTabWidget::pane { + border-top-style: none; +} + +#SettingsMainWidget QTabBar { + background: transparent; +} + +#SettingsMainWidget QTabBar::tab { + border: none; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding: 5px; +} + +#SettingsMainWidget QTabBar::tab:selected { + background: {color:bg}; + border-color: #9B9B9B; + border-bottom-color: #C2C7CB; +} + +#SettingsMainWidget QTabBar::tab:!selected { + margin-top: 2px; + background: #21252B; +} + +#SettingsMainWidget QTabBar::tab:!selected:hover { + background: #333840; +} + +#SettingsMainWidget QTabBar::tab:first:selected { + margin-left: 0; +} + +#SettingsMainWidget QTabBar::tab:last:selected { + margin-right: 0; +} + +#SettingsMainWidget QTabBar::tab:only-one { + margin: 0; +} #SettingsToolIconBtn { border: 0px solid #bfccd6; From a00da90b74a3b5ba9bb25fde8f1447c19d609ef9 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 25 Nov 2021 19:08:56 +0100 Subject: [PATCH 45/46] fix expand label color --- openpype/style/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/openpype/style/style.css b/openpype/style/style.css index 8118fb5221..ea953c83e3 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1087,6 +1087,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #ExpandLabel { font-weight: bold; + color: #969b9e; } #ExpandLabel:hover { color: #b8c1c5; From 8cd841d1d61a4ab8e73d101540243b372267e6be Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 25 Nov 2021 19:17:24 +0100 Subject: [PATCH 46/46] use colors from data --- openpype/style/data.json | 3 +++ openpype/style/style.css | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/openpype/style/data.json b/openpype/style/data.json index c17e31afcc..026eaf4264 100644 --- a/openpype/style/data.json +++ b/openpype/style/data.json @@ -101,6 +101,9 @@ "project-mid": "#FF8C1A", "project-dark": "#E67300", + "label-fg": "#969b9e", + "label-fg-hover": "#b8c1c5", + "breadcrumbs-btn-bg": "rgba(127, 127, 127, 60)", "breadcrumbs-btn-bg-hover": "rgba(127, 127, 127, 90)", diff --git a/openpype/style/style.css b/openpype/style/style.css index ea953c83e3..a60c3592d7 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1041,9 +1041,9 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #SettingsLabel { background: transparent; - color: #969b9e; + color: {color:settings:label-fg}; } -#SettingsLabel:hover {color: #b8c1c5;} +#SettingsLabel:hover {color: {color:settings:label-fg-hover};} #SettingsLabel[state="studio"] {color: {color:settings:studio-light};} #SettingsLabel[state="studio"]:hover {color: {color:settings:studio-label-hover};} #SettingsLabel[state="modified"] {color: {color:settings:modified-mid};} @@ -1087,10 +1087,10 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { #ExpandLabel { font-weight: bold; - color: #969b9e; + color: {color:settings:label-fg}; } #ExpandLabel:hover { - color: #b8c1c5; + color: {color:settings:label-fg-hover}; } #ContentWidget {