From faaf4de0816758825545e54f645cdae4a0d6f3c9 Mon Sep 17 00:00:00 2001
From: hkaramian <93508495+hkaramian@users.noreply.github.com>
Date: Fri, 10 Dec 2021 15:03:54 +0330
Subject: [PATCH 01/11] v2.0
---
Dev-Files/panel_v02 - Bookmarks List.ui | 529 +++++++
Dev-Files/panel_v02 - Bookmarks List2222.ui | 283 ++++
Dev-Files/panel_v02 - MenuButtons.ui | 465 ++++++
Dev-Files/panel_v02 - Settings.ui | 1352 +++++++++++++++++
...02 - Proto.ui => panel_v02 - Templates.ui} | 466 ++----
Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py | 929 ++++++++---
Km_NodeGraphEN/Ui_EditBookmarks.py | 334 ++++
Km_NodeGraphEN/Ui_MenuButtonsLayout.py | 11 +
Km_NodeGraphEN/Ui_Settings.py | 369 +++--
Km_NodeGraphEN/Ui_Templates.py | 209 +++
Km_NodeGraphEN/constants.py | 4 +
Km_NodeGraphEN/dev-rAnd.py | 8 +
.../icons/cil-arrow-circle-bottom.png | Bin 0 -> 2267 bytes
Km_NodeGraphEN/icons/cil-arrow-circle-top.png | Bin 0 -> 2273 bytes
Km_NodeGraphEN/icons/cil-check-circle.png | Bin 0 -> 2263 bytes
Km_NodeGraphEN/icons/cil-credit-card.png | Bin 0 -> 1951 bytes
Km_NodeGraphEN/icons/cil-heart.png | Bin 0 -> 2132 bytes
Km_NodeGraphEN/icons/cil-library-add.png | Bin 0 -> 2091 bytes
Km_NodeGraphEN/icons/cil-lightbulb.png | Bin 0 -> 2139 bytes
Km_NodeGraphEN/icons/cil-medical-cross.png | Bin 0 -> 2066 bytes
Km_NodeGraphEN/icons/cil-menu.png | Bin 0 -> 1817 bytes
Km_NodeGraphEN/icons/cil-mouse.png | Bin 0 -> 2128 bytes
Km_NodeGraphEN/icons/cil-remove.png | Bin 0 -> 2128 bytes
Km_NodeGraphEN/icons/cil-save.png | Bin 0 -> 2142 bytes
Km_NodeGraphEN/icons/cil-settings.png | Bin 0 -> 2324 bytes
Km_NodeGraphEN/icons/cil-smile.png | Bin 0 -> 2262 bytes
Km_NodeGraphEN/icons/cil-star.png | Bin 0 -> 2164 bytes
Km_NodeGraphEN/icons/cil-thumb-up.png | Bin 0 -> 2145 bytes
Km_NodeGraphEN/icons/cil-trash.png | Bin 0 -> 2090 bytes
Km_NodeGraphEN/icons/cil-view-quilt.png | Bin 0 -> 2026 bytes
Km_NodeGraphEN/icons/cil-window-restore.png | Bin 0 -> 2026 bytes
Km_NodeGraphEN/icons/cil-x-circle.png | Bin 0 -> 2297 bytes
Km_NodeGraphEN/model.py | 142 +-
Km_NodeGraphEN/settings - Copy.json | 1 +
Km_NodeGraphEN/settings.json | 2 +-
Km_NodeGraphEN/templates/1Up_project.json | 1 +
.../templates/New folder/frm_proj.json | 1 +
Km_NodeGraphEN/templates/New folder/key.json | 1 +
Km_NodeGraphEN/templates/New folder/test.json | 1 +
.../templates/New folder/test_with_space.json | 1 +
Km_NodeGraphEN/templates/current_proj.json | 1 +
.../templates/divar_window_shots.json | 1 +
Km_NodeGraphEN/templates/frm_proj.json | 1 +
Km_NodeGraphEN/templates/test_with_space.json | 1 +
44 files changed, 4469 insertions(+), 644 deletions(-)
create mode 100644 Dev-Files/panel_v02 - Bookmarks List.ui
create mode 100644 Dev-Files/panel_v02 - Bookmarks List2222.ui
create mode 100644 Dev-Files/panel_v02 - MenuButtons.ui
create mode 100644 Dev-Files/panel_v02 - Settings.ui
rename Dev-Files/{panel_v02 - Proto.ui => panel_v02 - Templates.ui} (51%)
create mode 100644 Km_NodeGraphEN/Ui_EditBookmarks.py
create mode 100644 Km_NodeGraphEN/Ui_MenuButtonsLayout.py
create mode 100644 Km_NodeGraphEN/Ui_Templates.py
create mode 100644 Km_NodeGraphEN/constants.py
create mode 100644 Km_NodeGraphEN/dev-rAnd.py
create mode 100644 Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png
create mode 100644 Km_NodeGraphEN/icons/cil-arrow-circle-top.png
create mode 100644 Km_NodeGraphEN/icons/cil-check-circle.png
create mode 100644 Km_NodeGraphEN/icons/cil-credit-card.png
create mode 100644 Km_NodeGraphEN/icons/cil-heart.png
create mode 100644 Km_NodeGraphEN/icons/cil-library-add.png
create mode 100644 Km_NodeGraphEN/icons/cil-lightbulb.png
create mode 100644 Km_NodeGraphEN/icons/cil-medical-cross.png
create mode 100644 Km_NodeGraphEN/icons/cil-menu.png
create mode 100644 Km_NodeGraphEN/icons/cil-mouse.png
create mode 100644 Km_NodeGraphEN/icons/cil-remove.png
create mode 100644 Km_NodeGraphEN/icons/cil-save.png
create mode 100644 Km_NodeGraphEN/icons/cil-settings.png
create mode 100644 Km_NodeGraphEN/icons/cil-smile.png
create mode 100644 Km_NodeGraphEN/icons/cil-star.png
create mode 100644 Km_NodeGraphEN/icons/cil-thumb-up.png
create mode 100644 Km_NodeGraphEN/icons/cil-trash.png
create mode 100644 Km_NodeGraphEN/icons/cil-view-quilt.png
create mode 100644 Km_NodeGraphEN/icons/cil-window-restore.png
create mode 100644 Km_NodeGraphEN/icons/cil-x-circle.png
create mode 100644 Km_NodeGraphEN/settings - Copy.json
create mode 100644 Km_NodeGraphEN/templates/1Up_project.json
create mode 100644 Km_NodeGraphEN/templates/New folder/frm_proj.json
create mode 100644 Km_NodeGraphEN/templates/New folder/key.json
create mode 100644 Km_NodeGraphEN/templates/New folder/test.json
create mode 100644 Km_NodeGraphEN/templates/New folder/test_with_space.json
create mode 100644 Km_NodeGraphEN/templates/current_proj.json
create mode 100644 Km_NodeGraphEN/templates/divar_window_shots.json
create mode 100644 Km_NodeGraphEN/templates/frm_proj.json
create mode 100644 Km_NodeGraphEN/templates/test_with_space.json
diff --git a/Dev-Files/panel_v02 - Bookmarks List.ui b/Dev-Files/panel_v02 - Bookmarks List.ui
new file mode 100644
index 0000000..2625e91
--- /dev/null
+++ b/Dev-Files/panel_v02 - Bookmarks List.ui
@@ -0,0 +1,529 @@
+
+
+ EditBookmarksWindowUI
+
+
+
+ 0
+ 0
+ 599
+ 492
+
+
+
+ Km NodeGraph Easy Navigate : Edit Bookmarks
+
+
+
+
+
+ 20
+ 10
+ 561
+ 371
+
+
+
+ Bookmarks List
+
+
+
+
+ 20
+ 20
+ 521
+ 341
+
+
+
+ true
+
+
+ Qt::DashLine
+
+
+ true
+
+
+ true
+
+
+ 20
+
+
+ 100
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ 30
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ Index (Order)
+
+
+
+
+ Node Name
+
+
+
+
+ Title
+
+
+ Copy url to clipboard
+
+
+
+
+ Shortcut
+
+
+ -
+
+ 1
+
+
+ -
+
+ test
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+ 2
+
+
+ -
+
+ tt
+
+
+
+
+
+
+
+ 20
+ 450
+ 561
+ 36
+
+
+
+ -
+
+
+
+ Segoe UI
+
+
+
+ Km NodeGraph Easy Navigate v2.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ Segoe UI
+
+
+
+ By Hossein Karamian
+
+
+
+
+
+
+
+
+
+
+ 20
+ 390
+ 561
+ 41
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Change order (move up)
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-arrow-circle-top.png../Km_NodeGraphEN/icons/cil-arrow-circle-top.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Change order (move down)
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Change order (move down)
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-check-circle.png../Km_NodeGraphEN/icons/cil-check-circle.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Remove (Set Empty) Selected Bookmark
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-x-circle.png../Km_NodeGraphEN/icons/cil-x-circle.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Create Bookmarks From Backdrops
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-smile.png../Km_NodeGraphEN/icons/cil-smile.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Remove (Set Empty) All Bookmarks
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(61, 70, 86);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-trash.png../Km_NodeGraphEN/icons/cil-trash.png
+
+
+
+ 25
+ 25
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dev-Files/panel_v02 - Bookmarks List2222.ui b/Dev-Files/panel_v02 - Bookmarks List2222.ui
new file mode 100644
index 0000000..3b18146
--- /dev/null
+++ b/Dev-Files/panel_v02 - Bookmarks List2222.ui
@@ -0,0 +1,283 @@
+
+
+ Form
+
+
+ Qt::NonModal
+
+
+
+ 0
+ 0
+ 857
+ 755
+
+
+
+ Km Backup And Recovery
+
+
+
+ C:/Users/Km/RimiyaFx Plugin Pack/Km_Backup_And_Recovery/icons/backup_on.pngC:/Users/Km/RimiyaFx Plugin Pack/Km_Backup_And_Recovery/icons/backup_on.png
+
+
+ -
+
+
+ Backups
+
+
+
-
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Source :
+
+
+
+ -
+
+
+
+ 160
+ 16777215
+
+
+
-
+
+ Local Backups
+
+
+ -
+
+ Secondary Backups
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Refresh List
+
+
+
+
+
+
+ ../../RimiyaFx Plugin Pack/Km_Backup_And_Recovery/icons/refresh.png../../RimiyaFx Plugin Pack/Km_Backup_And_Recovery/icons/refresh.png
+
+
+
+ 30
+ 30
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ true
+
+
+ Qt::DashLine
+
+
+ true
+
+
+ true
+
+
+ 20
+
+
+ 100
+
+
+ true
+
+
+ 30
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ Backup Time
+
+
+
+
+ File url
+
+
+ Copy url to clipboard
+
+
+
+
+ Replace
+
+
+
+
+ Open
+
+
+
+
+ Delete
+
+
+
+
+ FileName
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Dessert_shot_001_7-27-2020_11AM
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Do It
+
+
+ -
+
+ Dessert_shot_001_7-27-2020_12PM
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Km Backup & Recovery v1.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+ By Hossein Karamian
+
+
+
+ -
+
+
+ www.kmworks.ir
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dev-Files/panel_v02 - MenuButtons.ui b/Dev-Files/panel_v02 - MenuButtons.ui
new file mode 100644
index 0000000..801483c
--- /dev/null
+++ b/Dev-Files/panel_v02 - MenuButtons.ui
@@ -0,0 +1,465 @@
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 806
+ 600
+
+
+
+ MainWindow
+
+
+
+ 25
+ 25
+
+
+
+
+
+
+ 30
+ 480
+ 741
+ 42
+
+
+
+
+ 6
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 25
+
+
+
+
+ -
+
+
+ QLayout::SetMaximumSize
+
+
-
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Templates
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 10px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-star.png../Km_NodeGraphEN/icons/cil-star.png
+
+
+
+ -
+
+
+
+ 26
+ 26
+
+
+
+
+ 20
+ 20
+
+
+
+
+ 0
+ 0
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Settings
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 12px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-settings.png../Km_NodeGraphEN/icons/cil-settings.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Edit Bookmarks
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 10px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-menu.png../Km_NodeGraphEN/icons/cil-menu.png
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 25
+
+
+
+
+
+
+
+
+
+ 230
+ 30
+ 421
+ 388
+
+
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 300
+
+
+
+
+
+ 20
+ 10
+ 391
+ 142
+
+
+
+
-
+
+
+ PushButton
+
+
+
+ -
+
+
+ PushButton
+
+
+
+
+
+
+
+ -
+
+
+ 6
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 25
+
+
+
+
+ -
+
+
+ QLayout::SetMaximumSize
+
+
-
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Templates
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 10px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-star.png../Km_NodeGraphEN/icons/cil-star.png
+
+
+
+ -
+
+
+
+ 26
+ 26
+
+
+
+
+ 20
+ 20
+
+
+
+
+ 0
+ 0
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Settings
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 12px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-settings.png../Km_NodeGraphEN/icons/cil-settings.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Edit Bookmarks
+
+
+ QPushButton {
+ border: 2px solid rgb(128, 146, 177);
+ border-radius: 10px;
+ background-color: rgb(128, 146, 177);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(97, 110, 134);
+ border: 2px solid rgb(97, 110, 134);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-menu.png../Km_NodeGraphEN/icons/cil-menu.png
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dev-Files/panel_v02 - Settings.ui b/Dev-Files/panel_v02 - Settings.ui
new file mode 100644
index 0000000..da89148
--- /dev/null
+++ b/Dev-Files/panel_v02 - Settings.ui
@@ -0,0 +1,1352 @@
+
+
+ SettingsWindowUI
+
+
+
+ 0
+ 0
+ 633
+ 560
+
+
+
+
+ Segoe UI
+
+
+
+ Km NodeGraph Easy Navigate - Settings
+
+
+ color: rgb(223, 223, 223);
+
+
+
+
+
+
+
+
+ 10
+ 10
+ 611
+ 541
+
+
+
+ QFrame {
+ background-color: rgb(61, 64, 71);
+ border-radius : 10px;
+}
+
+/* LINE EDIT */
+QLineEdit {
+ background-color: rgb(40, 43, 50);
+ border-radius: 5px;
+ border: 2px solid rgb(40, 43, 50);
+ padding-left: 10px;
+}
+QLineEdit:hover {
+ border: 2px solid rgb(64, 71, 88);
+}
+QLineEdit:focus {
+ border: 2px solid rgb(91, 101, 124);
+}
+
+/* SCROLL BARS */
+QScrollBar:horizontal {
+ border: none;
+ background: rgb(52, 59, 72);
+ height: 14px;
+ margin: 0px 21px 0 21px;
+ border-radius: 0px;
+}
+QScrollBar::handle:horizontal {
+ background: rgb(85, 170, 255);
+ min-width: 25px;
+ border-radius: 7px
+}
+QScrollBar::add-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-right-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+QScrollBar::sub-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-left-radius: 7px;
+ border-bottom-left-radius: 7px;
+ 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 {
+ border: none;
+ background: rgb(52, 59, 72);
+ width: 14px;
+ margin: 21px 0 21px 0;
+ border-radius: 0px;
+ }
+ QScrollBar::handle:vertical {
+ background: rgb(85, 170, 255);
+ min-height: 25px;
+ border-radius: 7px
+ }
+ QScrollBar::add-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
+ background: none;
+ }
+
+ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: none;
+ }
+
+/* CHECKBOX */
+QCheckBox::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QCheckBox::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QCheckBox::indicator:checked {
+ background: 3px solid rgb(52, 59, 72);
+ border: 3px solid rgb(52, 59, 72);
+ background-image: url(:/16x16/icons/16x16/cil-check-alt.png);
+}
+
+/* RADIO BUTTON */
+QRadioButton::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QRadioButton::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QRadioButton::indicator:checked {
+ background: 3px solid rgb(94, 106, 130);
+ border: 3px solid rgb(52, 59, 72);
+}
+
+/* COMBOBOX */
+QComboBox{
+ background-color: rgb(27, 29, 35);
+ border-radius: 5px;
+ border: 2px solid rgb(27, 29, 35);
+ padding: 5px;
+ padding-left: 10px;
+}
+QComboBox:hover{
+ border: 2px solid rgb(64, 71, 88);
+}
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 25px;
+ border-left-width: 3px;
+ border-left-color: rgba(39, 44, 54, 150);
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ background-image: url(:/16x16/icons/16x16/cil-arrow-bottom.png);
+ background-position: center;
+ background-repeat: no-reperat;
+ }
+QComboBox QAbstractItemView {
+ color: rgb(85, 170, 255);
+ background-color: rgb(27, 29, 35);
+ padding: 10px;
+ selection-background-color: rgb(39, 44, 54);
+}
+
+/* SLIDERS */
+QSlider::groove:horizontal {
+ border-radius: 9px;
+ height: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:horizontal:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:horizontal {
+ background-color: rgb(255, 212, 95);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:horizontal:hover {
+ background-color: rgb(255, 222, 110);
+}
+QSlider::handle:horizontal:pressed {
+ background-color: rgb(255, 212, 95);
+}
+
+QSlider::groove:vertical {
+ border-radius: 9px;
+ width: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:vertical:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:vertical {
+ background-color: rgb(85, 170, 255);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:vertical:hover {
+ background-color: rgb(105, 180, 255);
+}
+QSlider::handle:vertical:pressed {
+ background-color: rgb(65, 130, 195);
+}
+
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 0
+ 0
+ 611
+ 42
+
+
+
+
+ 16777215
+ 42
+
+
+
+ background-color: rgb(40, 43, 50);
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 5
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
-
+
+
+
+ 3
+ 16777215
+
+
+
+
+
+
+
+ -
+
+
+
+ 20
+ 0
+
+
+
+
+ 20
+ 20
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-settings.png
+
+
+ true
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+
+ -
+
+
+
+ Segoe UI Semibold
+ 11
+ 50
+ false
+
+
+
+ background: transparent;
+
+
+
+ Km NodeGraph Easy Navigate - Settings
+
+
+ 5
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 120
+ 16777215
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Minimize
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(52, 59, 72);
+}
+QPushButton:pressed {
+ background-color: rgb(85, 170, 255);
+}
+
+
+
+
+
+
+ :/16x16/icons/16x16/cil-window-minimize.png:/16x16/icons/16x16/cil-window-minimize.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Close
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(52, 59, 72);
+ border-radius : 10px;
+}
+QPushButton:pressed {
+ background-color: rgb(85, 170, 255);
+}
+
+
+
+
+
+
+ :/16x16/icons/16x16/cil-x.png:/16x16/icons/16x16/cil-x.png
+
+
+
+
+
+
+
+
+
+
+
+ 20
+ 59
+ 571
+ 271
+
+
+
+ QFrame {
+background-color: rgb(51, 54, 63);
+border-radius: 5px;
+}
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 180
+ 220
+ 41
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ 1.2
+
+
+
+
+
+ 50
+ 110
+ 211
+ 25
+
+
+
+
+ Segoe UI
+
+
+
+ Main Window Fade In Effect
+
+
+ true
+
+
+
+
+
+ 50
+ 76
+ 161
+ 25
+
+
+
+
+ Segoe UI
+
+
+
+ Shake Effect
+
+
+ true
+
+
+
+
+
+ 50
+ 40
+ 141
+ 25
+
+
+
+
+ Segoe UI
+
+
+
+ Zoom Effect
+
+
+
+
+
+ 50
+ 220
+ 111
+ 22
+
+
+
+
+
+
+ 5
+
+
+ 20
+
+
+ 1
+
+
+ 10
+
+
+ Qt::Horizontal
+
+
+
+
+
+ 107
+ 147
+ 91
+ 30
+
+
+
+
+ Segoe UI
+
+
+
+
+
+
+ shift+e
+
+
+
+
+
+ 50
+ 151
+ 51
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Shortcut
+
+
+
+
+
+ 50
+ 190
+ 181
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Node Graph Zoom Scale
+
+
+
+
+
+ 280
+ 60
+ 1
+ 180
+
+
+
+ background-color: rgb(78, 85, 106);
+width : 2px
+
+
+ Qt::Vertical
+
+
+
+
+
+ 340
+ 160
+ 101
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Button Height :
+
+
+
+
+
+ 450
+ 70
+ 61
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ 3
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 340
+ 70
+ 71
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Columns :
+
+
+
+
+
+ 450
+ 100
+ 61
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ 3
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 340
+ 130
+ 101
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Button Width :
+
+
+
+
+
+ 450
+ 130
+ 61
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ 110
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 378
+ 40
+ 121
+ 20
+
+
+
+
+ Segoe UI Semibold
+ 9
+
+
+
+ Bookmarks Grid
+
+
+
+
+
+ 450
+ 160
+ 61
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ 50
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 340
+ 100
+ 71
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Rows :
+
+
+
+
+
+ 440
+ 220
+ 101
+ 35
+
+
+
+
+ Segoe UI Semibold
+ 13
+ 50
+ false
+
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
+ border-radius: 5px;
+ background-color: rgb(126, 177, 85);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(140, 188, 100);
+ border: 2px solidrgb(140, 188, 100);
+}
+QPushButton:pressed {
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
+}
+
+
+ Save
+
+
+
+ ../Km_NodeGraphEN/icons/cil-save.png../Km_NodeGraphEN/icons/cil-save.png
+
+
+
+
+
+ 310
+ 220
+ 101
+ 35
+
+
+
+
+ Segoe UI Semibold
+ 13
+ 50
+ false
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+ Reset
+
+
+
+ ../Km_NodeGraphEN/icons/cil-menu.png../Km_NodeGraphEN/icons/cil-menu.png
+
+
+
+
+
+ 0
+ 5
+ 571
+ 31
+
+
+
+
+ Segoe UI Semibold
+ 13
+
+
+
+ Settings
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+ 20
+ 350
+ 571
+ 151
+
+
+
+ QFrame {
+background-color:rgb(51, 54, 63);
+border-radius: 5px;
+}
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 0
+ 2
+ 571
+ 31
+
+
+
+
+ Segoe UI Semibold
+ 13
+
+
+
+ Tips
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 30
+ 80
+ 227
+ 19
+
+
+
+
+ Segoe UI
+
+
+
+ <strong>Middle Button :</strong> Edit
+
+
+
+
+
+ 30
+ 30
+ 227
+ 19
+
+
+
+
+ Segoe UI
+
+
+
+ <strong>Left Button : </strong>Jump to Bookmark
+
+
+
+
+
+ 97
+ 50
+ 131
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Assign New Bookmark
+
+
+
+
+
+ 30
+ 110
+ 171
+ 19
+
+
+
+
+ Segoe UI
+
+
+
+ <strong>Right Button : </strong> Remove
+
+
+
+
+
+ 360
+ 32
+ 181
+ 61
+
+
+
+
+ Segoe UI
+
+
+
+ <strong>Assign Bookmark :</strong> Select a node or backdrop, Then click on an empty bookmark button to assign
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+ true
+
+
+
+
+
+ 233
+ 110
+ 130
+ 31
+
+
+
+
+ Segoe UI Semibold
+ 10
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+ Open PDF Help
+
+
+
+ ../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png
+
+
+
+
+
+ 270
+ 40
+ 31
+ 41
+
+
+
+ QFrame::NoFrame
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-mouse.png
+
+
+ false
+
+
+
+
+
+ 394
+ 110
+ 130
+ 31
+
+
+
+
+ Segoe UI Semibold
+ 10
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
+
+ Buy Me a Coffee
+
+
+
+ ../Km_NodeGraphEN/icons/cil-heart.png../Km_NodeGraphEN/icons/cil-heart.png
+
+
+
+
+
+ 230
+ 90
+ 141
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Learn all in 3 minutes
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 390
+ 90
+ 141
+ 20
+
+
+
+
+ Segoe UI
+
+
+
+ Do you like this tool?
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+ 20
+ 500
+ 571
+ 36
+
+
+
+ -
+
+
+
+ Segoe UI Semibold
+
+
+
+ Km NodeGraph Easy Navigate v2.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ Segoe UI Semibold
+
+
+
+ By Hossein Karamian
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dev-Files/panel_v02 - Proto.ui b/Dev-Files/panel_v02 - Templates.ui
similarity index 51%
rename from Dev-Files/panel_v02 - Proto.ui
rename to Dev-Files/panel_v02 - Templates.ui
index 51640ae..f234012 100644
--- a/Dev-Files/panel_v02 - Proto.ui
+++ b/Dev-Files/panel_v02 - Templates.ui
@@ -1,253 +1,26 @@
- MainWindow
-
+ TemplatesWindowUI
+
0
0
- 812
- 748
+ 506
+ 621
- MainWindow
+ Km NodeGraph Easy Navigate : BookMarks Templates
-
-
-
- 20
- 10
- 771
- 261
-
-
-
- Settings
-
-
-
-
- 10
- 110
- 741
- 131
-
-
-
- Settings
-
-
-
-
- 340
- 20
- 121
- 20
-
-
-
- Node Graph Zoom Level
-
-
-
-
-
- 430
- 40
- 31
- 20
-
-
-
- 1.2
-
-
-
-
-
- 340
- 40
- 81
- 22
-
-
-
- 1
-
-
- 3
-
-
- 2
-
-
- Qt::Horizontal
-
-
-
-
-
- 30
- 80
- 101
- 22
-
-
- -
-
- Template 1
-
-
- -
-
- Template 2
-
-
- -
-
- Template 3
-
-
- -
-
- Template 4
-
-
-
-
-
-
- 30
- 20
- 141
- 31
-
-
-
- Global Override
-
-
-
-
-
- 360
- 90
- 113
- 20
-
-
-
- shift+e
-
-
-
-
-
- 300
- 90
- 51
- 20
-
-
-
- Shortcut
-
-
-
-
-
- 30
- 50
- 161
- 16
-
-
-
- (Use a template for all projects)
-
-
-
-
-
- 220
- 30
- 16
- 81
-
-
-
- Qt::Vertical
-
-
-
-
-
- 510
- 30
- 16
- 81
-
-
-
- Qt::Vertical
-
-
-
-
-
- 570
- 30
- 91
- 17
-
-
-
- Shake Effect
-
-
- true
-
-
-
-
-
- 570
- 60
- 91
- 17
-
-
-
- Zoom Effect
-
-
-
-
-
- 570
- 90
- 121
- 17
-
-
-
- Menu Fade In Effect
-
-
- true
-
-
-
-
- 20
- 290
- 771
- 251
+ 10
+ 20
+ 481
+ 551
@@ -257,19 +30,19 @@
10
- 30
+ 20
461
- 201
+ 241
List
-
+
130
- 150
+ 200
81
23
@@ -278,11 +51,11 @@
Load
-
+
30
- 150
+ 200
81
23
@@ -291,13 +64,13 @@
Remove
-
+
20
60
201
- 81
+ 121
-
@@ -324,7 +97,7 @@
- 30
+ 20
30
61
21
@@ -334,13 +107,13 @@
Templates:
-
+
240
60
201
- 81
+ 121
-
@@ -377,7 +150,7 @@
- 250
+ 240
30
141
21
@@ -391,20 +164,20 @@
- 490
- 30
- 271
- 201
+ 240
+ 280
+ 231
+ 251
Add New Template
-
+
- 90
- 170
+ 80
+ 210
81
23
@@ -413,13 +186,13 @@
Add
-
+
- 30
+ 10
50
201
- 81
+ 121
-
@@ -453,12 +226,12 @@
-
+
- 120
- 140
- 113
+ 112
+ 180
+ 101
20
@@ -466,9 +239,9 @@
- 30
- 140
- 81
+ 10
+ 180
+ 101
21
@@ -479,62 +252,143 @@
- 20
+ 10
20
- 261
+ 181
21
- Define Current Project Bookmarks As a Template
+ Current Project Bookmarks:
-
-
-
-
- 20
- 560
- 771
- 131
-
-
-
- Tips
-
-
-
-
- 60
- 30
- 261
- 81
-
-
-
- - for editing a template :
-1 - load a template
-2- edits bookmarks you wants
-3- save it as a new template but with the same name to replace it with older one
-
--
-
-
-
+
- 490
- 50
- 111
- 23
+ 10
+ 280
+ 211
+ 251
-
- Open PDF Help
+
+ Global Override
+
+
+
+ 30
+ 100
+ 181
+ 16
+
+
+
+ (Use a template for all projects)
+
+
+
+
+
+ 30
+ 70
+ 181
+ 31
+
+
+
+ Template Global Override
+
+
+
+
+
+ 60
+ 160
+ 101
+ 22
+
+
+ -
+
+ Template 1
+
+
+ -
+
+ Template 2
+
+
+ -
+
+ Template 3
+
+
+ -
+
+ Template 4
+
+
+
+
+
+
+ 60
+ 140
+ 141
+ 16
+
+
+
+ Select Template :
+
+
+
+
+
+ 10
+ 570
+ 481
+ 36
+
+
+
+ -
+
+
+ Km NodeGraph Easy Navigate v2.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+ By Hossein Karamian
+
+
+
+
+
+
+
diff --git a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
index 013267e..a6afed8 100644
--- a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
+++ b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
@@ -1,7 +1,7 @@
"""Main controller"""
#
-# Km NodeGraph Easy Navigate v1.2
+# Km NodeGraph Easy Navigate v2.0
#
# Developed By Hossein Karamian
#
@@ -15,7 +15,60 @@
#
+"""
+Dev Notes :
+Logic and design :
+ - we save bookmarks data as nuke settings knobs. create a knob for each bookmark
+ - a bookmark data is a json(python dict) that we store it as a single string in knob value.
+ - knob name is based on this fermula : "KM_NGJ_NN_"+bookmarkNodeName | Example : "KM_NGJ_NN_Write2" , "KM_NGJ_NN_Backdrop3"
+ - for getting a bookmark data , we get the value of the knob and pars the string and convert it to dict using json function (json.loads(bookmarkDataString))
+
+GUI :
+using pyside2 library & nuke python panels
+panels(windows) :
+ - Pyside2 | Main (including bookmarks & main menu buttons(templates,settings,edit bookmarks))
+ - Pyside2 | Settings
+ - Pyside2 | Templates
+ - Pyside2 | Edit Bookmarks
+ - Nuke Python Panel : Add New Bookmark
+
+Data managment :
+ - all of things about getting and saving data happens in model.py
+ - we store plugin setting data in settings.json file
+ - as said above , save bookmark data as nuke settings knobs
+ - store each template as a seperate file in "templates" directory
+ - Bookmark data structur : {"nodeName": "", "title": "", "index": "", "shortcut": ""}
+ - Settings data structur : {
+ "zoomEffect": "Disable",
+ "shakeEffect": "Enable",
+ "mainWindowFadeInEffect": "Enable",
+ "shortcut": "shift+e",
+ "nodeGraphZoomScale": "1.2",
+ "templateGlobalOverride": "Disable",
+ "templateNameForGlobalOverride": "Template1",
+ "bookmarksGridColumns": "3",
+ "bookmarksGridRows": "3",
+ }
+ - Template file structur : {
+ name : "templateName",
+ filename : "fileName"
+ bookmarks : {
+ 1: {"nodeName": "", "title": "", "index": "", "shortcut": ""},
+ 2: {"nodeName": "", "title": "", "index": "", "shortcut": ""},
+ 3: {"nodeName": "", "title": "", "index": "", "shortcut": ""},
+ 4: {"nodeName": "", "title": "", "index": "", "shortcut": ""},
+ 5: {"nodeName": "", "title": "", "index": "", "shortcut": ""},
+ .
+ .
+ .
+ }
+ }
+
+"""
+
+
# Import Nuke Libraries
+from re import template
import nuke
import nukescripts
@@ -24,6 +77,7 @@
import os
import threading
import time
+import subprocess
import datetime
import json
@@ -31,44 +85,169 @@
from PysideImport import *
# Import local libs
-from Ui_Settings import Ui_Form
import model
+from Ui_Settings import Ui_SettingsWindowUI
+from constants import BOOKMARK_KNOB_PREFIX
+
+class MainWindow(QWidget):
+ """Main Navigation Window, Includes Bookmark buttons"""
+
+ def __init__(self):
+ super(MainWindow, self).__init__()
+
+ self.settings = model.Settings().Load()
+
+ bookmarksGridColumns = int(self.settings["bookmarksGridColumns"])# defualt : 3*3
+ bookmarksGridRows = int(self.settings["bookmarksGridRows"]) # defualt : 3*3
+ boomarkButtonWidth= int(self.settings["bookmarksButtonWidth"]) # defualt : 110, 50
+ bookmarkButtonHeight = int(self.settings["bookmarksButtonHeight"]) # defualt : 110, 50
+ numberOfBoomarks = bookmarksGridColumns * bookmarksGridRows
+
+ bookmarkButtonsMargin = 70 # extera Space For Bookmark Buttons Margin
+ menuBarHeight = 30 # menu bar icons under bookmarks (settings , template, edit )
+ width = bookmarksGridColumns * boomarkButtonWidth + bookmarkButtonsMargin # standard value : 400 for 3*3
+ height = bookmarksGridRows * bookmarkButtonHeight + bookmarkButtonsMargin # standard value : 250 for 3*3
+
+ self.setFixedSize(width, height + menuBarHeight)
+ #QDesktopWidget().screenGeometry(-1).width()
+ #screenHeight = QDesktopWidget().screenGeometry(-1).height()
+ #QCursor.pos().x()
+ offset = QPoint(width * 0.5, height * 1 + 30)
+ self.move(QCursor.pos() - offset)
+ self.setContentsMargins(0,0,0,0)
+
+ # create main layout
+ mainVerticalLayout = QVBoxLayout(self)
+ mainVerticalLayout.setContentsMargins(0, 0, 0, 0)
+
+ # Boomarks Buttons Layout
+ bookmarksLayoutWidget = QWidget()
+ bookmarksLayoutWidget.setContentsMargins(0,0,0,0)
+ bookmarksLayoutWidget.setMinimumSize(QSize(width, height))
+ bookmarksLayoutWidget.setMaximumSize(QSize(width, height))
+ bookmarksLayout = QGridLayout(bookmarksLayoutWidget)
+ bookmarksLayout.setContentsMargins(0,0,0,0)
+ columnCounter, rowCounter = 0, 0
+
+ allBookmarksData = model.Bookmarks.Load()
+ # Template Global Override
+ if self.settings["templateGlobalOverride"] == "Enable" :
+ templateFileName = self.settings["globalOverrideTemplateFileName"]
+ if model.BookmarkTemplates.GetATemplateData(templateFileName) :
+ allBookmarksData = model.BookmarkTemplates.GetATemplateData(templateFileName)["bookmarks"].values()
+
+ for index in range(0, numberOfBoomarks):
+ isEmpty = True
+ for bookmarkData in allBookmarksData :
+ if int(bookmarkData["index"]) == index:
+ isEmpty = False
+ bookmarkButtonInstance = BookmarkButton(bookmarkData,self,boomarkButtonWidth,bookmarkButtonHeight)
+ bookmarksLayout.addWidget(bookmarkButtonInstance, rowCounter, columnCounter)
+ # Create Empty Bookmark Button
+ if isEmpty:
+ bookmarkData = {"nodeName": "empty","title": "", "index": index, "shortcut" : ""}
+ bookmarkButtonInstance = BookmarkButton(bookmarkData,self,boomarkButtonWidth,bookmarkButtonHeight)
+ bookmarksLayout.addWidget(bookmarkButtonInstance, rowCounter, columnCounter)
+ #print "row : " + str(row_counter)
+ #print "column : "+str(column_counter)
+ if columnCounter > (bookmarksGridColumns - 2) :
+ rowCounter += 1
+ columnCounter = 0
+ else:
+ columnCounter += 1
+
+ # Menu Buttons layout
+ menuButtonsLayoutWidget = MainMenuWidget()
+ menuButtonsLayoutWidget.setMinimumHeight(40)
+ menuButtonsLayoutWidget.setMaximumHeight(40)
+
+ # add bookmarks layout and main menu layout to main layout
+ mainVerticalLayout.setSpacing(0)
+ mainVerticalLayout.addWidget(bookmarksLayoutWidget)
+ mainVerticalLayout.addWidget(menuButtonsLayoutWidget)
+
+ # set main layout
+ self.setLayout(mainVerticalLayout)
+
+ # Opacity(Fade In) Effect
+ finalOpacity = 0.9
+ self.SetWindowProperties()
+ self.effect = QGraphicsOpacityEffect()
+ self.effect.setOpacity(0)
+ self.setGraphicsEffect(self.effect)
+ self.fade = QPropertyAnimation(self.effect, 'opacity'.encode()) # encode is utf-8 by default
+ self.fade.setDuration(300)
+ self.fade.setStartValue(0)
+ self.fade.setEndValue(finalOpacity)
+ self.fade.start()
+
+ def SetWindowProperties(self):
+ """Set window falgs and focused widget."""
+ self.setAttribute(Qt.WA_TranslucentBackground)
+ self.setWindowFlags(Qt.WindowStaysOnTopHint)
+ self.setWindowFlags(Qt.Tool)
+ self.setWindowFlags(Qt.FramelessWindowHint)
+ # make sure the widgets closes when it loses focus
+ self.installEventFilter(self)
+ #self.input.setFocus()
+
+ def keyPressEvent(self, event): # pylint: disable=invalid-name
+ """Route key press event to certain behaviors.
+
+ Args:
+ event (QEvent): PySide key press event.
+
+ """
+ if event.key() == Qt.Key_Escape:
+ self.close()
+ elif event.key() == Qt.Key_Alt:
+ self.close()
+
+ self.close()
+
+ def eventFilter(self, object, event):
+ if event.type() in [QEvent.WindowDeactivate, QEvent.FocusOut]:
+ self.close()
+ return True
+ return False
+
+
class BookmarkButton(QLabel):
"""Bookmark Button in main navigation window \n
- id : type of bookmark ==> values : empty, nodeName, icon \n
+ nodeName : NodeName or set "empty" if it's not an assigned \n
index : order & position in bookmarks ==> values : integer number(0,1,2,..) """
- def __init__(self, id,parrent,index):
+ def __init__(self, bookmarkData,parrent,width=70,height=70):
super(BookmarkButton, self).__init__()
self.myParrent = parrent
- self.index = index
- self.id = id
+ self.index = bookmarkData["index"]
+ self.nodeName = bookmarkData["nodeName"]
+ self.bookmarkData = bookmarkData
self.mainPosX = 0
self.mainPosY = 0
- self.nodeName = "node name"
self.setAlignment(Qt.AlignCenter)
self.setMouseTracking(True)
- self.setFixedWidth(70)
- self.setFixedHeight(70)
- self.setStyleSheet("""background:gray;
- color:white ; border:2px red ; font-size:14px;""")
- self.setText("Final Render")
+ #width , height = 70 , 70
+ self.setFixedWidth(width)
+ self.setFixedHeight(height)
+ self.setStyleSheet("""background:gray; border-radius: 10px;
+ color:white ; border:2px red ; font-size:12px;""")
+ self.setText(bookmarkData["title"])
self.setWordWrap(True)
- def SetNodeName(self,nodeName):
- self.nodeName = nodeName
def enterEvent(self, event):
- self.setStyleSheet("""background:orange;
- color:white ;font-size:18px;""")
+ self.setStyleSheet("""background:orange; border-radius: 10px;
+ color:white ;font-size:12px;""")
def leaveEvent(self, event):
- self.setStyleSheet("""background:gray;
- color:white;font-size:14px;""")
+ self.setStyleSheet("""background:gray; border-radius: 10px;
+ color:white;font-size:12px;""")
- def JumpToTargetAndShakeNode(self,TargetNode):
+ def JumpToTargetAndShakeNode(self,targetNodeName):
#Jump :
+ TargetNode = nuke.toNode(targetNodeName)
xC = TargetNode.xpos() + TargetNode.screenWidth()/2
yC = TargetNode.ypos() + TargetNode.screenHeight()/2
nuke.zoom( 1, [ xC, yC ])
@@ -81,91 +260,188 @@ def JumpToTargetAndShakeNode(self,TargetNode):
#print move_value
#print(datetime.datetime.now())
- def JumpToTargetWithZoomEffect(self,TargetNode):
+ def JumpToTargetWithZoomEffect(self,targetNodeName):
+ TargetNode = nuke.toNode(targetNodeName)
zoom = 0.1
for i in range( 0, 200 ):
time.sleep( 0.0001 )
#print(datetime.datetime.now())
- node = TargetNode
- xC = node.xpos() + node.screenWidth()/2
- yC = node.ypos() + node.screenHeight()/2
+ xC = TargetNode.xpos() + TargetNode.screenWidth()/2
+ yC = TargetNode.ypos() + TargetNode.screenHeight()/2
zoom = zoom + 0.05
if zoom > 1:
break
nuke.zoom( zoom, [ xC, yC ])
- def JumpToTargetWithoutEffect(self,TargetNode):
- node = TargetNode
- xC = node.xpos() + node.screenWidth()/2
- yC = node.ypos() + node.screenHeight()/2
+ def JumpToTargetWithoutEffect(self,targetNodeName):
+ TargetNode = nuke.toNode(targetNodeName)
+ xC = TargetNode.xpos() + TargetNode.screenWidth()/2
+ yC = TargetNode.ypos() + TargetNode.screenHeight()/2
nuke.zoom( 1, [ xC, yC ])
def mousePressEvent(self, event):
navigationEffect = "JumpAndShake"
navigationEffect = "ZoomIn"
if event.buttons() == Qt.LeftButton:
- if self.id == "icon" :
- global settingsWindowInstance
- settingsWindowInstance = SettingsWindow()
- settingsWindowInstance.show()
- if self.id == "empty" :
+ # define new bookmark if this button is empty
+ if self.nodeName == "empty" :
if nuke.selectedNodes() == [] :
- nuke.message("First select a node to define new Shortcut")
+ nuke.message("First select a node to define new bookmark")
else:
- selected_node = nuke.selectedNode()
- if not nuke.root().knob("KM_NGJ_NN_"+selected_node['name'].getValue()):
+ ### find selected node
+ selectedNode = nuke.selectedNode()
+ for boomarkNodeName in nuke.selectedNodes() :
+ selectedNode = boomarkNodeName
+
+ bookmarkKnobName = BOOKMARK_KNOB_PREFIX + selectedNode['name'].getValue()
+ if not nuke.root().knob(bookmarkKnobName):
newBookMarkWindowInstance = NewBookMarkWindow("empty","add",self.index)
newBookMarkWindowInstance.setMinimumSize(300, 50)
if newBookMarkWindowInstance.showModalDialog() :
- if not nuke.root().knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue()):
- #print (p.Title.getValue())
- #print (p.NodeName.getValue())
- #print (p.Index.getValue())
- nuke.root().addKnob(nuke.EvalString_Knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue(), "Title"))
- nuke.root().knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue()).setValue(newBookMarkWindowInstance.Title.getValue())
- nuke.root().knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue()).setVisible(False)
- nuke.root().addKnob(nuke.Int_Knob("KM_NGJ_Index_"+newBookMarkWindowInstance.NodeName.getValue(), "Title"))
- nuke.root().knob("KM_NGJ_Index_"+newBookMarkWindowInstance.NodeName.getValue()).setValue(int(newBookMarkWindowInstance.Index.getValue()))
- nuke.root().knob("KM_NGJ_Index_"+newBookMarkWindowInstance.NodeName.getValue()).setVisible(False)
+ bookmarkNodeName = newBookMarkWindowInstance.NodeName.getValue()
+ bookmarkTitle = newBookMarkWindowInstance.Title.getValue()
+ bookmarkIndex = int(newBookMarkWindowInstance.Index.getValue())
+ bookmarkShortcut = newBookMarkWindowInstance.Shortcut.getValue()
+ model.Bookmarks.AddNewBookmark(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut)
else :
nuke.message("Selected node exists in the list, you can delete or edite that")
- if self.id != "empty" and self.id != "icon":
- node = nuke.toNode(self.id.replace('KM_NGJ_NN_', ''))
-
- nuke.root().knob("KM_NGJ_NN_"+node['name'].getValue())
+ # jump to bookmark
+ else :
if self.myParrent.settings["zoomEffect"] == "Enable":
- threading.Thread( target=self.JumpToTargetWithZoomEffect, args=(node,)).start()
+ threading.Thread( target=self.JumpToTargetWithZoomEffect, args=(self.nodeName,)).start()
else:
- self.JumpToTargetWithoutEffect(node)
+ self.JumpToTargetWithoutEffect(self.nodeName)
if self.myParrent.settings["shakeEffect"] == "Enable":
- threading.Thread( target=self.JumpToTargetAndShakeNode, args=(node,)).start()
+ threading.Thread( target=self.JumpToTargetAndShakeNode, args=(self.nodeName,)).start()
if event.buttons() == Qt.RightButton:
- if self.id != "empty" and self.id != "icon":
- nodeName = self.id.replace('KM_NGJ_NN_', '')
- knobName1 = "KM_NGJ_NN_"+nodeName
- knobName2 = "KM_NGJ_Index_"+nodeName
- if nuke.ask("Remove "+nuke.root().knob("KM_NGJ_NN_"+self.id).getValue()+" Bookmark ?"):
- nuke.root().removeKnob(nuke.root().knobs()[knobName1])
- nuke.root().removeKnob(nuke.root().knobs()[knobName2])
- else :
- pass
+ if self.nodeName != "empty":
+ if nuke.ask("Remove "+self.bookmarkData["title"]+" Bookmark ?"):
+ model.Bookmarks.removeABookmark(self.nodeName)
if event.buttons() == Qt.MiddleButton:
- if self.id != "empty" and self.id != "icon":
- nodeName = self.id.replace('KM_NGJ_NN_', '')
- newBookMarkWindowInstance = NewBookMarkWindow(nodeName,"edit",0)
+ if self.nodeName != "empty" :
+ newBookMarkWindowInstance = NewBookMarkWindow(self.nodeName,"edit",0)
newBookMarkWindowInstance.setMinimumSize(300, 50)
if newBookMarkWindowInstance.showModalDialog() :
- nuke.root().knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue()).setValue(newBookMarkWindowInstance.Title.getValue())
- nuke.root().knob("KM_NGJ_NN_"+newBookMarkWindowInstance.NodeName.getValue()).setVisible(False)
- nuke.root().knob("KM_NGJ_Index_"+newBookMarkWindowInstance.NodeName.getValue()).setValue(int(newBookMarkWindowInstance.Index.getValue()))
- nuke.root().knob("KM_NGJ_Index_"+newBookMarkWindowInstance.NodeName.getValue()).setVisible(False)
+ index = int(newBookMarkWindowInstance.Index.getValue())
+ title = newBookMarkWindowInstance.Title.getValue()
+ shortcut = newBookMarkWindowInstance.Shortcut.getValue()
+ bookmarkData = {"nodeName": self.nodeName,"title": title, "index": index, "shortcut" : shortcut}
+ model.Bookmarks.UpdateBookmarkData(bookmarkData)
self.myParrent.close()
+
+
+
+
+class MainMenuWidget(QWidget):
+ """Main """
+
+ def __init__(self):
+ super(MainMenuWidget, self).__init__()
+
+ self.menuButtonsLayout = QHBoxLayout(self)
+ self.menuButtonsLayout.setSpacing(6)
+ self.menuButtonsLayout.setObjectName(u"horizontalLayout_2")
+ self.menuButtonsLayout.setContentsMargins(0, 0, 0, 0)
+ self.horizontalSpacer_4 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+ self.menuButtonsLayout.addItem(self.horizontalSpacer_4)
+ self.horizontalLayout_3 = QHBoxLayout()
+ self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
+ self.horizontalLayout_3.setSizeConstraint(QLayout.SetMaximumSize)
+ self.pushButton_Templates = QPushButton(self)
+ self.pushButton_Templates.setObjectName(u"pushButton_close_5")
+ self.pushButton_Templates.setMinimumSize(QSize(23, 23))
+ self.pushButton_Templates.setMaximumSize(QSize(23, 23))
+ font = QFont()
+ font.setFamily(u"Segoe UI")
+ font.setPointSize(9)
+ self.pushButton_Templates.setFont(font)
+ self.pushButton_Templates.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(128, 146, 177);\n"
+" border-radius: 10px; \n"
+" background-color: rgb(128, 146, 177);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(97, 110, 134);\n"
+" border: 2px solid rgb(97, 110, 134);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(os.path.dirname(__file__)+"/icons/cil-star.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_Templates.setIcon(icon)
+ self.pushButton_Templates.setIconSize(QSize(16, 16))
+ self.pushButton_settings = QPushButton(self)
+ self.pushButton_settings.setObjectName(u"pushButton_close_4")
+ self.pushButton_settings.setMinimumSize(QSize(23, 23))
+ self.pushButton_settings.setMaximumSize(QSize(23, 23))
+ self.pushButton_settings.setBaseSize(QSize(0, 0))
+ self.pushButton_settings.setFont(font)
+ self.pushButton_settings.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(128, 146, 177);\n"
+" border-radius: 10px; \n"
+" background-color: rgb(128, 146, 177);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(97, 110, 134);\n"
+" border: 2px solid rgb(97, 110, 134);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(os.path.dirname(__file__)+"/icons/cil-settings.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_settings.setIcon(icon1)
+ self.pushButton_settings.setIconSize(QSize(16, 16))
+ self.pushButton_EditBookmarks = QPushButton(self)
+ self.pushButton_EditBookmarks.setObjectName(u"pushButton_close_3")
+ self.pushButton_EditBookmarks.setMinimumSize(QSize(28, 28))
+ self.pushButton_EditBookmarks.setMaximumSize(QSize(28, 28))
+ self.pushButton_EditBookmarks.setFont(font)
+ self.pushButton_EditBookmarks.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(128, 146, 177);\n"
+" border-radius: 12px; \n"
+" background-color: rgb(128, 146, 177);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(97, 110, 134);\n"
+" border: 2px solid rgb(97, 110, 134);\n"
+"}")
+ icon2 = QIcon()
+ icon2.addFile(os.path.dirname(__file__)+"/icons/cil-menu.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_EditBookmarks.setIcon(icon2)
+ self.pushButton_EditBookmarks.setIconSize(QSize(20, 20))
+ self.horizontalLayout_3.addWidget(self.pushButton_Templates)
+ self.horizontalLayout_3.addWidget(self.pushButton_EditBookmarks)
+ self.horizontalLayout_3.addWidget(self.pushButton_settings)
+ self.menuButtonsLayout.addLayout(self.horizontalLayout_3)
+ self.horizontalSpacer_5 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+ self.menuButtonsLayout.addItem(self.horizontalSpacer_5)
+ self.menuButtonsLayout.setStretch(0, 30)
+ self.menuButtonsLayout.setStretch(2, 30)
+
+ # main menu buttons click event | Setting Signals
+ self.pushButton_settings.clicked.connect(self.OpenSettingsWindow)
+ self.pushButton_Templates.clicked.connect(self.OpenTemplatesWindow)
+ self.pushButton_EditBookmarks.clicked.connect(self.OpenEditBookmarksWindow)
+
+
+ def OpenSettingsWindow(self) :
+ global settingsWindowInstance
+ settingsWindowInstance = SettingsWindow()
+ settingsWindowInstance.show()
+ def OpenTemplatesWindow(self) :
+ self.templatesWindowInstance = TemplatesWindow()
+ self.templatesWindowInstance.show()
+
+ def OpenEditBookmarksWindow(self) :
+ self.editBookmarksInstance = EditBookmarks()
+ self.editBookmarksInstance.show()
+
+
class NewBookMarkWindow(nukescripts.PythonPanel):
"""window for add new bookmark"""
@@ -176,154 +452,78 @@ def __init__(self,nodeName,type,index):
selectedNode = nuke.selectedNode()
for node in nuke.selectedNodes() :
selectedNode = node
- ##print selected_node['name'].getValue()
- self.Title = nuke.EvalString_Knob("node_name2", "BookMark Name")
- title = ""
- if nuke.toNode(selectedNode['name'].getValue())["label"].getValue() != "":
- title = nuke.toNode(selectedNode['name'].getValue())["label"].getValue()
+
+ # define input knobs
+ self.NodeName = nuke.EvalString_Knob("NodeName", "Node Name")
+ self.Title = nuke.EvalString_Knob("BookMarkTitle", "BookMark Title")
+ self.Index = nuke.Int_Knob("Index", "Index")
+ self.Shortcut = nuke.EvalString_Knob("BookMarkShortcut", "BookMark Shortcut")
+
+ # get node lable value for title
+ selectedNodeLable = nuke.toNode(selectedNode['name'].getValue())["label"].getValue()
+ if selectedNodeLable != "":
+ title = selectedNodeLable
else:
title = selectedNode['name'].getValue()
+
self.Title.setValue(title)
- self.NodeName = nuke.EvalString_Knob("node_name2", "Node Name")
self.NodeName.setValue(selectedNode['name'].getValue())
self.NodeName.setEnabled(False)
- self.Index = nuke.Int_Knob("node_name", "Index")
self.Index.setEnabled(False)
self.Index.setValue(index)
self.addKnob(self.Title)
self.addKnob(self.NodeName)
self.addKnob(self.Index)
+ self.addKnob(self.Shortcut)
self.setMinimumSize(500,500)
if type == "edit":
- self.Title = nuke.EvalString_Knob("node_name2", "BookMark Name")
- self.Title.setValue(nuke.root().knob("KM_NGJ_NN_"+nodeName).getValue())
- self.NodeName = nuke.EvalString_Knob("node_name2", "Node Name")
+ # define input knobs
+ self.NodeName = nuke.EvalString_Knob("NodeName", "Node Name")
+ self.Title = nuke.EvalString_Knob("BookMarkTitle", "BookMark Title")
+ self.Index = nuke.Int_Knob("Index", "Index")
+ self.Shortcut = nuke.EvalString_Knob("BookMarkShortcut", "BookMark Shortcut")
+
+ bookmarkData = model.Bookmarks.getBookmarkData(nodeName)
+ self.Title.setValue(bookmarkData["title"])
self.NodeName.setValue(nodeName)
self.NodeName.setEnabled(False)
- self.Index = nuke.Int_Knob("node_name", "Index")
self.Index.setEnabled(False)
- self.Index.setValue(int(nuke.root().knob("KM_NGJ_Index_"+nodeName).getValue()))
+ self.Index.setValue(int(bookmarkData["index"]))
+ self.Shortcut.setValue(bookmarkData["shortcut"])
+
self.addKnob(self.Title)
self.addKnob(self.NodeName)
self.addKnob(self.Index)
+ self.addKnob(self.Shortcut)
self.setMinimumSize(500,500)
-class MainWindow(QWidget):
- """Main Navigation Window, Includes Bookmark buttons"""
-
- def __init__(self):
- super(MainWindow, self).__init__()
-
- self.settings = model.Settings().Load()
-
- width, height = 500, 400
- self.setFixedSize(width, height)
- offset = QPoint(width * 0.5, height * 0.5)
- self.move(QCursor.pos() - offset)
-
- grid = QGridLayout()
- grid.setContentsMargins(50,50,50,50)
- self.setLayout(grid)
-
- columnCounter, rowCounter = 0, 0
-
- settingKnobs = nuke.root().knobs()
- for n in range(0, 9):
- if columnCounter == 1 and rowCounter == 1:
- columnCounter += 1
- continue
-
- isEmpty = True
- for x in settingKnobs :
- if "KM_NGJ_NN_" in x:
- #print "hast"
- nodeName = x.replace('KM_NGJ_NN_', '')
- #print nodeName
- if int(nuke.root().knob("KM_NGJ_Index_"+nodeName).getValue()) == n:
- isEmpty = False
- bookmarkButtonInstance = BookmarkButton(nodeName,self,n)
- bookmarkButtonInstance.SetNodeName(x)
- bookmarkButtonInstance.setText(nuke.root().knob(x).getValue())
- grid.addWidget(bookmarkButtonInstance, rowCounter, columnCounter)
-
- if isEmpty:
- bookmarkButtonInstance = BookmarkButton("empty",self,n)
- bookmarkButtonInstance.SetNodeName("empty")
- bookmarkButtonInstance.setText("")
- grid.addWidget(bookmarkButtonInstance, rowCounter, columnCounter)
- #print "row : " + str(row_counter)
- #print "column : "+str(column_counter)
- if columnCounter > 1:
- rowCounter += 1
- columnCounter = 0
-
- else:
- columnCounter += 1
-
- centerLogoButton = BookmarkButton("icon",self,4)
- centerLogoButton.setText("")
- centerLogoButton.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/icon.jpg"))
- centerLogoButton.setObjectName("label_icon")
- grid.addWidget(centerLogoButton, 1, 1)
-
- self.SetWindowProperties()
-
- self.effect = QGraphicsOpacityEffect()
- self.effect.setOpacity(0)
- self.setGraphicsEffect(self.effect)
- self.fade = QPropertyAnimation(self.effect, 'opacity'.encode()) # encode is utf-8 by default
- self.fade.setDuration(300)
- self.fade.setStartValue(0)
- self.fade.setEndValue(1)
- self.fade.start()
-
- def SetWindowProperties(self):
- """Set window falgs and focused widget."""
- self.setAttribute(Qt.WA_TranslucentBackground)
- self.setWindowFlags(Qt.WindowStaysOnTopHint)
- self.setWindowFlags(Qt.Tool)
- self.setWindowFlags(Qt.FramelessWindowHint)
- # make sure the widgets closes when it loses focus
- self.installEventFilter(self)
- #self.input.setFocus()
-
- def keyPressEvent(self, event): # pylint: disable=invalid-name
- """Route key press event to certain behaviors.
-
- Args:
- event (QEvent): PySide key press event.
-
- """
- if event.key() == Qt.Key_Escape:
- self.close()
- elif event.key() == Qt.Key_Alt:
- #nuke.activeViewer().node()['channels'].setValue('rgba')
- self.close()
-
- self.close()
-
- def eventFilter(self, object, event):
- if event.type() in [QEvent.WindowDeactivate, QEvent.FocusOut]:
- self.close()
- return True
- return False
-class SettingsWindow(QWidget,Ui_Form):
+class SettingsWindow(QMainWindow,Ui_SettingsWindowUI):
def __init__(self):
super(SettingsWindow, self).__init__()
self.setupUi(self)
self.settings = model.Settings().Load()
- self.updateUI()
-
- self.label_9.setText('''www.kmworks.ir''')
- self.label_9.setOpenExternalLinks(True)
+ # Setup UI
+ self.horizontalSlider_ZoomScale.setMinimum(5)
+ self.horizontalSlider_ZoomScale.setMaximum(30)
+ self.horizontalSlider_ZoomScale.setSingleStep(1)
+ self.horizontalSlider_ZoomScale.valueChanged.connect(self.SliderLabelUpdate)
+ self.label_credit.setText('''By Hossein Karamian''')
+ self.label_credit.setOpenExternalLinks(True)
self.setWindowFlags(Qt.WindowStaysOnTopHint)
- self.pushButton_documentation.clicked.connect(self.applySettings)
+ # Signals
+ self.pushButton_save.clicked.connect(self.applySettings)
+ self.pushButton_setDefault.clicked.connect(self.SetDefault)
+ self.pushButton_OpenPDF.clicked.connect(self.open_documentation)
+
+
+ self.updateUI()
def updateUI(self):
+
if self.settings["shakeEffect"] == "Enable" :
self.checkBox_shake_effect.setChecked(True)
else :
@@ -334,26 +534,379 @@ def updateUI(self):
else :
self.checkBox_zoom_effect.setChecked(False)
+ if self.settings["mainWindowFadeInEffect"] == "Enable" :
+ self.checkBox_fade_effect.setChecked(True)
+ else :
+ self.checkBox_fade_effect.setChecked(False)
+
+ self.horizontalSlider_ZoomScale.setValue(float(self.settings["nodeGraphZoomScale"]) * 10.0)
+ self.SliderLabelUpdate()
self.lineEdit_shortcut.setText(self.settings["shortcut"])
+ self.lineEdit_columnn.setText(self.settings["bookmarksGridColumns"])
+ self.lineEdit_Rows.setText(self.settings["bookmarksGridRows"])
+ self.lineEdit_Button_width.setText(self.settings["bookmarksButtonWidth"])
+ self.lineEdit_ButtonHeight.setText(self.settings["bookmarksButtonHeight"])
+
+ def SliderLabelUpdate(self):
+ zoomScale = self.horizontalSlider_ZoomScale.value() / 10.0
+ self.label_ZoomScale.setText(str(zoomScale))
- def applySettings(self):
+ def applySettings(self):
if self.checkBox_shake_effect.isChecked():
self.settings["shakeEffect"] = "Enable"
else:
self.settings["shakeEffect"] = "Disable"
-
if self.checkBox_zoom_effect.isChecked():
self.settings["zoomEffect"] = "Enable"
else:
self.settings["zoomEffect"] = "Disable"
+ if self.checkBox_fade_effect.isChecked():
+ self.settings["mainWindowFadeInEffect"] = "Enable"
+ else:
+ self.settings["mainWindowFadeInEffect"] = "Disable"
+ self.settings["shortcut"] = self.lineEdit_shortcut.text()
+ self.settings["nodeGraphZoomScale"] = self.label_ZoomScale.text()
+ self.settings["bookmarksGridColumns"] = self.lineEdit_columnn.text()
+ self.settings["bookmarksGridRows"] = self.lineEdit_Rows.text()
+ self.settings["bookmarksButtonWidth"] = self.lineEdit_Button_width.text()
+ self.settings["bookmarksButtonHeight"] = self.lineEdit_ButtonHeight.text()
- self.settings["shortcut"] = self.lineEdit_shortcut.text()
model.Settings().Save(self.settings)
menu = nuke.menu("Nuke")
Km_NGJ = menu.addMenu("KmTools")
Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.start()",self.settings["shortcut"])
self.close()
+ def SetDefault(self) :
+ self.settings["shakeEffect"] = "Disable"
+ self.settings["zoomEffect"] = "Disable"
+ self.settings["mainWindowFadeInEffect"] = "Enable"
+ self.settings["shortcut"] = "shift+e"
+ self.settings["nodeGraphZoomScale"] = "1"
+ self.settings["bookmarksGridColumns"] = "3"
+ self.settings["bookmarksGridRows"] = "3"
+ self.settings["bookmarksButtonWidth"] = "110"
+ self.settings["bookmarksButtonHeight"] = "50"
+
+ model.Settings().Save(self.settings)
+ menu = nuke.menu("Nuke")
+ Km_NGJ = menu.addMenu("KmTools")
+ Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.start()",self.settings["shortcut"])
+ self.updateUI()
+
+ def open_documentation(self):
+ subprocess.Popen(os.path.dirname(__file__)+"/UserGuide.pdf",shell=True)
+
+
+
+from Ui_Templates import Ui_TemplatesWindowUI
+
+class TemplatesWindow(QMainWindow,Ui_TemplatesWindowUI):
+ def __init__(self,parent=None):
+ super(TemplatesWindow, self).__init__(parent)
+ self.setupUi(self)
+ self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
+ self.setWindowFlags(Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint) # disable resize
+ self.label_credit.setText('''By Hossein Karamian''')
+ self.label_credit.setOpenExternalLinks(True)
+ #self.setWindowFlags(Qt.WindowStaysOnTopHint)
+
+ # UpdateUI
+ self.UpdateUI()
+
+ # Signals
+ self.pushButton_remove.clicked.connect(self.removeTemplate)
+ self.pushButton_load.clicked.connect(self.LoadTemplate)
+ self.pushButton_add.clicked.connect(self.AddTemplate)
+ self.comboBox_TemplateOverride.currentIndexChanged.connect(self.ComboBoxTemplateOverrideChange)
+ self.checkBox_TemplateOverride.stateChanged['int'].connect(self.CheckBoxTemplateOverrideChange)
+
+ self.listWidget_templateList.currentItemChanged.connect(self.selectedTemplateItemsListUpdateUI)
+
+ def UpdateUI(self) :
+ self.settings = model.Settings().Load()
+ currentProjectBookmarks = model.Bookmarks.Load()
+ self.templatesList = model.BookmarkTemplates.Load()
+
+ # clear widgets
+ self.listWidget_templateItems.clear()
+ self.listWidget_newTemplateItems.clear() # clear list widget
+ self.listWidget_templateList.clear() # clear list widget
+ self.comboBox_TemplateOverride.clear()
+
+ # new Template Items listWidget
+ itemCounter = 0
+ for bookmarkItem in currentProjectBookmarks :
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ self.listWidget_newTemplateItems.item(itemCounter).setText(bookmarkItem["title"])
+ itemCounter += 1
+
+ # templates list
+ self.overrideTemplateIndex = -1 # if override template file not exits
+ itemCounter = 0
+ for templateItem in self.templatesList :
+ QListWidgetItem(self.listWidget_templateList)
+ self.listWidget_templateList.item(itemCounter).setText(templateItem["templateName"])
+ self.comboBox_TemplateOverride.addItem(templateItem["templateName"])
+ if templateItem["fileName"] == self.settings["globalOverrideTemplateFileName"] :
+ self.overrideTemplateIndex = itemCounter
+ itemCounter += 1
+
+ if self.overrideTemplateIndex != -1 :
+ self.comboBox_TemplateOverride.setCurrentIndex(self.overrideTemplateIndex)
+
+ if self.settings["templateGlobalOverride"] == "Enable" :
+ self.checkBox_TemplateOverride.setChecked(True)
+ self.comboBox_TemplateOverride.setEnabled(True)
+ else :
+ self.checkBox_TemplateOverride.setChecked(False)
+ self.comboBox_TemplateOverride.setEnabled(False)
+
+
+
+
+ def CheckBoxTemplateOverrideChange(self):
+ if self.checkBox_TemplateOverride.isChecked():
+ self.comboBox_TemplateOverride.setEnabled(True)
+ self.settings["templateGlobalOverride"] = "Enable"
+ else :
+ self.comboBox_TemplateOverride.setEnabled(False)
+ self.settings["templateGlobalOverride"] = "Disable"
+ if self.comboBox_TemplateOverride.count != 0 :
+ currentIndex = self.comboBox_TemplateOverride.currentIndex()
+ self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
+ model.Settings.Save(self.settings)
+
+ def ComboBoxTemplateOverrideChange(self):
+ currentIndex = self.comboBox_TemplateOverride.currentIndex()
+ self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
+ model.Settings.Save(self.settings)
+
+ def selectedTemplateItemsListUpdateUI(self):
+ self.listWidget_templateItems.clear()
+ self.templatesList = model.BookmarkTemplates.Load()
+ selectedTemplateIndex = self.listWidget_templateList.currentRow()
+ selectedTemplate = self.templatesList[selectedTemplateIndex]
+ itemCounter = 0
+ for bookmarkItem in selectedTemplate["bookmarks"].values() :
+ QListWidgetItem(self.listWidget_templateItems)
+ self.listWidget_templateItems.item(itemCounter).setText(bookmarkItem["title"])
+ itemCounter += 1
+
+ def removeTemplate(self):
+ self.templatesList = model.BookmarkTemplates.Load()
+ if self.templatesList == [] : return True
+ selectedTemplateIndex = self.listWidget_templateList.currentRow()
+ selectedTemplate = self.templatesList[selectedTemplateIndex]
+ model.BookmarkTemplates.DeleteTemplateFile(selectedTemplate["fileName"])
+ self.UpdateUI()
+
+ def LoadTemplate(self) :
+ self.templatesList = model.BookmarkTemplates.Load()
+ if self.templatesList == [] : return True
+ selectedTemplateIndex = self.listWidget_templateList.currentRow()
+ selectedTemplate = self.templatesList[selectedTemplateIndex]
+ #self.setWindowState(Qt.WindowState.WindowNoState)
+ if nuke.ask("Load \""+selectedTemplate["templateName"]+"\" Bookmark Template ? \n(current bookmarks will removed and replace with this template)"):
+ model.Bookmarks.ResetBookmarks() # remove current bookmarks in this project
+ for bookmarkItem in selectedTemplate["bookmarks"].values() :
+ model.Bookmarks.AddNewBookmark(bookmarkItem["nodeName"],bookmarkItem["title"],bookmarkItem["index"],bookmarkItem["shortcut"])
+ #self.show() #setWindowState(Qt::WindowState::WindowActive); // Bring window to foreground
+ #self.setWindowState(Qt.WindowState.WindowActive) # bring back window to front
+ self.raise_()
+ self.UpdateUI()
+ self.listWidget_templateList.setCurrentRow(selectedTemplateIndex)
+
+ def AddTemplate(self) :
+ templateName = self.lineEdit_templateName.text()
+ if (templateName != "" and templateName != " "):
+ model.BookmarkTemplates.AddNew(templateName)
+ self.UpdateUI()
+ self.label_4.setStyleSheet("color: rgb(255, 255, 255)")
+ templateName = self.lineEdit_templateName.setText("")
+ else :
+ self.label_4.setStyleSheet("color: rgb(255, 20, 20)")
+
+
+
+
+
+from Ui_EditBookmarks import Ui_EditBookmarksWindowUI
+
+class EditBookmarks(QMainWindow,Ui_EditBookmarksWindowUI):
+ def __init__(self,parent=None):
+ super(EditBookmarks, self).__init__(parent)
+ self.setupUi(self)
+ self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
+ self.setWindowFlags(Qt.WindowStaysOnTopHint)
+ #self.setWindowFlags(Qt.WindowStaysOnTopHint)
+
+ # UpdateUI
+ self.UpdateUI()
+
+ self.pushButton_reset.clicked.connect(self.resetBookmarks)
+ self.pushButton_removeItem.clicked.connect(self.removeABookmark)
+ self.pushButton_shiftUp.clicked.connect(self.ShiftUpBookmark)
+ self.pushButton_shiftDown.clicked.connect(self.ShiftDownBookmark)
+ self.pushButton_createFromBackdrops.clicked.connect(self.createBookmarksFromBackdrops)
+ self.pushButton_AddBookmark.clicked.connect(self.AddNewBookmark)
+
+ #self.listWidget_templateList.currentItemChanged.connect(self.selectedTemplateItemsListUpdateUI)
+
+
+ def AddNewBookmark(self):
+ if nuke.selectedNodes() == [] :
+ # self.msg=QMessageBox()
+ # self.msg.setIcon(QMessageBox.Information)
+ # self.msg.setText("This is Message")
+ # self.msg.setInformativeText("Are You Sure?")
+ # self.msg.show()
+ # self.msg.raise_()
+ # self.msg.setWindowFlags(Qt.WindowStaysOnTopHint)
+ return True
+
+ selectedRow = self.tableWidget_BookmarksList.currentRow()
+ nodeNameColumn = self.tableWidget_BookmarksList.item(selectedRow,1).text()
+ if nodeNameColumn != " - " : # check if not empty remove older bookmarks
+ model.Bookmarks.removeABookmark(nodeNameColumn)
+ ### find selected node
+ selectedNode = nuke.selectedNode()
+ for node in nuke.selectedNodes() :
+ selectedNode = node
+ bookmarkKnobName = BOOKMARK_KNOB_PREFIX + selectedNode['name'].getValue()
+ if not nuke.root().knob(bookmarkKnobName):
+ bookmarkNodeName = selectedNode['name'].getValue()
+ bookmarkTitle = selectedNode['label'].getValue()
+ if (bookmarkTitle == "" or bookmarkTitle == " ") :
+ bookmarkTitle = bookmarkNodeName
+ bookmarkIndex = selectedRow
+ bookmarkShortcut = ""
+ model.Bookmarks.AddNewBookmark(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut)
+ self.UpdateUI()
+ else :
+ nuke.message("Selected node exists in the list, you can delete or edite that")
+ self.raise_()
+
+ def createBookmarksFromBackdrops(self):
+ if nuke.ask("Create Bookmarks from backdrops ? \nAll the bookmarks in this project will removed"):
+ model.Bookmarks.ResetBookmarks()
+ allBackdrops = nuke.allNodes("BackdropNode")
+ counter = 0
+ for backdropNode in allBackdrops :
+ bookmarkNodeName = backdropNode['name'].getValue()
+ bookmarkTitle = backdropNode['label'].getValue()
+ if (bookmarkTitle == "" or bookmarkTitle == " ") :
+ bookmarkTitle = bookmarkNodeName
+ bookmarkIndex = counter
+ bookmarkShortcut = ""
+ model.Bookmarks.AddNewBookmark(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut)
+ counter += 1
+ self.UpdateUI()
+ self.raise_()
+
+ def removeABookmark(self) :
+ selectedRow = self.tableWidget_BookmarksList.currentRow()
+ nodeName = self.tableWidget_BookmarksList.item(selectedRow,1).text()
+ model.Bookmarks.removeABookmark(nodeName)
+ self.UpdateUI()
+
+ def ShiftUpBookmark(self):
+ selectedIndex = self.tableWidget_BookmarksList.currentRow()
+ if selectedIndex < 1 : return True # check if it's first row
+ if self.tableWidget_BookmarksList.item(selectedIndex,1).text() == " - " : return True # check if selected row is a empty bookmark
+
+ row = selectedIndex
+ SelectedRowItems = [self.tableWidget_BookmarksList.item(row,0).text(),self.tableWidget_BookmarksList.item(row,1).text(),self.tableWidget_BookmarksList.item(row,2).text(),self.tableWidget_BookmarksList.item(row,3).text()]
+ row = selectedIndex - 1 # up row
+ UpRowItems = [self.tableWidget_BookmarksList.item(row,0).text(),self.tableWidget_BookmarksList.item(row,1).text(),self.tableWidget_BookmarksList.item(row,2).text(),self.tableWidget_BookmarksList.item(row,3).text()]
+ if UpRowItems[1] != " - " : # check if empty bookmark . UpRowItems[1] => nodeName
+ model.Bookmarks.removeABookmark(UpRowItems[1]) # remove
+ model.Bookmarks.AddNewBookmark(UpRowItems[1],UpRowItems[2],selectedIndex,UpRowItems[3]) # copy up row to selected row
+
+ model.Bookmarks.removeABookmark(SelectedRowItems[1]) # remove
+ model.Bookmarks.AddNewBookmark(SelectedRowItems[1],SelectedRowItems[2],selectedIndex-1,SelectedRowItems[3]) # copy selected row to up row
+ currentColumn = self.tableWidget_BookmarksList.currentColumn()
+ self.tableWidget_BookmarksList.setCurrentCell(selectedIndex-1,currentColumn) # shift up selected cell
+ self.UpdateUI()
+
+ def ShiftDownBookmark(self):
+ selectedIndex = self.tableWidget_BookmarksList.currentRow()
+ if selectedIndex >= model.Bookmarks.getTotalBookmarksCount()-1 : return True # check if it's last row
+ if self.tableWidget_BookmarksList.item(selectedIndex,1).text() == " - " : return True # check if selected row is a empty bookmark
+
+ row = selectedIndex
+ SelectedRowItems = [self.tableWidget_BookmarksList.item(row,0).text(),self.tableWidget_BookmarksList.item(row,1).text(),self.tableWidget_BookmarksList.item(row,2).text(),self.tableWidget_BookmarksList.item(row,3).text()]
+ row = selectedIndex + 1 # down row
+ DownRowItems = [self.tableWidget_BookmarksList.item(row,0).text(),self.tableWidget_BookmarksList.item(row,1).text(),self.tableWidget_BookmarksList.item(row,2).text(),self.tableWidget_BookmarksList.item(row,3).text()]
+ if DownRowItems[1] != " - " : # check if empty bookmark
+ model.Bookmarks.removeABookmark(DownRowItems[1]) # remove
+ model.Bookmarks.AddNewBookmark(DownRowItems[1],DownRowItems[2],selectedIndex,DownRowItems[3]) # copy down row to selected row
+
+ model.Bookmarks.removeABookmark(SelectedRowItems[1]) # remove
+ model.Bookmarks.AddNewBookmark(SelectedRowItems[1],SelectedRowItems[2],selectedIndex + 1,SelectedRowItems[3]) # copy selected row to down row
+ currentColumn = self.tableWidget_BookmarksList.currentColumn()
+ self.tableWidget_BookmarksList.setCurrentCell(selectedIndex + 1,currentColumn) # shift down selected cell
+ self.UpdateUI()
+
+
+ def resetBookmarks(self):
+ if nuke.ask("Remove all bookmarks in the current project ? "):
+ model.Bookmarks.ResetBookmarks()
+ self.UpdateUI()
+ self.raise_()
+
+ def UpdateUI(self) :
+ #self.tableWidget_BookmarksList.clear()
+
+ # new Template Items listWidget
+ currentProjectBookmarks = model.Bookmarks.Load()
+ settings = model.Settings.Load()
+ numberOfBookmarks = int(settings["bookmarksGridColumns"]) * int(settings["bookmarksGridRows"])
+
+ self.tableWidget_BookmarksList.setRowCount(numberOfBookmarks)
+ self.tableWidget_BookmarksList.setColumnWidth(0,70)
+ self.tableWidget_BookmarksList.setColumnWidth(1,180)
+ self.tableWidget_BookmarksList.setColumnWidth(2,180)
+ self.tableWidget_BookmarksList.setColumnWidth(3,80)
+ self.tableWidget_BookmarksList.horizontalHeaderItem(0).setText("Index \n(Order)")
+ for index in range(numberOfBookmarks):
+ nodeName = " - "
+ title = " - "
+ shortcut = " - "
+ isEmpty = True
+ # find if any bookmark exits for this index
+ for bookmarkData in currentProjectBookmarks :
+ if int(bookmarkData["index"]) == index:
+ isEmpty = False
+ nodeName = bookmarkData["nodeName"]
+ title = bookmarkData["title"]
+ shortcut = bookmarkData["shortcut"]
+
+ item = self.CreateWidgetItemAndSetFlags(str(index),True)
+ self.tableWidget_BookmarksList.setItem(index,0,item) # index column
+ item = self.CreateWidgetItemAndSetFlags(nodeName,True)
+ self.tableWidget_BookmarksList.setItem(index,1,item) # nodeName column
+ item = self.CreateWidgetItemAndSetFlags(title,isEmpty)
+ self.tableWidget_BookmarksList.setItem(index,2,item) # title column
+ item = self.CreateWidgetItemAndSetFlags(shortcut,isEmpty)
+ self.tableWidget_BookmarksList.setItem(index,3,item) # shortcut column
+
+ def CreateWidgetItemAndSetFlags(self,text,IsDisable=False) :
+ widgetItem = QTableWidgetItem()
+ if IsDisable : widgetItem.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled)
+ widgetItem.setText(text)
+ widgetItem.setTextAlignment(Qt.AlignCenter)
+ return widgetItem
+
+
+
+ ################################################################################
+## ui_ .py changes needed for new version from qt designer :
+## add import os
+## Replace :
+## u"../Km_NodeGraphEN/icons
+## os.path.dirname(__file__)+"/icons
+
def showSettings():
global settingsWindowInstance
diff --git a/Km_NodeGraphEN/Ui_EditBookmarks.py b/Km_NodeGraphEN/Ui_EditBookmarks.py
new file mode 100644
index 0000000..5758061
--- /dev/null
+++ b/Km_NodeGraphEN/Ui_EditBookmarks.py
@@ -0,0 +1,334 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'panel_v02 - Bookmarks ListYOUAbY.ui'
+##
+## Created by: Qt User Interface Compiler version 5.15.0
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
+ QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
+from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
+ QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
+ QPixmap, QRadialGradient)
+from PySide2.QtWidgets import *
+
+import os
+
+class Ui_EditBookmarksWindowUI(object):
+ def setupUi(self, EditBookmarksWindowUI):
+ if not EditBookmarksWindowUI.objectName():
+ EditBookmarksWindowUI.setObjectName(u"EditBookmarksWindowUI")
+ EditBookmarksWindowUI.resize(599, 492)
+ self.centralwidget = QWidget(EditBookmarksWindowUI)
+ self.centralwidget.setObjectName(u"centralwidget")
+ self.groupBox = QGroupBox(self.centralwidget)
+ self.groupBox.setObjectName(u"groupBox")
+ self.groupBox.setGeometry(QRect(20, 10, 561, 371))
+ self.tableWidget_BookmarksList = QTableWidget(self.groupBox)
+ if (self.tableWidget_BookmarksList.columnCount() < 4):
+ self.tableWidget_BookmarksList.setColumnCount(4)
+ __qtablewidgetitem = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setHorizontalHeaderItem(0, __qtablewidgetitem)
+ __qtablewidgetitem1 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setHorizontalHeaderItem(1, __qtablewidgetitem1)
+ __qtablewidgetitem2 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setHorizontalHeaderItem(2, __qtablewidgetitem2)
+ __qtablewidgetitem3 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setHorizontalHeaderItem(3, __qtablewidgetitem3)
+ if (self.tableWidget_BookmarksList.rowCount() < 2):
+ self.tableWidget_BookmarksList.setRowCount(2)
+ __qtablewidgetitem4 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setVerticalHeaderItem(0, __qtablewidgetitem4)
+ __qtablewidgetitem5 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setVerticalHeaderItem(1, __qtablewidgetitem5)
+ __qtablewidgetitem6 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(0, 0, __qtablewidgetitem6)
+ __qtablewidgetitem7 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(0, 1, __qtablewidgetitem7)
+ __qtablewidgetitem8 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(0, 2, __qtablewidgetitem8)
+ __qtablewidgetitem9 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(0, 3, __qtablewidgetitem9)
+ __qtablewidgetitem10 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(1, 0, __qtablewidgetitem10)
+ __qtablewidgetitem11 = QTableWidgetItem()
+ self.tableWidget_BookmarksList.setItem(1, 2, __qtablewidgetitem11)
+ self.tableWidget_BookmarksList.setObjectName(u"tableWidget_BookmarksList")
+ self.tableWidget_BookmarksList.setGeometry(QRect(20, 20, 521, 341))
+ self.tableWidget_BookmarksList.setShowGrid(True)
+ self.tableWidget_BookmarksList.setGridStyle(Qt.DashLine)
+ self.tableWidget_BookmarksList.setSortingEnabled(True)
+ self.tableWidget_BookmarksList.setWordWrap(True)
+ self.tableWidget_BookmarksList.horizontalHeader().setMinimumSectionSize(20)
+ self.tableWidget_BookmarksList.horizontalHeader().setDefaultSectionSize(100)
+ self.tableWidget_BookmarksList.horizontalHeader().setHighlightSections(True)
+ self.tableWidget_BookmarksList.horizontalHeader().setProperty("showSortIndicator", True)
+ self.tableWidget_BookmarksList.horizontalHeader().setStretchLastSection(True)
+ self.tableWidget_BookmarksList.verticalHeader().setVisible(False)
+ self.tableWidget_BookmarksList.verticalHeader().setDefaultSectionSize(30)
+ self.layoutWidget = QWidget(self.centralwidget)
+ self.layoutWidget.setObjectName(u"layoutWidget")
+ self.layoutWidget.setGeometry(QRect(20, 450, 561, 36))
+ self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+ self.label_plugins_version = QLabel(self.layoutWidget)
+ self.label_plugins_version.setObjectName(u"label_plugins_version")
+ font = QFont()
+ font.setFamily(u"Segoe UI")
+ self.label_plugins_version.setFont(font)
+
+ self.horizontalLayout_2.addWidget(self.label_plugins_version)
+
+ self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+ self.horizontalLayout_2.addItem(self.horizontalSpacer_4)
+
+ self.verticalLayout = QVBoxLayout()
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.label_8 = QLabel(self.layoutWidget)
+ self.label_8.setObjectName(u"label_8")
+ self.label_8.setFont(font)
+
+ self.verticalLayout.addWidget(self.label_8)
+
+
+ self.horizontalLayout_2.addLayout(self.verticalLayout)
+
+ self.horizontalLayout_2.setStretch(0, 3)
+ self.horizontalLayout_2.setStretch(1, 28)
+ self.horizontalLayout_2.setStretch(2, 3)
+ self.horizontalLayoutWidget = QWidget(self.centralwidget)
+ self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
+ self.horizontalLayoutWidget.setGeometry(QRect(20, 390, 561, 41))
+ self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
+ self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+ self.pushButton_shiftUp = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_shiftUp.setObjectName(u"pushButton_shiftUp")
+ self.pushButton_shiftUp.setMinimumSize(QSize(35, 35))
+ self.pushButton_shiftUp.setMaximumSize(QSize(35, 35))
+ font1 = QFont()
+ font1.setFamily(u"Segoe UI")
+ font1.setPointSize(9)
+ self.pushButton_shiftUp.setFont(font1)
+ self.pushButton_shiftUp.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-top.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_shiftUp.setIcon(icon)
+ self.pushButton_shiftUp.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_shiftUp)
+
+ self.pushButton_shiftDown = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_shiftDown.setObjectName(u"pushButton_shiftDown")
+ self.pushButton_shiftDown.setMinimumSize(QSize(35, 35))
+ self.pushButton_shiftDown.setMaximumSize(QSize(35, 35))
+ self.pushButton_shiftDown.setFont(font1)
+ self.pushButton_shiftDown.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-bottom.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_shiftDown.setIcon(icon1)
+ self.pushButton_shiftDown.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_shiftDown)
+
+ self.pushButton_AddBookmark = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_AddBookmark.setObjectName(u"pushButton_AddBookmark")
+ self.pushButton_AddBookmark.setMinimumSize(QSize(35, 35))
+ self.pushButton_AddBookmark.setMaximumSize(QSize(35, 35))
+ self.pushButton_AddBookmark.setFont(font1)
+ self.pushButton_AddBookmark.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon2 = QIcon()
+ icon2.addFile(os.path.dirname(__file__)+"/icons/cil-check-circle.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_AddBookmark.setIcon(icon2)
+ self.pushButton_AddBookmark.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_AddBookmark)
+
+ self.pushButton_removeItem = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_removeItem.setObjectName(u"pushButton_removeItem")
+ self.pushButton_removeItem.setMinimumSize(QSize(35, 35))
+ self.pushButton_removeItem.setMaximumSize(QSize(35, 35))
+ self.pushButton_removeItem.setFont(font1)
+ self.pushButton_removeItem.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon3 = QIcon()
+ icon3.addFile(os.path.dirname(__file__)+"/icons/cil-x-circle.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_removeItem.setIcon(icon3)
+ self.pushButton_removeItem.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_removeItem)
+
+ self.pushButton_createFromBackdrops = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_createFromBackdrops.setObjectName(u"pushButton_createFromBackdrops")
+ self.pushButton_createFromBackdrops.setMinimumSize(QSize(35, 35))
+ self.pushButton_createFromBackdrops.setMaximumSize(QSize(35, 35))
+ self.pushButton_createFromBackdrops.setFont(font1)
+ self.pushButton_createFromBackdrops.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon4 = QIcon()
+ icon4.addFile(os.path.dirname(__file__)+"/icons/cil-smile.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_createFromBackdrops.setIcon(icon4)
+ self.pushButton_createFromBackdrops.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_createFromBackdrops)
+
+ self.pushButton_reset = QPushButton(self.horizontalLayoutWidget)
+ self.pushButton_reset.setObjectName(u"pushButton_reset")
+ self.pushButton_reset.setMinimumSize(QSize(35, 35))
+ self.pushButton_reset.setMaximumSize(QSize(35, 35))
+ self.pushButton_reset.setFont(font1)
+ self.pushButton_reset.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon5 = QIcon()
+ icon5.addFile(os.path.dirname(__file__)+"/icons/cil-trash.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_reset.setIcon(icon5)
+ self.pushButton_reset.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout.addWidget(self.pushButton_reset)
+
+ EditBookmarksWindowUI.setCentralWidget(self.centralwidget)
+
+ self.retranslateUi(EditBookmarksWindowUI)
+
+ QMetaObject.connectSlotsByName(EditBookmarksWindowUI)
+ # setupUi
+
+ def retranslateUi(self, EditBookmarksWindowUI):
+ EditBookmarksWindowUI.setWindowTitle(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate : Edit Bookmarks", None))
+ self.groupBox.setTitle(QCoreApplication.translate("EditBookmarksWindowUI", u"Bookmarks List", None))
+ ___qtablewidgetitem = self.tableWidget_BookmarksList.horizontalHeaderItem(0)
+ ___qtablewidgetitem.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Index (Order)", None));
+ ___qtablewidgetitem1 = self.tableWidget_BookmarksList.horizontalHeaderItem(1)
+ ___qtablewidgetitem1.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Node Name", None));
+ ___qtablewidgetitem2 = self.tableWidget_BookmarksList.horizontalHeaderItem(2)
+ ___qtablewidgetitem2.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Title", None));
+#if QT_CONFIG(tooltip)
+ ___qtablewidgetitem2.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Copy url to clipboard", None));
+#endif // QT_CONFIG(tooltip)
+ ___qtablewidgetitem3 = self.tableWidget_BookmarksList.horizontalHeaderItem(3)
+ ___qtablewidgetitem3.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Shortcut", None));
+ ___qtablewidgetitem4 = self.tableWidget_BookmarksList.verticalHeaderItem(0)
+ ___qtablewidgetitem4.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"1", None));
+ ___qtablewidgetitem5 = self.tableWidget_BookmarksList.verticalHeaderItem(1)
+ ___qtablewidgetitem5.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"2", None));
+
+ __sortingEnabled = self.tableWidget_BookmarksList.isSortingEnabled()
+ self.tableWidget_BookmarksList.setSortingEnabled(False)
+ ___qtablewidgetitem6 = self.tableWidget_BookmarksList.item(0, 0)
+ ___qtablewidgetitem6.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"1", None));
+ ___qtablewidgetitem7 = self.tableWidget_BookmarksList.item(0, 1)
+ ___qtablewidgetitem7.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"test", None));
+ ___qtablewidgetitem8 = self.tableWidget_BookmarksList.item(1, 0)
+ ___qtablewidgetitem8.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"2", None));
+ ___qtablewidgetitem9 = self.tableWidget_BookmarksList.item(1, 2)
+ ___qtablewidgetitem9.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"tt", None));
+ self.tableWidget_BookmarksList.setSortingEnabled(__sortingEnabled)
+
+ self.label_plugins_version.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
+ self.label_8.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"By Hossein Karamian", None))
+#if QT_CONFIG(tooltip)
+ self.pushButton_shiftUp.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Change order (move up)", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_shiftUp.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_shiftDown.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Change order (move down)", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_shiftDown.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_AddBookmark.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Change order (move down)", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_AddBookmark.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_removeItem.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Remove (Set Empty) Selected Bookmark", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_removeItem.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_createFromBackdrops.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Create Bookmarks From Backdrops", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_createFromBackdrops.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_reset.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Remove (Set Empty) All Bookmarks", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_reset.setText("")
+ # retranslateUi
+
diff --git a/Km_NodeGraphEN/Ui_MenuButtonsLayout.py b/Km_NodeGraphEN/Ui_MenuButtonsLayout.py
new file mode 100644
index 0000000..b9b0bcd
--- /dev/null
+++ b/Km_NodeGraphEN/Ui_MenuButtonsLayout.py
@@ -0,0 +1,11 @@
+
+import os
+
+# Import Nuke Libraries
+import nuke
+import nukescripts
+
+# Pyside Library Import (pyside and pyside 2) : pyside for nuke10.5 and older , pyside2 for nuke 11.0 and newer
+from PysideImport import *
+from Km_NodeGraph_Easy_Navigate import SettingsWindow
+
diff --git a/Km_NodeGraphEN/Ui_Settings.py b/Km_NodeGraphEN/Ui_Settings.py
index c1fd203..0599527 100644
--- a/Km_NodeGraphEN/Ui_Settings.py
+++ b/Km_NodeGraphEN/Ui_Settings.py
@@ -1,163 +1,236 @@
+# -*- coding: utf-8 -*-
-import nuke
-import os
+################################################################################
+## Form generated from reading UI file 'panel_v02 - SettingsmtIZoa.ui'
+##
+## Created by: Qt User Interface Compiler version 5.15.0
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
-from PysideImport import *
+from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
+ QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
+from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
+ QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
+ QPixmap, QRadialGradient)
+from PySide2.QtWidgets import *
-class Ui_Form(object):
- def setupUi(self, Form):
- Form.setObjectName("Form")
- Form.setWindowModality(Qt.NonModal)
- Form.resize(397, 421)
- icon = QIcon()
- icon.addPixmap(QPixmap(os.path.dirname(__file__)+"/icons/icon.png"), QIcon.Normal, QIcon.Off)
- Form.setWindowIcon(icon)
- self.verticalLayout_7 = QVBoxLayout(Form)
- self.verticalLayout_7.setObjectName("verticalLayout_7")
- self.verticalLayout_2 = QVBoxLayout()
- self.verticalLayout_2.setObjectName("verticalLayout_2")
- self.groupBox_settings4 = QGroupBox(Form)
- self.groupBox_settings4.setObjectName("groupBox_settings4")
- self.horizontalLayout_9 = QHBoxLayout(self.groupBox_settings4)
- self.horizontalLayout_9.setObjectName("horizontalLayout_9")
- self.verticalLayout_8 = QVBoxLayout()
- self.verticalLayout_8.setObjectName("verticalLayout_8")
- self.horizontalLayout_3 = QHBoxLayout()
- self.horizontalLayout_3.setObjectName("horizontalLayout_3")
- self.verticalLayout_4 = QVBoxLayout()
- self.verticalLayout_4.setContentsMargins(30, -1, 20, -1)
- self.verticalLayout_4.setObjectName("verticalLayout_4")
- self.checkBox_shake_effect = QCheckBox(self.groupBox_settings4)
- font = QFont()
- font.setBold(False)
- font.setWeight(50)
- self.checkBox_shake_effect.setFont(font)
- self.checkBox_shake_effect.setChecked(False)
- self.checkBox_shake_effect.setObjectName("checkBox_shake_effect")
- self.verticalLayout_4.addWidget(self.checkBox_shake_effect)
- self.checkBox_zoom_effect = QCheckBox(self.groupBox_settings4)
+class Ui_SettingsWindowUI(object):
+ def setupUi(self, SettingsWindowUI):
+ if not SettingsWindowUI.objectName():
+ SettingsWindowUI.setObjectName(u"SettingsWindowUI")
+ SettingsWindowUI.resize(573, 439)
+ self.centralwidget = QWidget(SettingsWindowUI)
+ self.centralwidget.setObjectName(u"centralwidget")
+ self.groupBox = QGroupBox(self.centralwidget)
+ self.groupBox.setObjectName(u"groupBox")
+ self.groupBox.setGeometry(QRect(20, 10, 531, 251))
+ self.checkBox_fade_effect = QCheckBox(self.groupBox)
+ self.checkBox_fade_effect.setObjectName(u"checkBox_fade_effect")
+ self.checkBox_fade_effect.setGeometry(QRect(40, 100, 161, 17))
+ self.checkBox_fade_effect.setChecked(True)
+ self.label = QLabel(self.groupBox)
+ self.label.setObjectName(u"label")
+ self.label.setGeometry(QRect(40, 180, 161, 20))
+ self.line = QFrame(self.groupBox)
+ self.line.setObjectName(u"line")
+ self.line.setGeometry(QRect(230, 60, 16, 131))
+ self.line.setFrameShape(QFrame.VLine)
+ self.line.setFrameShadow(QFrame.Sunken)
+ self.horizontalSlider_ZoomScale = QSlider(self.groupBox)
+ self.horizontalSlider_ZoomScale.setObjectName(u"horizontalSlider_ZoomScale")
+ self.horizontalSlider_ZoomScale.setGeometry(QRect(40, 210, 111, 22))
+ self.horizontalSlider_ZoomScale.setMinimum(1)
+ self.horizontalSlider_ZoomScale.setMaximum(3)
+ self.horizontalSlider_ZoomScale.setValue(2)
+ self.horizontalSlider_ZoomScale.setOrientation(Qt.Horizontal)
+ self.checkBox_shake_effect = QCheckBox(self.groupBox)
+ self.checkBox_shake_effect.setObjectName(u"checkBox_shake_effect")
+ self.checkBox_shake_effect.setGeometry(QRect(40, 70, 91, 17))
+ self.checkBox_shake_effect.setChecked(True)
+ self.label_6 = QLabel(self.groupBox)
+ self.label_6.setObjectName(u"label_6")
+ self.label_6.setGeometry(QRect(40, 140, 51, 20))
+ self.lineEdit_shortcut = QLineEdit(self.groupBox)
+ self.lineEdit_shortcut.setObjectName(u"lineEdit_shortcut")
+ self.lineEdit_shortcut.setGeometry(QRect(100, 140, 91, 20))
+ self.checkBox_zoom_effect = QCheckBox(self.groupBox)
+ self.checkBox_zoom_effect.setObjectName(u"checkBox_zoom_effect")
+ self.checkBox_zoom_effect.setGeometry(QRect(40, 40, 91, 17))
+ self.label_ZoomScale = QLabel(self.groupBox)
+ self.label_ZoomScale.setObjectName(u"label_ZoomScale")
+ self.label_ZoomScale.setGeometry(QRect(170, 210, 31, 20))
+ self.label_12 = QLabel(self.groupBox)
+ self.label_12.setObjectName(u"label_12")
+ self.label_12.setGeometry(QRect(340, 30, 121, 20))
+ self.lineEdit_columnn = QLineEdit(self.groupBox)
+ self.lineEdit_columnn.setObjectName(u"lineEdit_columnn")
+ self.lineEdit_columnn.setGeometry(QRect(390, 60, 61, 20))
+ self.lineEdit_columnn.setAlignment(Qt.AlignCenter)
+ self.lineEdit_Rows = QLineEdit(self.groupBox)
+ self.lineEdit_Rows.setObjectName(u"lineEdit_Rows")
+ self.lineEdit_Rows.setGeometry(QRect(390, 90, 61, 20))
+ self.lineEdit_Rows.setAlignment(Qt.AlignCenter)
+ self.label_5 = QLabel(self.groupBox)
+ self.label_5.setObjectName(u"label_5")
+ self.label_5.setGeometry(QRect(300, 60, 71, 20))
+ self.label_13 = QLabel(self.groupBox)
+ self.label_13.setObjectName(u"label_13")
+ self.label_13.setGeometry(QRect(300, 90, 71, 20))
+ self.label_10 = QLabel(self.groupBox)
+ self.label_10.setObjectName(u"label_10")
+ self.label_10.setGeometry(QRect(300, 120, 91, 20))
+ self.lineEdit_Button_width = QLineEdit(self.groupBox)
+ self.lineEdit_Button_width.setObjectName(u"lineEdit_Button_width")
+ self.lineEdit_Button_width.setGeometry(QRect(390, 120, 61, 20))
+ self.lineEdit_Button_width.setAlignment(Qt.AlignCenter)
+ self.label_11 = QLabel(self.groupBox)
+ self.label_11.setObjectName(u"label_11")
+ self.label_11.setGeometry(QRect(300, 150, 91, 20))
+ self.lineEdit_ButtonHeight = QLineEdit(self.groupBox)
+ self.lineEdit_ButtonHeight.setObjectName(u"lineEdit_ButtonHeight")
+ self.lineEdit_ButtonHeight.setGeometry(QRect(390, 150, 61, 20))
+ self.lineEdit_ButtonHeight.setAlignment(Qt.AlignCenter)
+ self.pushButton_save = QPushButton(self.groupBox)
+ self.pushButton_save.setObjectName(u"pushButton_save")
+ self.pushButton_save.setGeometry(QRect(400, 200, 101, 35))
font = QFont()
+ font.setFamily(u"Segoe UI Semibold")
+ font.setPointSize(13)
font.setBold(False)
font.setWeight(50)
- self.checkBox_zoom_effect.setFont(font)
- self.checkBox_zoom_effect.setChecked(True)
- self.checkBox_zoom_effect.setObjectName("checkBox_zoom_effect")
- self.verticalLayout_4.addWidget(self.checkBox_zoom_effect)
- self.horizontalLayout_4 = QHBoxLayout()
- self.horizontalLayout_4.setObjectName("horizontalLayout_4")
- self.label_3 = QLabel(self.groupBox_settings4)
- self.label_3.setObjectName("label_3")
- self.horizontalLayout_4.addWidget(self.label_3)
- self.lineEdit_shortcut = QLineEdit(self.groupBox_settings4)
- self.lineEdit_shortcut.setMaximumSize(QSize(150, 16777215))
- self.lineEdit_shortcut.setObjectName("lineEdit_shortcut")
- self.horizontalLayout_4.addWidget(self.lineEdit_shortcut)
- self.horizontalLayout_4.setStretch(0, 2)
- self.horizontalLayout_4.setStretch(1, 8)
- self.verticalLayout_4.addLayout(self.horizontalLayout_4)
- self.horizontalLayout_3.addLayout(self.verticalLayout_4)
- self.verticalLayout_3 = QVBoxLayout()
- self.verticalLayout_3.setContentsMargins(20, -1, 20, -1)
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.label_icon = QLabel(self.groupBox_settings4)
- self.label_icon.setText("")
- self.label_icon.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/icon.png"))
- self.label_icon.setObjectName("label_icon")
- self.verticalLayout_3.addWidget(self.label_icon)
- self.horizontalLayout_3.addLayout(self.verticalLayout_3)
- self.verticalLayout_8.addLayout(self.horizontalLayout_3)
- self.pushButton_documentation = QPushButton(self.groupBox_settings4)
- self.pushButton_documentation.setObjectName("pushButton_documentation")
- self.verticalLayout_8.addWidget(self.pushButton_documentation)
- self.horizontalLayout_9.addLayout(self.verticalLayout_8)
- self.verticalLayout_2.addWidget(self.groupBox_settings4)
- self.groupBox_status = QGroupBox(Form)
- self.groupBox_status.setObjectName("groupBox_status")
- self.verticalLayout_6 = QVBoxLayout(self.groupBox_status)
- self.verticalLayout_6.setObjectName("verticalLayout_6")
- self.horizontalLayout = QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.verticalLayout_5 = QVBoxLayout()
- self.verticalLayout_5.setContentsMargins(20, -1, 15, -1)
- self.verticalLayout_5.setObjectName("verticalLayout_5")
- self.label = QLabel(self.groupBox_status)
- self.label.setObjectName("label")
- self.verticalLayout_5.addWidget(self.label)
- self.label_4 = QLabel(self.groupBox_status)
- self.label_4.setObjectName("label_4")
- self.verticalLayout_5.addWidget(self.label_4)
- self.label_5 = QLabel(self.groupBox_status)
- self.label_5.setObjectName("label_5")
- self.verticalLayout_5.addWidget(self.label_5)
- self.label_2 = QLabel(self.groupBox_status)
- self.label_2.setObjectName("label_2")
- self.verticalLayout_5.addWidget(self.label_2)
- self.line = QFrame(self.groupBox_status)
- self.line.setFrameShape(QFrame.HLine)
- self.line.setFrameShadow(QFrame.Sunken)
- self.line.setObjectName("line")
- self.verticalLayout_5.addWidget(self.line)
- self.label_6 = QLabel(self.groupBox_status)
- self.label_6.setWordWrap(True)
- self.label_6.setObjectName("label_6")
- self.verticalLayout_5.addWidget(self.label_6)
- self.horizontalLayout.addLayout(self.verticalLayout_5)
- self.label_icon_2 = QLabel(self.groupBox_status)
+ self.pushButton_save.setFont(font)
+ self.pushButton_save.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(0, 170, 127);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(0, 170, 127);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(0, 197, 145);\n"
+" border: 2px solidrgb(0, 197, 145);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(0, 170, 127);\n"
+" border: 2px solid rgb(0, 170, 127);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(u"../Km_NodeGraphEN/icons/cil-save.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_save.setIcon(icon)
+ self.pushButton_setDefault = QPushButton(self.groupBox)
+ self.pushButton_setDefault.setObjectName(u"pushButton_setDefault")
+ self.pushButton_setDefault.setGeometry(QRect(270, 200, 101, 35))
+ self.pushButton_setDefault.setFont(font)
+ self.pushButton_setDefault.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(61, 70, 86);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(u"../Km_NodeGraphEN/icons/cil-menu.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_setDefault.setIcon(icon1)
+ self.groupBox_7 = QGroupBox(self.centralwidget)
+ self.groupBox_7.setObjectName(u"groupBox_7")
+ self.groupBox_7.setGeometry(QRect(20, 270, 531, 131))
+ self.pushButton_OpenPDF = QPushButton(self.groupBox_7)
+ self.pushButton_OpenPDF.setObjectName(u"pushButton_OpenPDF")
+ self.pushButton_OpenPDF.setGeometry(QRect(400, 95, 111, 23))
+ self.label_icon_2 = QLabel(self.groupBox_7)
+ self.label_icon_2.setObjectName(u"label_icon_2")
+ self.label_icon_2.setGeometry(QRect(420, 15, 87, 71))
self.label_icon_2.setFrameShape(QFrame.NoFrame)
- self.label_icon_2.setText("")
- self.label_icon_2.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/mouse.png"))
- self.label_icon_2.setObjectName("label_icon_2")
- self.horizontalLayout.addWidget(self.label_icon_2)
- self.horizontalLayout.setStretch(0, 3)
- self.horizontalLayout.setStretch(1, 1)
- self.verticalLayout_6.addLayout(self.horizontalLayout)
- self.verticalLayout_2.addWidget(self.groupBox_status)
- self.horizontalLayout_2 = QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.label_plugins_version = QLabel(Form)
- self.label_plugins_version.setObjectName("label_plugins_version")
+ self.label_icon_2.setPixmap(QPixmap(u"../Km_NodeGraphEN/icons/mouse.png"))
+ self.label_4 = QLabel(self.groupBox_7)
+ self.label_4.setObjectName(u"label_4")
+ self.label_4.setGeometry(QRect(20, 55, 227, 20))
+ self.label_3 = QLabel(self.groupBox_7)
+ self.label_3.setObjectName(u"label_3")
+ self.label_3.setGeometry(QRect(220, 89, 171, 19))
+ self.label_9 = QLabel(self.groupBox_7)
+ self.label_9.setObjectName(u"label_9")
+ self.label_9.setGeometry(QRect(20, 30, 227, 19))
+ self.label_14 = QLabel(self.groupBox_7)
+ self.label_14.setObjectName(u"label_14")
+ self.label_14.setGeometry(QRect(20, 90, 227, 19))
+ self.label_15 = QLabel(self.groupBox_7)
+ self.label_15.setObjectName(u"label_15")
+ self.label_15.setGeometry(QRect(220, 10, 171, 81))
+ self.label_15.setWordWrap(True)
+ self.layoutWidget = QWidget(self.centralwidget)
+ self.layoutWidget.setObjectName(u"layoutWidget")
+ self.layoutWidget.setGeometry(QRect(20, 400, 531, 36))
+ self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+ self.label_plugins_version = QLabel(self.layoutWidget)
+ self.label_plugins_version.setObjectName(u"label_plugins_version")
+
self.horizontalLayout_2.addWidget(self.label_plugins_version)
- spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
- self.horizontalLayout_2.addItem(spacerItem)
+
+ self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+ self.horizontalLayout_2.addItem(self.horizontalSpacer_4)
+
self.verticalLayout = QVBoxLayout()
- self.verticalLayout.setObjectName("verticalLayout")
- self.label_8 = QLabel(Form)
- self.label_8.setObjectName("label_8")
- self.verticalLayout.addWidget(self.label_8)
- self.label_9 = QLabel(Form)
- self.label_9.setAlignment(Qt.AlignCenter)
- self.label_9.setObjectName("label_9")
- self.verticalLayout.addWidget(self.label_9)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.label_credit = QLabel(self.layoutWidget)
+ self.label_credit.setObjectName(u"label_credit")
+
+ self.verticalLayout.addWidget(self.label_credit)
+
+
self.horizontalLayout_2.addLayout(self.verticalLayout)
+
self.horizontalLayout_2.setStretch(0, 3)
self.horizontalLayout_2.setStretch(1, 28)
self.horizontalLayout_2.setStretch(2, 3)
- self.verticalLayout_2.addLayout(self.horizontalLayout_2)
- self.verticalLayout_2.setStretch(0, 4)
- self.verticalLayout_2.setStretch(1, 4)
- self.verticalLayout_2.setStretch(2, 1)
- self.verticalLayout_7.addLayout(self.verticalLayout_2)
-
- self.retranslateUi(Form)
- QMetaObject.connectSlotsByName(Form)
-
- def retranslateUi(self, Form):
- _translate = QCoreApplication.translate
- Form.setWindowTitle(_translate("Form", "Km NodeGraph Easy Navigate"))
- self.groupBox_settings4.setTitle(_translate("Form", "Settings"))
- self.checkBox_shake_effect.setText(_translate("Form", "Shake Effect"))
- self.checkBox_zoom_effect.setText(_translate("Form", "Zoom Effect"))
- self.label_3.setText(_translate("Form", "Shortcut :"))
- self.lineEdit_shortcut.setText(_translate("Form", "shift+e"))
- self.pushButton_documentation.setText(_translate("Form", "Apply"))
- self.groupBox_status.setTitle(_translate("Form", "Help"))
- self.label.setText(_translate("Form", "Left Button : Jump to Bookmark"))
- self.label_4.setText(_translate("Form", " Assign New Bookmark"))
- self.label_5.setText(_translate("Form", "Middle Button : Edit"))
- self.label_2.setText(_translate("Form", "Right Button : Remove"))
- self.label_6.setText(_translate("Form", "Assign Bookmark : Select a node or backdrop, Then click on an empty bookmark to assign"))
- self.label_plugins_version.setText(_translate("Form", "Km NodeGraph Easy Navigate v1.1"))
- self.label_8.setText(_translate("Form", "By Hossein Karamian"))
- self.label_9.setText(_translate("Form", "www.kmworks.ir"))
+ SettingsWindowUI.setCentralWidget(self.centralwidget)
+
+ self.retranslateUi(SettingsWindowUI)
+
+ QMetaObject.connectSlotsByName(SettingsWindowUI)
+ # setupUi
+
+ def retranslateUi(self, SettingsWindowUI):
+ SettingsWindowUI.setWindowTitle(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate : Settings", None))
+ self.groupBox.setTitle(QCoreApplication.translate("SettingsWindowUI", u"settings", None))
+ self.checkBox_fade_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Main Window Fade In Effect", None))
+ self.label.setText(QCoreApplication.translate("SettingsWindowUI", u"Node Graph Zoom Scale", None))
+ self.checkBox_shake_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Shake Effect", None))
+ self.label_6.setText(QCoreApplication.translate("SettingsWindowUI", u"Shortcut", None))
+ self.lineEdit_shortcut.setText(QCoreApplication.translate("SettingsWindowUI", u"shift+e", None))
+ self.checkBox_zoom_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Zoom Effect", None))
+ self.label_ZoomScale.setText(QCoreApplication.translate("SettingsWindowUI", u"1.2", None))
+ self.label_12.setText(QCoreApplication.translate("SettingsWindowUI", u"Bookmarks Grid ", None))
+ self.lineEdit_columnn.setText(QCoreApplication.translate("SettingsWindowUI", u"3", None))
+ self.lineEdit_Rows.setText(QCoreApplication.translate("SettingsWindowUI", u"3", None))
+ self.label_5.setText(QCoreApplication.translate("SettingsWindowUI", u"Columns : ", None))
+ self.label_13.setText(QCoreApplication.translate("SettingsWindowUI", u"Rows :", None))
+ self.label_10.setText(QCoreApplication.translate("SettingsWindowUI", u"Button Width : ", None))
+ self.lineEdit_Button_width.setText(QCoreApplication.translate("SettingsWindowUI", u"110", None))
+ self.label_11.setText(QCoreApplication.translate("SettingsWindowUI", u"Button Height :", None))
+ self.lineEdit_ButtonHeight.setText(QCoreApplication.translate("SettingsWindowUI", u"50", None))
+ self.pushButton_save.setText(QCoreApplication.translate("SettingsWindowUI", u" Save", None))
+ self.pushButton_setDefault.setText(QCoreApplication.translate("SettingsWindowUI", u"Reset", None))
+ self.groupBox_7.setTitle(QCoreApplication.translate("SettingsWindowUI", u"Tips", None))
+ self.pushButton_OpenPDF.setText(QCoreApplication.translate("SettingsWindowUI", u"Open PDF Help", None))
+ self.label_icon_2.setText("")
+ self.label_4.setText(QCoreApplication.translate("SettingsWindowUI", u" Assign New Bookmark", None))
+ self.label_3.setText(QCoreApplication.translate("SettingsWindowUI", u"Right Button : Remove", None))
+ self.label_9.setText(QCoreApplication.translate("SettingsWindowUI", u"Left Button : Jump to Bookmark", None))
+ self.label_14.setText(QCoreApplication.translate("SettingsWindowUI", u"Middle Button : Edit", None))
+ self.label_15.setText(QCoreApplication.translate("SettingsWindowUI", u"Assign Bookmark : Select a node or backdrop, Then click on an empty bookmark to assign", None))
+ self.label_plugins_version.setText(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
+ self.label_credit.setText(QCoreApplication.translate("SettingsWindowUI", u"By Hossein Karamian", None))
+ # retranslateUi
diff --git a/Km_NodeGraphEN/Ui_Templates.py b/Km_NodeGraphEN/Ui_Templates.py
new file mode 100644
index 0000000..47507cf
--- /dev/null
+++ b/Km_NodeGraphEN/Ui_Templates.py
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'panel_v02 - TemplatesKsqUVU.ui'
+##
+## Created by: Qt User Interface Compiler version 5.15.0
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
+ QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
+from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
+ QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
+ QPixmap, QRadialGradient)
+from PySide2.QtWidgets import *
+
+
+class Ui_TemplatesWindowUI(object):
+ def setupUi(self, TemplatesWindowUI):
+ if not TemplatesWindowUI.objectName():
+ TemplatesWindowUI.setObjectName(u"TemplatesWindowUI")
+ TemplatesWindowUI.resize(506, 621)
+ self.centralwidget = QWidget(TemplatesWindowUI)
+ self.centralwidget.setObjectName(u"centralwidget")
+ self.groupBox_5 = QGroupBox(self.centralwidget)
+ self.groupBox_5.setObjectName(u"groupBox_5")
+ self.groupBox_5.setGeometry(QRect(10, 20, 481, 551))
+ self.groupBox_6 = QGroupBox(self.groupBox_5)
+ self.groupBox_6.setObjectName(u"groupBox_6")
+ self.groupBox_6.setGeometry(QRect(10, 20, 461, 241))
+ self.pushButton_load = QPushButton(self.groupBox_6)
+ self.pushButton_load.setObjectName(u"pushButton_load")
+ self.pushButton_load.setGeometry(QRect(130, 200, 81, 23))
+ self.pushButton_remove = QPushButton(self.groupBox_6)
+ self.pushButton_remove.setObjectName(u"pushButton_remove")
+ self.pushButton_remove.setGeometry(QRect(30, 200, 81, 23))
+ self.listWidget_templateList = QListWidget(self.groupBox_6)
+ QListWidgetItem(self.listWidget_templateList)
+ QListWidgetItem(self.listWidget_templateList)
+ QListWidgetItem(self.listWidget_templateList)
+ QListWidgetItem(self.listWidget_templateList)
+ self.listWidget_templateList.setObjectName(u"listWidget_templateList")
+ self.listWidget_templateList.setGeometry(QRect(20, 60, 201, 121))
+ self.label_3 = QLabel(self.groupBox_6)
+ self.label_3.setObjectName(u"label_3")
+ self.label_3.setGeometry(QRect(20, 30, 61, 21))
+ self.listWidget_templateItems = QListWidget(self.groupBox_6)
+ QListWidgetItem(self.listWidget_templateItems)
+ QListWidgetItem(self.listWidget_templateItems)
+ QListWidgetItem(self.listWidget_templateItems)
+ QListWidgetItem(self.listWidget_templateItems)
+ QListWidgetItem(self.listWidget_templateItems)
+ QListWidgetItem(self.listWidget_templateItems)
+ self.listWidget_templateItems.setObjectName(u"listWidget_templateItems")
+ self.listWidget_templateItems.setGeometry(QRect(240, 60, 201, 121))
+ self.label_8 = QLabel(self.groupBox_6)
+ self.label_8.setObjectName(u"label_8")
+ self.label_8.setGeometry(QRect(240, 30, 141, 21))
+ self.groupBox_4 = QGroupBox(self.groupBox_5)
+ self.groupBox_4.setObjectName(u"groupBox_4")
+ self.groupBox_4.setGeometry(QRect(240, 280, 231, 251))
+ self.pushButton_add = QPushButton(self.groupBox_4)
+ self.pushButton_add.setObjectName(u"pushButton_add")
+ self.pushButton_add.setGeometry(QRect(80, 210, 81, 23))
+ self.listWidget_newTemplateItems = QListWidget(self.groupBox_4)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ self.listWidget_newTemplateItems.setObjectName(u"listWidget_newTemplateItems")
+ self.listWidget_newTemplateItems.setGeometry(QRect(10, 50, 201, 121))
+ self.lineEdit_templateName = QLineEdit(self.groupBox_4)
+ self.lineEdit_templateName.setObjectName(u"lineEdit_templateName")
+ self.lineEdit_templateName.setGeometry(QRect(112, 180, 101, 20))
+ self.label_4 = QLabel(self.groupBox_4)
+ self.label_4.setObjectName(u"label_4")
+ self.label_4.setGeometry(QRect(10, 180, 101, 21))
+ self.label_5 = QLabel(self.groupBox_4)
+ self.label_5.setObjectName(u"label_5")
+ self.label_5.setGeometry(QRect(10, 20, 181, 21))
+ self.groupBox = QGroupBox(self.groupBox_5)
+ self.groupBox.setObjectName(u"groupBox")
+ self.groupBox.setGeometry(QRect(10, 280, 211, 251))
+ self.label_7 = QLabel(self.groupBox)
+ self.label_7.setObjectName(u"label_7")
+ self.label_7.setGeometry(QRect(30, 100, 181, 16))
+ self.checkBox_TemplateOverride = QCheckBox(self.groupBox)
+ self.checkBox_TemplateOverride.setObjectName(u"checkBox_TemplateOverride")
+ self.checkBox_TemplateOverride.setGeometry(QRect(30, 70, 181, 31))
+ self.comboBox_TemplateOverride = QComboBox(self.groupBox)
+ self.comboBox_TemplateOverride.addItem("")
+ self.comboBox_TemplateOverride.addItem("")
+ self.comboBox_TemplateOverride.addItem("")
+ self.comboBox_TemplateOverride.addItem("")
+ self.comboBox_TemplateOverride.setObjectName(u"comboBox_TemplateOverride")
+ self.comboBox_TemplateOverride.setGeometry(QRect(60, 160, 101, 22))
+ self.label_9 = QLabel(self.groupBox)
+ self.label_9.setObjectName(u"label_9")
+ self.label_9.setGeometry(QRect(60, 140, 141, 16))
+ self.layoutWidget = QWidget(self.centralwidget)
+ self.layoutWidget.setObjectName(u"layoutWidget")
+ self.layoutWidget.setGeometry(QRect(10, 570, 481, 36))
+ self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+ self.label_plugins_version = QLabel(self.layoutWidget)
+ self.label_plugins_version.setObjectName(u"label_plugins_version")
+
+ self.horizontalLayout_2.addWidget(self.label_plugins_version)
+
+ self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+ self.horizontalLayout_2.addItem(self.horizontalSpacer_4)
+
+ self.verticalLayout = QVBoxLayout()
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.label_credit = QLabel(self.layoutWidget)
+ self.label_credit.setObjectName(u"label_credit")
+
+ self.verticalLayout.addWidget(self.label_credit)
+
+
+ self.horizontalLayout_2.addLayout(self.verticalLayout)
+
+ self.horizontalLayout_2.setStretch(0, 3)
+ self.horizontalLayout_2.setStretch(1, 28)
+ self.horizontalLayout_2.setStretch(2, 3)
+ TemplatesWindowUI.setCentralWidget(self.centralwidget)
+
+ self.retranslateUi(TemplatesWindowUI)
+
+ QMetaObject.connectSlotsByName(TemplatesWindowUI)
+ # setupUi
+
+ def retranslateUi(self, TemplatesWindowUI):
+ TemplatesWindowUI.setWindowTitle(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate : BookMarks Templates", None))
+ self.groupBox_5.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"BookMark Templates", None))
+ self.groupBox_6.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"List", None))
+ self.pushButton_load.setText(QCoreApplication.translate("TemplatesWindowUI", u"Load", None))
+ self.pushButton_remove.setText(QCoreApplication.translate("TemplatesWindowUI", u"Remove", None))
+
+ __sortingEnabled = self.listWidget_templateList.isSortingEnabled()
+ self.listWidget_templateList.setSortingEnabled(False)
+ ___qlistwidgetitem = self.listWidget_templateList.item(0)
+ ___qlistwidgetitem.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template 1", None));
+ ___qlistwidgetitem1 = self.listWidget_templateList.item(1)
+ ___qlistwidgetitem1.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template 2", None));
+ ___qlistwidgetitem2 = self.listWidget_templateList.item(2)
+ ___qlistwidgetitem2.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template 3", None));
+ ___qlistwidgetitem3 = self.listWidget_templateList.item(3)
+ ___qlistwidgetitem3.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template 4", None));
+ self.listWidget_templateList.setSortingEnabled(__sortingEnabled)
+
+ self.label_3.setText(QCoreApplication.translate("TemplatesWindowUI", u"Templates:", None))
+
+ __sortingEnabled1 = self.listWidget_templateItems.isSortingEnabled()
+ self.listWidget_templateItems.setSortingEnabled(False)
+ ___qlistwidgetitem4 = self.listWidget_templateItems.item(0)
+ ___qlistwidgetitem4.setText(QCoreApplication.translate("TemplatesWindowUI", u"Despill", None));
+ ___qlistwidgetitem5 = self.listWidget_templateItems.item(1)
+ ___qlistwidgetitem5.setText(QCoreApplication.translate("TemplatesWindowUI", u"Key - Detail", None));
+ ___qlistwidgetitem6 = self.listWidget_templateItems.item(2)
+ ___qlistwidgetitem6.setText(QCoreApplication.translate("TemplatesWindowUI", u"Render", None));
+ ___qlistwidgetitem7 = self.listWidget_templateItems.item(3)
+ ___qlistwidgetitem7.setText(QCoreApplication.translate("TemplatesWindowUI", u"Plate", None));
+ ___qlistwidgetitem8 = self.listWidget_templateItems.item(4)
+ ___qlistwidgetitem8.setText(QCoreApplication.translate("TemplatesWindowUI", u"Key - Core", None));
+ ___qlistwidgetitem9 = self.listWidget_templateItems.item(5)
+ ___qlistwidgetitem9.setText(QCoreApplication.translate("TemplatesWindowUI", u"Clean", None));
+ self.listWidget_templateItems.setSortingEnabled(__sortingEnabled1)
+
+ self.label_8.setText(QCoreApplication.translate("TemplatesWindowUI", u"Selected Template Items:", None))
+ self.groupBox_4.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"Add New Template", None))
+ self.pushButton_add.setText(QCoreApplication.translate("TemplatesWindowUI", u"Add", None))
+
+ __sortingEnabled2 = self.listWidget_newTemplateItems.isSortingEnabled()
+ self.listWidget_newTemplateItems.setSortingEnabled(False)
+ ___qlistwidgetitem10 = self.listWidget_newTemplateItems.item(0)
+ ___qlistwidgetitem10.setText(QCoreApplication.translate("TemplatesWindowUI", u"Despill", None));
+ ___qlistwidgetitem11 = self.listWidget_newTemplateItems.item(1)
+ ___qlistwidgetitem11.setText(QCoreApplication.translate("TemplatesWindowUI", u"Key - Detail", None));
+ ___qlistwidgetitem12 = self.listWidget_newTemplateItems.item(2)
+ ___qlistwidgetitem12.setText(QCoreApplication.translate("TemplatesWindowUI", u"Render", None));
+ ___qlistwidgetitem13 = self.listWidget_newTemplateItems.item(3)
+ ___qlistwidgetitem13.setText(QCoreApplication.translate("TemplatesWindowUI", u"Plate", None));
+ ___qlistwidgetitem14 = self.listWidget_newTemplateItems.item(4)
+ ___qlistwidgetitem14.setText(QCoreApplication.translate("TemplatesWindowUI", u"Key - Core", None));
+ ___qlistwidgetitem15 = self.listWidget_newTemplateItems.item(5)
+ ___qlistwidgetitem15.setText(QCoreApplication.translate("TemplatesWindowUI", u"Clean", None));
+ self.listWidget_newTemplateItems.setSortingEnabled(__sortingEnabled2)
+
+ self.label_4.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template Name :", None))
+ self.label_5.setText(QCoreApplication.translate("TemplatesWindowUI", u" Current Project Bookmarks:", None))
+ self.groupBox.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"Global Override", None))
+ self.label_7.setText(QCoreApplication.translate("TemplatesWindowUI", u"(Use a template for all projects)", None))
+ self.checkBox_TemplateOverride.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template Global Override", None))
+ self.comboBox_TemplateOverride.setItemText(0, QCoreApplication.translate("TemplatesWindowUI", u"Template 1", None))
+ self.comboBox_TemplateOverride.setItemText(1, QCoreApplication.translate("TemplatesWindowUI", u"Template 2", None))
+ self.comboBox_TemplateOverride.setItemText(2, QCoreApplication.translate("TemplatesWindowUI", u"Template 3", None))
+ self.comboBox_TemplateOverride.setItemText(3, QCoreApplication.translate("TemplatesWindowUI", u"Template 4", None))
+
+ self.label_9.setText(QCoreApplication.translate("TemplatesWindowUI", u"Select Template :", None))
+ self.label_plugins_version.setText(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
+ self.label_credit.setText(QCoreApplication.translate("TemplatesWindowUI", u"By Hossein Karamian", None))
+ # retranslateUi
+
diff --git a/Km_NodeGraphEN/constants.py b/Km_NodeGraphEN/constants.py
new file mode 100644
index 0000000..c2aed4e
--- /dev/null
+++ b/Km_NodeGraphEN/constants.py
@@ -0,0 +1,4 @@
+"""define constants"""
+
+#
+BOOKMARK_KNOB_PREFIX = "KM_NGJ_V2_"
\ No newline at end of file
diff --git a/Km_NodeGraphEN/dev-rAnd.py b/Km_NodeGraphEN/dev-rAnd.py
new file mode 100644
index 0000000..a13d615
--- /dev/null
+++ b/Km_NodeGraphEN/dev-rAnd.py
@@ -0,0 +1,8 @@
+
+from PySide2.QtCore import *
+from PySide2.QtGui import *
+from PySide2.QtWidgets import *
+
+msg = QMessageBox()
+msg.setText("salam")
+msg.exec_()
\ No newline at end of file
diff --git a/Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png b/Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png
new file mode 100644
index 0000000000000000000000000000000000000000..8adef51ed937c4f6ae33fb2f378665c0832738dc
GIT binary patch
literal 2267
zcmbVO2~gBl7+$r7B30`Q6;RX|Jd4>Jdq>x6LD}M33Jan|AlE_)yNR2~E{a-DZ0&f}
zTCKLWV;OZEv7X~##S2A6)S~sEDp0j}%WA8(XxkT#t#rqHqpXm@v)QLT;k+0
zc4l%mV`AZ(+xHa8hS{1`0}srDW=*V3r{rg4;;}hj}NJ$)Tbv6Nda@BrQUY;0A_)I?dDbR*NOx
zEjaibuplLj8Ua~jEPC9e*CT`)ZV)PW^Flqs>
zfiWPgme3j*688(*s_g3
zU7Vks6jJ6p5wR^Sa%=FxzF)3dJmT8B1={M$$|&Imyk@?=G$h>DbJ5-?v~*CfnfE$W
z?uUvsz3s%5#oBiQPVWy*7%6M#&%PA#`>!7QzIdFinOPtm-}`_t{FV-L*E}~4{aZqADFng$EKR_irkQ%HQg_`F7R;yv(C*83fte1
zmo{q70B@HK^uZ>^pv(}zur(a&ZY;#rJ
z?PKF61YWaD_m=d05ZsYc7jHP(cIeLOxovkZPp$Pm&RfG&YV#w^<@7Rk_YCv;bpC8*
zpT5aElQL4OBE8`~Yl9wlUOWEgRd484%kqxj)#iSF^z6E252kvjg`{77GqvN}~t0d^q5~FS024QF!&0c?*S%2II1T
zx=X|Gr3W5NIk4h-r{SZp@r4z4VyC1f-YQ`mvX7Nkus;~T+J1eQ>$sG8-d0vS`tbF*
z$t7Ki
T+t+VYem|@+W1@>jWX${rEbT#%
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-arrow-circle-top.png b/Km_NodeGraphEN/icons/cil-arrow-circle-top.png
new file mode 100644
index 0000000000000000000000000000000000000000..05a5565e3ac402509be597b7e9c027a93e7d867f
GIT binary patch
literal 2273
zcmbVO3s4kg9KR$Vsf{y{F9h9LwXEFR-Fxia?Qjs>9dPC8fq*E1EW6*q%H8dHyT=`p
zmQa}5P)*W<1hUcS1>ytJG&3bNYi!I?Ghbj0W{hxCDHDzMEgY9NWKBD>yWf7_@B96K
z|Ht>AUF)2mdhghnu_~47UVEA~1HPvy_n1-ec`;z_gRgtUw8fH2HEFhT-(}C3)vHpC
z4Dp#ca*ksj%?chh!wH2z9rTD0ty0A&21SM~0Wwkuig>RX?b-7QitwBnU8Hvq4$%UN
z`Lq>2uyDovOm;;HYvRzv1SCF4Ljn(w86@a&dnGz(MhAFlI98@{6d8cXC1x~9F^J?i
zoQOs60YtB+FqYIA5rauhQaVCQ%|$c>X~GF3PHHiNqzQ`F8<6mYLTf(GMQ2!3!nWX-
z87-D&k;d^rAfOIt)q<}GCru{Ep}{p83?eY8%qufN%qz_tVz2^<_3@(23tmKFWC{hp
zY(}BdK^Ht?gw`vC!vq6{2N@A3)r8{G0FYxNIMMHO4;bfI9Jql8cx4G<$p}^~7Gyyx
z7XE=cvV5BX7+QxTVq;h>9#6!CB-=`%8{vQqiPcE}x(y0ThGS&rU%?zpy9A$yfe!N?rU>Aow+KZdVWcgBTkt`{P@VSH
zdAr5p^a(EB4Hu-0)MUhNvrwdoqA-n`9FXg9&~~pRGhP@nhC+s+3_wdzBsH|(DzJW~1eE=Qr-2h#$nlpvmrKuRDWeV}NlJ^c
zl#atptWl3~M$X9UG%kX2nTFUF_;`3A8TYNMiYg8=5`~Ob&zYbWBg0{wM(4r`36}|D
zG$xZ#YXBV3Xq2)as3ba#mtc;|!Ut&~SRNj^d1Rn?Xogh|g&Ad)Y5*J>p5}*%$A7XM
z-XACikn|2!GH6{ATylW%futfByML`h{GY^2OzEAa|F={QY8p=ZZB_e!q=&=87Bk)=
z06Q#>D$d|aFB(h={`Y(htliSLhTyOnD#J(@h98kW4!n@s2fOsM%TJA0sYbkFwxNM0P-so!oNxT|YIepj0@?$q|u1f6bZ%au{
z)xY`d{2SMq{8c-M>KVP}eLtbUOgNKwe?Y|Z+fU?dp4!k6*L|odWx*aRQBimK@Z!C7
zU0L_PR=uV-*43HoK5+bdvX^eVn1LE=cj}n2Cv9&}ICy%IV^Ml^P{#yXSrOhcT~gnELQSo%x}u2ctqCjoW^O8HTu<%`ea-5NhJT>yl(4v<>@yva{OvOXqtN_`{g}VFKmllX*)flXxZeh
z&BY4}uu>*v*|w`#h6zrSs1=aF-s
zvmZFy)@gSoepz9+=eFWi!}2X1{d50V{j&|A&Am67
z+4~OVtX^-dnbZ)!x}fp#Sy|(&k`5F3+?Q8B4^D6X_0bd6Q_@1^n>P2KzoPS8djI*g
zyVt(A@6iX=q`$f&sy5{_XK8zG&eE7U6J~t+ps_kNRJ7HRwSH&x`G)G5<9fAAY@j;!
zaZA&@O04_S`W24s4r|I0=LSpTJ5RW`Y&r?f)_=A4_3sYuPwqb4IPu!XkLzl7$45(Z
zdS-Nd5zKz3>yZ{+SAUDy9NM~}RO{@t$4|3WPK>!(HLfpqP2t(67XSX+fotp%Uwr+x
fm7u~u_QojvwY?v`*^~Q*@)KgW&9^ou7gYQSXWBW*
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-check-circle.png b/Km_NodeGraphEN/icons/cil-check-circle.png
new file mode 100644
index 0000000000000000000000000000000000000000..752a37e551ca95f2bad695fe86d15b0026d85bae
GIT binary patch
literal 2263
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
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-library-add.png b/Km_NodeGraphEN/icons/cil-library-add.png
new file mode 100644
index 0000000000000000000000000000000000000000..4856e1ee6a5c6f5ada8251bbe20a0739a1625e95
GIT binary patch
literal 2091
zcmbVN4Nw$i7(P@KQE=2#8)wvQQAa2C_UDefy_L)0_`C8Dkra(Vmfi1QySv?WckvFb
z%*HT5#xyn2rtC+{LXvdK6jKOw9MegM)WI<@YsB#f$QiX_s&9|u!UnbJX7={`dA{d;
z-k_Daj_F)4F*G;D=RG*zMs&an4$2$J>a+xU&H0BMXJFtewzM7xpJp=84S_g
zLSDX>@1DbOlHbJgQZXo%Xo_wS$#>@<
zPDueslF5p3q=iOob`xo}5N2y4LJ_1LCup2BV+6?%Rwl`YgnuZsrtlsnH!UM<3(g#9
zsiw&cjt2q(Q^0JJloFh@+aU*qQxpafm|8AsY!DOGgg%BepmK^JYl0*qIwM;wm1zzX
zD(!W_FGpxaH5?`wFg(c0IB6numqI|Ei{Ruk#TPQpb2#t;KM*w)V#x?rE|oM%EtMWZ
z9oc@s01U0$9kDT>7Qa7YLeKwJ>H#P$8J^YH$AWo|@kolFg$@gTwglj^Sb`#vFfvZbCn?Y{RA=tL?s7VF
z6v-p_;D(x;nToj5omSFrwPKWs49Ru78JDPPtjGaZngfNwF$n_C&@^SUayEdmRu6?)
zXbXqY#by$-vu3l+3RsTy(0%9AB(6*^0sVaMZQvyia{MFD!g=g=mbG9uP7fVxF+(Ci
zV;+)Zc|azyc3|&go2v-$LbAU8thy>5GTI2vLVI`;BLGce#gv7{Xe*p@9)e7=QGoN%
z7QO64mBeHTD$H?t_#({*OT#0dfP{*NVLAO$I8aWn2Ee1?WnqAL{3pxd^MO(TNgq)q
zz1CI9qXk$6q?EweJ+=z*hly9&WsjEr-%{DDX&~tjRPFzf9u5mv%8Dfbc32$Mox$~9
z)SDFi-}wsd_3K-GaM%p>VWbPgNu-Yh5mGC#OV8clH5m+1?XI+xysQ&@emLaKOEC`Z
zYO4!WuX=uv=ed-Wl=^++8e30HDVjEy^*OjyAR!TlvNb
zWKqkTTfM4jD9wZPbs(XejiY;sLi$1l-$uf~X1Ry0rM>UXW0S!=c2o8Gf{
z)*nj;T_CG=zH$2e)UC&pMVs;BytrQ{)q+cV684Uay4m>lx{Fay?jL-^+%bf#n6az!
zubB8P8-usDp+#R;t{HxNw|{k8bq!KKwr%9yV(&{;^`BALUS`miC0C@MWaB3-su4$j
zGuB;6eP?@A{I;U&tB*`*u4_Jc=WO@ot^4BEkLmEb&Lf!zHXOUwHF4pK=l2gA>a3l!
zDfe_|#)-=ZKeC^^y7<#gRLqZs2^DKc{M`KB@oV$OR*~Yd&*RP=HuJZX%^&VQnvvU+
zIG$>#&U&Sx^_jEZm#zBv{_0a>o9OkU+|lg`ccW`=aFsi%3kxbn++Schs>FA8&C33r
zR>bs#QRnhEj4o_cu1_ia!r5Jrx`@B*jy-keRWM0XYj*8zXd99U1}6@_)_!tj1=w-)
n&Vh;*-5+e;o>kD&xUqG~SIH{db9}^?`sdu0o}E^gTJ+lAH@)FA
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-lightbulb.png b/Km_NodeGraphEN/icons/cil-lightbulb.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1d7b8840a9026ecbbd2f5698c9bfccaa896dfb7
GIT binary patch
literal 2139
zcmbVN3rrJd94{JmGGs%iB13i_Dr0iJM<4V~3PXyvXc23pINiqe?khcLd$o7aLWuDZ
z=Ty|GTbyGW6}QA`*zhr5sDo{aqEi+%nBgSB#Vm^t=3BF|?+SFd;3K=_?!NoJ-}n3f
z{*Ui}%ky%l42g`3RH;-$EM}7pzGId9rGfC-7BD`5ufaa^97&}bF;2N7EVi+?RH^|T
zf<0f(w@za?(W7R0(E-#!j}M|%sY^<$U%;O<*|AV?a=Ww26QZiahz6*
zv04p{u|P`#K&HY~zK3nPUw{Xab@ygfRPm6Jg!
zIj2(gp-N)Rf&_D1)_ss>g8AJew}6C-hhaJ8P#958sRjTQbWIC=#N&l5ckd6l03>}z
zm2{brM5i2J{UEat#_qXQh(Ard#Fjo=`irHqOH*IcpQzgZBfUE;oQw4q0@z`3RB;AZ
zdQn$W@c-s3wAQO{^}t~>REFU$3_rqs9C#tMA9m@+FRBNrRQ+DHm@@6=6Pqqh{VUR5qg_#w}lntBz%`1s5i}$oF9G<^4qIHe#Z0(^&^SJ&q
z5-%7HtCC{=%CG->-+@Y@`HfSP>}M7M5c|do*NL3nbxV%61O~5PiF~#Fcy#sZ>krm%
zZ2F}$Vj}VSpsG!o;@keH>K(gQY)^O;x7jga{Fh5=oRxQ$9^Ij{_(nI8xJOf!Iel8i
z`9pPsjeDZDUCk&+ZbFC5ty!{R(dAZsd`hHoR_V%wWxuv=>v-!?hf2I1eQ?az)xLWi
zTg1*8_Q?@#(bmm@M&b0J_Qyr9<^H@Ki_VR!-{CGAO-C`6mkrAfA6WWReExy~d!pMW
zeEZwGt5+|s@+C-U)wl<1XExt$+Y)&(y8x^G{qVUznum*-)Av67G-2<$nus%$x#|4J
zH=>d*F&l@L+a^ZGt!Z444n9<7b-;$kcs+m-<_#br}@Vx*4
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-medical-cross.png b/Km_NodeGraphEN/icons/cil-medical-cross.png
new file mode 100644
index 0000000000000000000000000000000000000000..14fbf79c0d4e2bf3c814c86d2502c5014d3ece42
GIT binary patch
literal 2066
zcmbVN3vAS69PeOETo^Eh4w0Es-fq3V?pe6Ob~m>h+#JUU$3vypes|aH?%K88ZW|+U
z6NLftmPaI_5M!bl8ejG>{yJKg=2l1z|a^(tFU8vx2CXTApY=Fjh}(i+b}XoA
zGD{HAXw(p843ZKcD4Pv(&;(865P_?;5sjPu8PhmdlDsY%7o7s%h1}Y}k?PgsORpTN&a5?Q5430q*1=h$>6hoQ;&RDHHZZ#W?
zIOpf#h#^fzvynD4Hh9gsvRBhU((kL<|06vf7Cy*D0swYc0@Ix#^j_4P
z6ym@6immnQTYYfY4E1563&W2@9|sXgt-vmQH#27if+U@EIrGYjPBy=FxOi~h=r{In
zPVa8q*501^$^5*LpSR^Fe^qj#xISt6^5NOddz$a0E}GWp^-jfB=X;M0HC*-iHg%8d
z$sB&>*4e#v*Cw1swdiYO@>{ujwX?+u4rQ;hyfX6JrbE+xm-m0aI4`t(>mM)eZtF-Ibbcc+->Cfk
z`gd0*zEdA<^^9u~7EGC(wZkH7XHGD4=OhO}milU~@7WA|?)-V74;K$QGX9w7bnahS
zKMv{I?p^6&H&)gs-@13v^TqJWlt5DFpd)V<_+CGG;L?G@j%5?G2QNu_I}M#R`(@>*
zyyZmohz36Vao2l0c6y8pJGZP_H0|E5f_;tF*2%}3TinTix4+*tYFpE??c@F9M@?#9
zI69-pP#!$E_A}p#j`D+<)$%&zLgy;e^`|OYHn4XO-Kc!7W6HXmz?~+Gr&!Dy`?WiL
z{qEnqNKW_a_BGib>;yM&x>I+|JjI;9;+{UE_=m!8y2>~FyuO^ut^H_i3ASc)`PO0k
z?(Lyw-~7}*wC(gW=Qq7ev}Rsyd%oy$n(*f@$dpqTXH{S5Szh16wvJfrjAkuuIG3yc
OwOs`z&b|3d8~*`2=fsx)
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-menu.png b/Km_NodeGraphEN/icons/cil-menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..33a694cfb0fa0f6a9aed8c3e7cc89c82d1b503bd
GIT binary patch
literal 1817
zcmbVNTWB0r7@lp7#-xQRvQ_EBFpbhmXXni9?Cj2v%{JXly9?bkY!{kf9z1)_*_|P~
zbEY$s>}FqTs!$aLMT(#gNudwMhoT@N2)2<(?TaV~>Wc*QNf2Z4!AnRyvo{k-FSsx}
z=klHJ|NhJQ=jDm2FVeGa5;u#cQx}uq+9D3*yfth0(wuKbfE4
z)6^w=ETV}>Rug<&kI0$|qS`TD0kSTEgd|5rAR9n4VsXCn6PPs@myJT^WXBepB?Z&>
z9Yd1p^?IZpjZn8D$-2%s6iHD;h7i4Z+lLL&_6~O$GQ>l!<@gr0`G66Y=&YXEItTWuM~NFr5IBew4`tlYyoCiSUj(mPQ1ws#m{
zq0Q%eHg?rgtMyEH{@5IIqZ5!_(Oz-hAyR>Obk;>=Y>vr19C+gxX_r8sx-9$}v
zCG!gNnm=;RvN5fDN4Fgy8R(Owpa2DkASME(D94Rx+=#Jp)BvCj%~NcZ=XZm~6hltz
zfU=Uo(1-T~V`P-6TZ7DDs|G7Xa_ox0_rhqTX_dOnFjE)ZzMe~`CtO;#s%*n6oI1hh
z#?qRsYnrG;SRw2+743v0K_N_`XvX;kkJm0xUXUX}_
zsA}=8;xQl!E=5v6K{XI8be64M;&ES=JLl^rVWfAdlD2h^mi;<($!LYe?w(aB-ATL$
z=k6~3{!-c2w43xDRr`OWcfx{9Xjcg9u#ylsBL%&vofPT6`D*QL>swtoYlgwF*M-@n
z*T;#?s9n~jPcOf6lXdtnbD7a%_9oic+Dh#eLqERTH#D`r@uzo?zdX3Qc-$R&`|~}k
z*B3q>FBEQ%Lfy!j<#ud(D;9bT|`Q*1szLzPS1Yx%4!ZmioSRrq%|oK6B;PYsJCD
z(q97$;o(C+EWh-|XRm7Sj~oaUZXe&cbP+cP&6WCe_$O}p)?>{Zd(4&Gbl40XJ;QH~
qom9vRKR+A#aP1fKvfenxaZBGXe*Njnh0WmOl^Yw+Ts!gH#eV=GnN9Qn
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-mouse.png b/Km_NodeGraphEN/icons/cil-mouse.png
new file mode 100644
index 0000000000000000000000000000000000000000..f71a54713367a52cf35cfbd963daa82c891d67ed
GIT binary patch
literal 2128
zcmbVN3rrJd94~?b;xj5EjLCTp9nR~$+R~mBrY%b2iVT>r`54!`D?Mm?at*%
zQ|cC-X5wPDDQYBcLyc@srYM=PxPTa3+`uWi&5_Ml&}p13`wmKn3qGN~Ica$u#GHcbxJ>jRF6ce8zj=746A2G{7J6oVSqX)sbZ7a}m+fMR+SClL&%Fdd~$fr396SQA-0m1ABQv;}5H
z*dfav3PpWBpV~*N1+fUl4F*6-XrsZ8&Vi)o8Xm=
zFi<+^g3A-4bxXl8fqJBPC>s#w6t*lY%pG3XIHVZad^tsxP;fg}(d
zw_|p_&W7s__B!9g=rhM_JDCZRsgxdF8Zx^zRGFIlA;HQHjHpO@LP
z`}_84D;*bkvmIybfs5%I-mgEw&Pa+*G9?%5wrts2b@X8U=EP_J9yKo}7Up7W&lg0;
z{IaOFb?WX}^2W`lJI9gTC4Jr0h3j8SZFf3*uQgs>^U;mI{$uTZjkEWiD~|tkx%#h(
zU2os{vSv^3&-*7N+-~sSzq~5?nF9%5#Zc*0Q+_*{$o9_Ob}Bw#OP%=A=F+oOOeP*M
zO!ih5@9#aeth?!pRMp{et;^>&Aqn3uF5g3*U$^&O<>a}|lhQs3bQN?ZzZ8A9egb-P
zj-1#+Ha3T)o;bBM>vfCft<(N@F4Pn*yp<5ixWlLSPz|;@=-TFc)rV@1qQYkD!`XG
zxMf|-y27qsF|jQVmPW>DUpbkyT79yRP=65C{Y~Ahk}
zbw1a&Zs+B@Eo(Ybm;LzQ)lQNp+X{u-@QfBr9kI5yCctlR;IeNR(bA~J2VnJ%_c|tN
d=bhi*AAToyReZm-b(iwZw`63QKU+{(`44bg>RJE*
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-remove.png b/Km_NodeGraphEN/icons/cil-remove.png
new file mode 100644
index 0000000000000000000000000000000000000000..019690cb7065b31bc17df5c1093aaa6b81899605
GIT binary patch
literal 2128
zcmbVN4NMbP950}V42TJ?Vbihm5U11YU9aCK9g`NN&LSy|pa$_iUg?Flck~Wg7|})D
zoSS2r%&F0tZDNdbz^0qg5Wf}&Mpzs(sMDx8jhi|qnCO<_aPOdWxZp>2$=$ts@ArQH
z-~Z$NZ(TwDyyV2^6ICizvLny#g6}ltPKbxk?vV9Q_!=+fEtXU&b*6I1I9yYERjRRl
zyt`N~b}pb;!LOk?fdQJZUxa9tDl0oI(rh`95eAg;0V{gDg{171F_
zCI|{^^4)ArIcwq2>{pPiFa-(xK&Fwf-xrXmuoWHTrQleZ#!+MtB9~jyIf_A~*ja$s
zgdji+8Y9MP^=8Cm(P)i<8+Xkc8HP6J}hi!w4-!7%77ZiCieO7UVpX%RV<^3w~Kq
zuPlocj)y`aO-QE^f@QeYVu2haPLdczU{ZBJro&i3${1#_1BngtqRa~cL}8>Ep;ES@
zQ0b5helbcLkRoA%0mH+zh-)>3;?f|HW1~2+GUyvL&apV~0Y3=H62xkwSkWuUg5(t*
zK^R7!QV@xcGF+gwB89W>TJkZc!#wfeMRw^Z+>>oM}oWMekf8`mBED7|0#*Ahiz|6Fs
zz|4$=!3dKMu!No@42*f0ZDEjy2a@)UWK~pgkkO+xF$}9WVIDJW!Hg!o7Gv~gJ!IrK
zla62kNgI{2AJUb_OEAaPk%LqSDk38vj|>(MMYGDGu%fI|4S+)<)BGs$cq+@0{UI-a
zq>rhRA?uRhkwbJ4%qfGhdtw#hj}kA@Rgahcbg3NDG@A5>s`md#kA#Kw(t$DnJ1mYW
z&frQf8cGWO-+T?Ojp$p$aM%o$VYCawk7yqU0Z1K$U3$#L68MXV9qX{qap$!i>MHft
z(P?dcr?##fcg7VoHvZ7CKWF0U361szlh~I_?A?~;JuL+Cc>uS$ut8Z&Ll2
z6PiEoSfOj81BoYAot@hoKPy+b-~8QCV#TI{)k5FlNxKSPRo5ogeB1wQIBn8LS7TE?
zX~}6V7h`Als#?TpaT7Nr{my6?wO#Q%@U*txC||DFMcwPSo9jUd)_a-z=E?C`u?(H6PY1OpdH_;0hjMg2{8`X#1pYFC>2
z?zI^E)}HqVE*5^e>Wig+b*?{E(S2z1>irFG&W!Dzdhh4yRQ>Jm!|R!((v>dye92GC
z2jcR24ymRj_RAmL}%4#TORsNZHmnCU54A*7MtrwHMBA
zTE1duB6*_W*Ug!oCE0BJ+#gkHdfE2e=QxJjJ4LnQU{`C~#frEWb{r&Wa==Y@nrk0q
dZyG3$8;G^5kHmW`symc_z9To^-juU^)jtU;?y~>@
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-save.png b/Km_NodeGraphEN/icons/cil-save.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c162d073e54c8bb9fa4df12c3117af634abb424
GIT binary patch
literal 2142
zcmbVO3rrJd9B+vtW1`py-TaI5j?4rs4pdiZNjCzAL4}1s~ZZclX`*{l4G-
z_kVoEff@rq-pZ4v=&aiqfm_O
z=N!div28BJ@Lmy?MG0AW6fxh&PLe$*`Som
zs}6wq)%gylx{NWgXy!~LL!uyo7l>c|AUXlFVp`mx5z?8b^^3L@YC-S+YT-*k(tv
z`2aw4Dm})iwMN8XQmOS?LZhF7kc8TV6GmLE!3Z@)=qa563129*7GPaep(QtL3x1i=
zQc?6%I35fJRY8r454dr)$pkq_oFp-bz=SHFNK2ScNE>9Z0D%c`ev#vSh|EYk`3ljD
zLZt&Pc>NJtpAZfc3>Yraeq600WS2rfmWkl}6#-AkILqL`1H8Z|3J|M~VEv`M$P1#zhSlQrMob7|P9=0B9FSqrf}_e0@IoN)6#)k1R6?0)vNwJzI{;{r
z4>)+&P%%i?)SM-Boam{oA>YmXc(%~44t=T
zXWIk3i}Sz*p>WP@#F~?>SDW;Dj8v&Za&0!s>JvoT#{jFvjKbikIF6-gm&-&FIyDBg
zv`I
zK+>mF$$)i%cZoqd0J7XLcF(Lr{7K>ky7KALpD&dInue49Sk?X?>EW<2rL@ltV28y~
z*%@5!MFUB}|C_JS+K|3A2#3v39!9z_{D|~%;Dgiw*riWijCoU`h)S?pvK)EcpIBB;>akeRmcpnyel8ak4%hv*>^Id>E50GP180@CC0v<)9sH;j~<>~{-M_P)~k(UJab0pRm*U(npD(?%2`2Tbj8#VbL1HrTSp!6tXsP!ts?m-;P>VKBB#U2DKu-
zYfnnixiyod5B5)J7;`>jR&MwC)cdDSjP3tA_hPeBUw==kTU_vC_vmeo-u+t^>q8~c?HeJcZ!PF-YS`~>r8M&
zu4Nru5`?G
zl%2`id!tMFYjnlKgPD!vCo0)3zGI4{tBdVzQ{3e($+OZnx7_H^oqlm^uye`iUhVIR
zt2Zare!Sh>BE%f&xKMc&%kP}bWwp+aE>0j*Th%8G%}qTErhnVAKlQ=*Rl5xA>oXH-
zU)yu@rz?lHl?Odtzis+?TVf)}uO8Fgp}M_towqYBwMThCjP_?-DD2ALeSEtjdF$;|
z$E^o_&YHvhiJ7-f99GR*-!7$euHr5&TR$p&)%Rm_$9pl!?z(=e?9k0$diR}u)bNID
pL-Nsg?VS$}Ho4>XUeBMr;)v(mvOlA~vjh1Lz?ze9X`NkC_YWca?K=Pf
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-settings.png b/Km_NodeGraphEN/icons/cil-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0061f3ef791ec8c2c16e16365741bb3bf9be19f
GIT binary patch
literal 2324
zcmbVO3vd(F8csnP+o6<-6vRQ7Ey#1TkGxmY0!=YNgC(T2V1aITPm-m{ZrEK&(%#BT
zM7?-NVXCDFRw+tbDHY2|W$eS5!mSr99h|W!Vo@(h#j9Q~w)kM~**1-Er#|NH%BBoYh=G99s@gS<2xtJ64&3__F=8@fO>
zh!nVTk!(={h*4+4SkhoY%vK#~G7x&xJcJ@hD^6H&QjZZNO_*q-8Hrsev?g(0+HGGH
zvjx9ws9#Y+G>(VEVO?0S6D1!`TCI?S!YK-a2uzL&3KPKuIb)c?4rEs1Lkcenh|0(m
zi|Z8|3Y8AI5Ddj>1vwTb7%)7-gm6+vs4fixIW~?9t(O9W#yJ)T0T2X&B10@0$Al&ww-|t-b-Cg;M${4v#!bjd&Iag4EFdGIWluB&a5s>}^%4tmHb9vfsy87z
zTLO$CN*+-R3@0jgSTaIEuaQ~#yugWJdG<{kfSpl*4W$T*zz8EoP#)4u8!R+szz97}
z5JOOx$noCjNKhk1QCT0hXfyr#KTBuivdxBhM_wB
z&GXLe>|9Co@&ULYyB}PLICHX1q}61?C>=Q{*X5#}f~+tC3!HWv3WKBLd5+dI28PjF
zIm`?!1m-mxOqkV7nK6qI03*;B6J8Pw@3)KWdbI@9{X?gL6Isadt2{jkID)h=n3p5H
zm;s&w%*wJPX7O5p!E7|>0ZR?DJtFb&Kr(@wSyfdWWCVaU>PZe@9F&0p!k~u~Y%yl!
zfRQo+iXsSuTK0pLL_2sH<~SNVNXx*w*eJjwgT+HLta>PHD63Wj;LzAKKSDhIl;zm|
zupdCu->H%z>$2!o!i)qK_+ae*unO_t5-&3weqZ{ZOXZNJk)+>Jwf~RwSXfv;BlrO9
zusEtZgR8x0C@J{==4){6roJ@{hs{tO#=9{5i1%?IKxzqg>5e03_iHqxI-T|f9>>XN
zo-gyizjX4+Py0XVz&f#=_D+A(58BQf!3>Q8_5{RjOYoICtZ*~Zs0_pWLE)Oy+4CAW0Rk9GI;^*Nq2B}ho(
z#@_opPwcL|r}&iSSmIq5j+YUMRc_bcW<>A3wog79A-VPy(X-ahf!xG9`cAelx4pFW
zt=z=DMflipJH)eX{+==C&OCDep-n>L)V0Qj!V~H9C%#@`-c>a7KSEmaR4G4_R9>Ax
z|9xPJC1K6VbLWwQ)bD#|Hs#OiYJ0I-TYvP}*K6VWBMsEd;Ik?qc6Pn?3d=8_S?Gs_x!xIlrNX&K21!tJ^pbhZC_jMrof>C
z?dX^2;XSLKyjp$V;=A&hN^|YZ!Y3{^j`OxH?f6A0(#scbFWh|P+Yeig+skTJVHIT!
zhqkmltL?wmaA(WAi%!oz`_r)>Z9fVpCbT^K<`*ArpMQQ$^smRi+ul2ANB@b;Wm#vs
zo~gWiN$ltj->>UToY1)c{p#+Yp0910R_Pbqhia-mFURw+Imwe79}j3Rzw<`4uT`7U
z(=h3w*2BiO=(=1ovwCdiSiD+eYG)6pmwS4yR-b&^I4^b4nXFBZzSmZ@>1Qf$PI6v3
zcH5qd1#_)M7qaradq#bJsogg)t-oZHcH(pAm)B*cEN!tkM^ux8V3JLKbEk+W=iWd_YvFn+Lb+Z
zR~)D7rB@u`q?ZRS&yh3ctp2#SL1xx`XGdp!*jd%N;jJC1
z&%O6_P2E33g<-{T?!bhH)*Yz2c86_J{fRprGiKDLrOpPu4Q$-18uh=$nX|;+u&`*$e*uaZQak_v
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-smile.png b/Km_NodeGraphEN/icons/cil-smile.png
new file mode 100644
index 0000000000000000000000000000000000000000..360a4ccae2b61fd6c23099ee9edc5fe4d88e3dd9
GIT binary patch
literal 2262
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
Nw)8AZ%aXO_e*+~9{lx$P
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-thumb-up.png b/Km_NodeGraphEN/icons/cil-thumb-up.png
new file mode 100644
index 0000000000000000000000000000000000000000..848cdb163ff05c0484f3241cb1e318a525fcfe80
GIT binary patch
literal 2145
zcmbVO3rrJd9Is4Je2Z9lIJlgciQ{_LcY9EYP>@CotW<$Gjn})c<)rPE-a(6I8gS?)
z$Q1W*X2Z=z;$~1cg}J!t5)^e|ijQq>BE#3_rWqKQAwK55gVN!GkF3evefNF8@Av=x
zAK(A_dT#c-@nd4fNF39*CAmQd0dMiY^8MVgnA=Z9uyZ9!3$CF`)TsGhz0mgCaI-
zg%{+l$hOieifKKArp`f9{3IlB0f9pNE~lF({RXt3mxN<+8b^_Sh)`@m=ZXfA0&^~s
z&Upc%mT53ruF@e|y-coA5lT%Gq9EjYoY3KNB}T|eLPM&xNZ^M;YhK1qT8x{l*y@2TtGuZh?nbc@XO<;slN_
z;vPdCTzP+BvU_f)2AT$^meX+kqm%Fp}w*Jv<>Ox`coY$i=^UZC7GFc}Rf433Ot8B(cH+LSb{
z$Ly4rz<^#Q$0)njhN+cyLZQ-7S~UpnH*$2TSOVhyfz!ZnH01bKo|=-|bapj`F@Vxw
zdRnE2H-f={8XBS0TEI}YK{YvE79L2-Ih0jY#Xv?%p`i5|+K$;(lp0eiRZ5JK(@M;)
zp>;}HMKdZbEtY+MC6QSy4|7}|I7oS*BrtNaNPqE=6fGVK14@h402nkd%?=ZfXR;jF
z?<)e3^a)imV4dgef{*foxege+r&b~UIPpAH_GIbLmdXK5!%2UnYX6V)Kv?J^%IyHK
z!{Vsu3@-Mffu!L7%~${0kiInths{tN2D>nP3HEW|hSXlzr9HR5fM0|VsmVCknsu!4
zyPVg|C6S|gPJI>EdVEWCq|{iK8e6p?YZjOxjmX$qRcG58Q&(6RH8$zy=zYzbs~#q~
z_I@z#o8>*027+#lQr>o+Y`jqX<-3l~J?>uL>fU?z>iI*5`Bg6@N~;@)h&N}CIP(y>
zSo30mezHDcVJ0zl&!-`;oUd}cg_?G444E*pFS_PZSVR8$gvPXA*}3<_r?posJa1)r
zDk4nLUADHj@z%vD-F;2u)w5AYzP-~qr8~cg*gJV~N!)`i>mD3fH?fImudUEo3nEs=
zFW4_nUgOeL-fh1>?T^dS@0Z2zzB0dS9SYu{m$c2_G$}kTbg3mtdZQ<#`1FR;TUNJ(
zyljkJbY;n;bC(p&^Ae)_xTMS}nl3P+y0T|F+48meX6t(!KTJM;4NX~_S#veAZ_Tv|
z?!>sHHqerrU1@ps@4b~rem+*XvO4*Eb*(C`GG5Z<3U%#Cx4BUWh~EDowT{n9h+4b
z8GpsWPtZ*Y%S1oF&=ZzCdn0}{v7>c!+v$))nM>o>?~iS{d!RnHL`}T!pT6*?Jn2iR
z%}4aj@A&pdF40XtQxn>E_Ig2!K0K#2Z`s|ge6GbG_wl06jvKA)
vrXQbI6}WP;8*-hSe=pjx`p;iZTz(K*(NJ4KPwkb7e*#Py*~Z;z%PRi?wzlw6
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-trash.png b/Km_NodeGraphEN/icons/cil-trash.png
new file mode 100644
index 0000000000000000000000000000000000000000..376ca529f02ba748f81dfe0ee27716694e2c3ff9
GIT binary patch
literal 2090
zcmbVN4Q$j@94`VJ4#qN>e2jpl$bv|(z1~+_cFgVWwq4?}u}zt%Xs>;@E4yotYqz@r
zDj6|?K*mP^iHwgCM45tPd_~3(78q_rnMMhMfr&^AAX65%2nJtow{w^w#3pTD-}}Aa
z|M&lR|1Qs;m6Mo|nt&ikqBGZC0N-P^dsrNNUJhA%;Op@~?n?@SjGm(1gPa9VcOuBp
z-^8L~wb=DM%gcTpC&+G~3;P2QjUee6;Q+^%0u^c{Zw~idcP*JdAb4)JM6|e!X
zn7c3t3Kz~Q;un_kjDTg#MAO48B=7^3L&JWbq_ANt7U5;#Seqs=Gy+jetyrdJ5G{7)
zqc%ARP?OG#^LitVS{R+)Y$Ofl=_p0&8G@t=Au%K`F?|LY)qqS^j{*g!XoPnk}6V5OcjhoFz
z8fQ!}f+mJH=qWQt(*~}OEiWj-1IhXNvudgY$Ow3YhcWRC4g{XVNzSOpIitsbn*C!&$!VL4tq6jqGassRXCbXpuB9*<->xU&X6Np3)tIrag82vL
z&WPVNJK^f}!x@<~KX){=eEDll%ZMd)Cm6M^aumJth3S`zJ8tM&DPIM$1&o<>O
z9{Fax%~+SRt?AQ4Z|BY6P6q=MuhYwJu1=brB)?U&l_^~DSNZ98=p~_I@xa`pKPH+x
z$q{cP?M#XLbNl9fJ>8Erq@K#5-#yc|CIk8Y@PtXC@MPhJX+3MkZ++1bTJY=>?|Y_@
zwFgry^G?=RAkA0qO?~dO_ThIrP3ndd7hXG_v8py1yN&ElZl1BGDy`9Rdi3NWS9;D3
z?(!jBtzDTdyMNA7Z|q$CNr&^}TOIz3Y3qMkD)Me-?Z{pGQsr#AwEp*^O@mi=Hyutt
zM4d+)yY?a<4Iyq`ja&4=y{EPnEL+qP9$vrp<Xy$MwWK&SsFj?Ud6$AEArZEmxEWU-FJuWIqBQfErk}O{c)!iX*jjM
r@*41tl3S4UQ?17qtMhv*lN`t8yzKJs_cG-o?QiaM%(CyvdcE>*9=YN0
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-view-quilt.png b/Km_NodeGraphEN/icons/cil-view-quilt.png
new file mode 100644
index 0000000000000000000000000000000000000000..75b6c9f1d6507a905fe24d2293bf154c30870b5b
GIT binary patch
literal 2026
zcmbVNeQXnD94^9!Oopi77Cy##17x`Cee`+S7ZVT*Sojvh4${ayRIz+
z!w?x?fj__?gfAHx>Jm0Tf)fa!sQ8DGkg&xBMaB{hQ5hJ52!6fSc6FHX5ihyB_ult;
zpWpNQcz?H{X70?wf>8w)i>1(8?eW8Rv3Wn551*G3u3PXmM6G^Fw^*K@VBQ0~{_)o=
zmb~jypw6iC&EW(kX5~dC2&~DN3egtJ)QY6a3(J6k1VLDmU1-m-lPDsIE_8w2NBC4X
zh)C5dG*G)@Za`SEOkhQ{Vj40v$w7h`FnA;xi^@8ebfIZp4vx)f97WO)W0?!BGz}tk
zz8b`>XaKQW8B8E)C*okOBtsK6rW~ONlEn!pPTDYnfR<#0TaNLUj#tD=Q*l4T(Wg;Nv;5tyEm4L*sCF*Qdk>)9~DfZ<7A#Yrn+x|9ZrLJp_KwP@P7DBvIpVn8-@h$VAaHKG`b9#QT=
zom;-k01U0qm$T8YmRKxjLN}`Fp&QwN^o!O5DHY&;peu1r09Ex+W~u3o%DFYb8;TZC
zlxT0FYI-Fj6!aRIv_O(YC83w~*#JDe0bD3WPy|NUF@g$^4vuzm6pax!jvz8npCU@3
zRDV!A#o6GtK2TUPB5&{y1d9R}QnVNk9hPEz7~rZLMv+_?Ikys3G-w#Av-O?#y4^LJ
z5|W~DLHEy`j(Drw49PMKMp?^OQB*?G#l!J}c_>_{U{(VV(d@L;PdpyVa&~_r0wC#qsw87w
zS3*XD*Fa?$#_oYth~G=R&ez{x`opC%qp3gXcUA5Gk)92U5aH!8fE^Y`O=obk7iE%y
z|2JRhwLX2T7Y>`DIm~ro_>t@5K!(&B?9yZRU4#vOz&@|1GEjY{qqAb;h!=+EUt4mP
zac)8Fcg5Hc@8oGB3
zavM8%{D;xlx-(5TPw%xHx=^>B+Z7+~ZE2Ry4My^|-Trdi9c{>u6Sj1PXRL4bO)ITv
zJ5hd$-hDDA?rs}>ySDI>M5opTtnba5e063>UW#i!ZhpNbFc(#ua_N1Ikj3(J%EUvD%w){px+QGU4D3R}P)Pkwda
Y)f-Z)wBw5s^Ka~}n(H|{ed(Hi021T0c>n+a
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/icons/cil-window-restore.png b/Km_NodeGraphEN/icons/cil-window-restore.png
new file mode 100644
index 0000000000000000000000000000000000000000..302f25e248447de6a3fc4df26f7decd86cab6c72
GIT binary patch
literal 2026
zcmbVNe{2&~9PfrqwC(S$0SN+6g
zi)HMf90(dg|1*N9#BD%QLeQ3qs|ane%$b)`fmjC(ECeHR!i^8?{}jh$$&J_8{ghuV
zfl;}9wFVcjt_X;$>qM7?&zp4dQF6-4M^s6(;HPN(I7As
zEubi|;Y3vpOU4-FHC9|BCnP1Q&ls@*dVvAmI72ZMLD>n43D6FKa|#ScP^>^v8K_^8
z&8)VY_co~5)CR
zlX9>U2vII4I$vgDkeW(OMh6naMzWf!B*e%$Tr|f@6oDQr!SbA)2=SDIVC_6hIe`N(
zKr+id!&ENoD94T2gR~f~%8p_(mM$Ivh~}YiBS|06vc7BLDE5r{f0iJQ)lW-rPl
zh5T>6(rY97)-W73Lvxtx!ssK{$6*3dYp6?ad2rWZizRQf&+7@4AL%;P^K=og7W748
zf3;H!$8F#};QOU5`z$q{n!Y8wunYN1cPo?kCJJlU^`Ab~8Gog7{u^IyJ`-$>zHN^m
z@1|~EaScW9Z+2Zd<`|fL{=oTn$ctC6Pq`#)G4_zbFQ%?|b!AcVv)<u?+``@y{=(%g*Tq>2tnuwF7pH9kvnpd79^LrZZ_lsQxo<2t3M+S>
zS=4u+zwPY9YoBe|RM!90Yk8*+T|L<>ALu^z(AKtdmG3vT7I^gS=kk8!3y+>FT5)#f
zafjvGU$M?jM-Ey&+YaS72tTdqchY|xdT~SVg|4=~aUJ4Nuhlc-(uv7!FRi!sM6X>P
zoW@1P>wB9zoE>=ak?y+f6aPFv`RhPq>$_WH{Na@|L+?$T()`1avHax0xAMQ6Jw!39
zW~<@Q%~-#2smyz2%dXw)em{ZlZK*xe{?V9$L1IVO+M22Dp9CK_v^TqJ_oa4d1>BNF
zc$;{lx
zx!?KDch5byE4ZSrz&zay04VU+`x?=|RDW}_(Ki|QJVL)*x&Ad3fRefTYw$N#3M#Fz)a_vI-Z69o^x${wHsvKL0g
z`gR4bY+upDx3A;f0={H1R+(TCKon{mmWZ~-R5szkQ@AW@>%%0DrA)MS9(<|p5Ni$u
zF|VXR%x-ZIJZ*DfPPc`2*eI)G5ynuoo1|PMZ6zq0r5vo?iKQPLc~gWi+vuxJ`$9br
z9?>+JCCPX^Zi!nhlF~xbZa2bUNQNPh1);XZG%i8J)H$OFKB)4FC~Kk=!*oP0ByG?<
zIAS^yLR8Mc#?-V-NH8+N$s}!|^pH}90-v#yHz=(s=K@c{Rv3jbO+~hJ##W9pKySr4Fobi#^n-?W?ZOR%|;YPT99$A)uuKXl8sQ6HYhx-*@$S)(W8-BuL3zu
zQko>Gb#$YGqm(fQMUBl{CB_6PuFfB`0Qxu$dT@qfD1x#R6w^dIS(}SxYy@RxDQd(t
zAPHi)Z9G#u!`jfwF{UVG1Wx0gX)N$;SW==K3RsMCEs&IBEjX5uk@ZTgl7bu~cGj`u
zey=yENMW%RO{k4^)tJA=>!95Z2fgIlGk>7-+YRqP?Ps=sSoSe;taIA=x)9JQB
zMhMx%Eahti?G6E^R^DJu?f*r;%5=jnAO|Tw6K9X*}vrWbOZDMDy
z)}wpk-XAy0)$fYpd2neKOL0<=Vbml@Ctrt9x*FOK9>BW`D!EbC-X)
zxNq6KgG%5ObG`n|=ZEg)(X{~N)OWmmxxeyqU*Vdc3NE280B%rKRb5Sd-!m=G06?!i
z{Q_+Sp!_`YUo-P`^FDbxIb1fayPr8xzUTVT&NZN;kT(I>4*a8!XQ7)4>^kF^dDeB}
zNU&p(m+b~qnk^iYYv8}>nsOJ9|vgM_s`6-l?IivM}#xN0;dbJyVJYcCNoD8B2<+cs0-zh@|2k|A<{|yM&riE{bjl5?qiFj5NdSC%f5r{wr0Ey{
z71xsNox#q$m1D?9brTu(5Y=_jWXr
o$__+@Z`hh!dOE)89EAq^HkW{}!h=m!IO+g@%?jV~>b0GJ17mdJvH$=8
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/model.py b/Km_NodeGraphEN/model.py
index 8fdd3f8..4d6c031 100644
--- a/Km_NodeGraphEN/model.py
+++ b/Km_NodeGraphEN/model.py
@@ -1,11 +1,21 @@
-""" data managment - store data in file"""
+""" data managment"""
+# Import Nuke Libraries
+import nuke
+import nukescripts
+# Import built-in Libraries
import json
import os
+import re
+
+# Import local libs
+from constants import BOOKMARK_KNOB_PREFIX
class Settings():
+ """use file system to store settings data"""
+
@staticmethod
def Load():
pluginPath = os.path.dirname(__file__)
@@ -17,3 +27,133 @@ def Save(settingsData):
pluginPath = os.path.dirname(__file__)
with open(pluginPath+'/settings.json', 'w') as outfile:
json.dump(settingsData, outfile)
+
+
+
+class Bookmarks():
+ """using nuke settings knobs to store bookmarks data"""
+
+ @staticmethod
+ def Load():
+ """Load all bookmarks from nuke knobs"""
+ settingKnobs = nuke.root().knobs()
+ allBookmarksData = list()
+ for x in settingKnobs :
+ if BOOKMARK_KNOB_PREFIX in x:
+ nodeName = x.replace(BOOKMARK_KNOB_PREFIX, '')
+ bookmarkDataString = nuke.root().knob(x).tooltip()
+ bookmarkData = json.loads(bookmarkDataString) # convert data string to dictinary
+ allBookmarksData.append(bookmarkData)
+ # check if exist any bookmark for this postition
+ return allBookmarksData
+
+ @staticmethod
+ def Save():
+ """save & update all bookmarks\n
+ (remove all bookmarks knobs and save updated bookmarks as new knobs)"""
+
+ @staticmethod
+ def AddNewBookmark(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut=""):
+ """save new bookmark data as a new knob\n"""
+ bookmarkDataString = '{' +'"nodeName": "{}", "title": "{}", "index": "{}", "shortcut" : "{}" '.format(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut) + '}'
+ # bookmark data string sample : '{"nodeName": "NodeName","title": "", "index": "", "shortcut" : ""}'
+ knobName = BOOKMARK_KNOB_PREFIX + bookmarkNodeName
+ nuke.root().addKnob(nuke.EvalString_Knob(knobName, "Km Nodegraph Bookmark Data"))
+ #nuke.root().knob(knobName).setValue(bookmarkDataString)
+ nuke.root().knob(knobName).setTooltip(bookmarkDataString) # for store data in nuke knob: instead of setValue function we use setTooltip function, so we can see and edit data string in nuke knob edit window
+ nuke.root().knob(knobName).setVisible(False)
+
+ @staticmethod
+ def UpdateBookmarkData(bookmarkData) :
+ bookmarkDataString = '{' +'"nodeName": "{}", "title": "{}", "index": "{}", "shortcut" : "{}" '.format(bookmarkData["nodeName"],bookmarkData["title"],bookmarkData["index"],bookmarkData["shortcut"]) + '}'
+ knobName = BOOKMARK_KNOB_PREFIX + bookmarkData["nodeName"]
+ nuke.root().knob(knobName).setTooltip(bookmarkDataString)
+
+ @staticmethod
+ def getBookmarkData(nodeName):
+ """return bookmark data dict"""
+ knobName = BOOKMARK_KNOB_PREFIX + nodeName
+ bookmarkDataString = nuke.root().knob(knobName).tooltip()
+ bookmarkData = json.loads(bookmarkDataString) # convert data string to dictinary
+ return bookmarkData
+
+ @staticmethod
+ def removeABookmark(nodeName):
+ knobNameToRemove = BOOKMARK_KNOB_PREFIX + nodeName
+ nuke.root().removeKnob(nuke.root().knobs()[knobNameToRemove])
+
+ @staticmethod
+ def ResetBookmarks():
+ """remove all bookmarks in current project"""
+ settingKnobs = nuke.root().knobs()
+ for x in settingKnobs :
+ if BOOKMARK_KNOB_PREFIX in x:
+ nuke.root().removeKnob(nuke.root().knobs()[x])
+
+ @staticmethod
+ def getTotalBookmarksCount():
+ settings = Settings.Load()
+ numberOfBookmarks = int(settings["bookmarksGridColumns"]) * int(settings["bookmarksGridRows"])
+ return numberOfBookmarks
+
+
+
+class BookmarkTemplates :
+ """store bookmarks templates data in files"""
+
+ @staticmethod
+ def Load():
+ templatesPath = os.path.dirname(__file__)+"/templates/"
+ templatesFiles = os.listdir(templatesPath)
+ templatesList = list()
+ for templateFile in templatesFiles :
+ if (templateFile.endswith(".json")) :
+ with open(templatesPath+templateFile) as json_file:
+ templatesList.append(json.load(json_file))
+
+ return templatesList
+
+ @staticmethod
+ def AddNew(templateName):
+ templateData = {
+ "templateName" : templateName ,
+ "fileName" : BookmarkTemplates.get_valid_filename(templateName) + '.json' ,
+ "bookmarks" : {
+ 1 : {"nodeName": "", "title": "", "index": "", "shortcut": ""}
+ }
+ }
+ bookmarksData = Bookmarks.Load()
+ counter = 1
+ for item in bookmarksData :
+ templateData['bookmarks'][counter] = {"nodeName": item["nodeName"], "title": item["title"], "index": item["index"], "shortcut": item["shortcut"]}
+ counter += 1
+
+ templatesPath = os.path.dirname(__file__)+"/templates/"
+ with open(templatesPath + templateData["fileName"], 'w') as outfile:
+ json.dump(templateData, outfile)
+
+ @staticmethod
+ def DeleteTemplateFile(templateFileName):
+ templateFilePath = os.path.dirname(__file__)+"/templates/" + templateFileName
+ os.remove(templateFilePath)
+
+ @staticmethod
+ def GetATemplateData(templateFileName):
+ templatesFilePath = os.path.dirname(__file__)+"/templates/"+templateFileName
+ if os.path.exists(templatesFilePath) :
+ with open(templatesFilePath) as json_file:
+ return json.load(json_file)
+
+
+ @staticmethod
+ def get_valid_filename(s):
+ """
+ Return the given string converted to a string that can be used for a clean
+ filename. Remove leading and trailing spaces; convert other spaces to
+ underscores; and remove anything that is not an alphanumeric, dash,
+ underscore, or dot.
+ >>> get_valid_filename("john's portrait in 2004.jpg")
+ 'johns_portrait_in_2004.jpg'
+ """
+ s = str(s).strip().replace(' ', '_')
+ return re.sub(r'(?u)[^-\w.]', '', s)
\ No newline at end of file
diff --git a/Km_NodeGraphEN/settings - Copy.json b/Km_NodeGraphEN/settings - Copy.json
new file mode 100644
index 0000000..bdf14a2
--- /dev/null
+++ b/Km_NodeGraphEN/settings - Copy.json
@@ -0,0 +1 @@
+{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "","templateNameForGlobalOverride": "None", "bookmarksGridColumns": "3", "bookmarksGridRows": "3","bookmarksButtonWidth": "110","bookmarksButtonHeight": "50"}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/settings.json b/Km_NodeGraphEN/settings.json
index b867fd6..2448e7d 100644
--- a/Km_NodeGraphEN/settings.json
+++ b/Km_NodeGraphEN/settings.json
@@ -1 +1 @@
-{"zoomEffect": "Disable", "shakeEffect": "Enable", "shortcut": "shift+e"}
\ No newline at end of file
+{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1.0", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/1Up_project.json b/Km_NodeGraphEN/templates/1Up_project.json
new file mode 100644
index 0000000..bb9df35
--- /dev/null
+++ b/Km_NodeGraphEN/templates/1Up_project.json
@@ -0,0 +1 @@
+{"templateName": "1Up project", "fileName": "1Up_project.json", "bookmarks": {"1": {"nodeName": "BackdropNode13", "title": "key", "index": "9", "shortcut": ""}, "2": {"nodeName": "BackdropNode18", "title": "core", "index": "0", "shortcut": ""}, "3": {"nodeName": "BackdropNode2", "title": "MOV Render", "index": "8", "shortcut": ""}, "4": {"nodeName": "BackdropNode12", "title": "Lighting play", "index": "6", "shortcut": ""}, "5": {"nodeName": "BackdropNode1", "title": "DPX Render", "index": "7", "shortcut": ""}, "6": {"nodeName": "BackdropNode3", "title": "BackdropNode3", "index": "1", "shortcut": ""}, "7": {"nodeName": "BackdropNode14", "title": "BG", "index": "2", "shortcut": ""}, "8": {"nodeName": "BackdropNode4", "title": "add window glass", "index": "3", "shortcut": ""}, "9": {"nodeName": "BackdropNode22", "title": "despill", "index": "4", "shortcut": ""}, "10": {"nodeName": "BackdropNode28", "title": "Lightwrap", "index": "5", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/New folder/frm_proj.json b/Km_NodeGraphEN/templates/New folder/frm_proj.json
new file mode 100644
index 0000000..e31db8d
--- /dev/null
+++ b/Km_NodeGraphEN/templates/New folder/frm_proj.json
@@ -0,0 +1 @@
+{"templateName": "frm proj", "fileName": "frm_proj.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test22", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy21", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer122", "index": "6", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/New folder/key.json b/Km_NodeGraphEN/templates/New folder/key.json
new file mode 100644
index 0000000..26b3da9
--- /dev/null
+++ b/Km_NodeGraphEN/templates/New folder/key.json
@@ -0,0 +1 @@
+{"templateName": "key", "fileName": "key.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1555", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test555", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy555", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer15555", "index": "6", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/New folder/test.json b/Km_NodeGraphEN/templates/New folder/test.json
new file mode 100644
index 0000000..30243e3
--- /dev/null
+++ b/Km_NodeGraphEN/templates/New folder/test.json
@@ -0,0 +1 @@
+{"templateName": "test", "fileName": "test.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy1", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer1", "index": "6", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/New folder/test_with_space.json b/Km_NodeGraphEN/templates/New folder/test_with_space.json
new file mode 100644
index 0000000..3dce0c9
--- /dev/null
+++ b/Km_NodeGraphEN/templates/New folder/test_with_space.json
@@ -0,0 +1 @@
+{"templateName": "test with space", "fileName": "test_with_space.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy1", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer1", "index": "6", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/current_proj.json b/Km_NodeGraphEN/templates/current_proj.json
new file mode 100644
index 0000000..bdf77d6
--- /dev/null
+++ b/Km_NodeGraphEN/templates/current_proj.json
@@ -0,0 +1 @@
+{"templateName": "current proj", "fileName": "current_proj.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test", "index": "2", "shortcut": ""}, "3": {"nodeName": "Viewer1", "title": "Viewer1", "index": "6", "shortcut": ""}, "4": {"nodeName": "Grade2", "title": "Grade2", "index": "8", "shortcut": ""}, "5": {"nodeName": "BackdropNode2", "title": "BackdropNode2", "index": "3", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/divar_window_shots.json b/Km_NodeGraphEN/templates/divar_window_shots.json
new file mode 100644
index 0000000..873e5bc
--- /dev/null
+++ b/Km_NodeGraphEN/templates/divar_window_shots.json
@@ -0,0 +1 @@
+{"bookmarks": {"1": {"index": "8", "nodeName": "DasGrain1", "shortcut": "", "title": "dasgrain"}, "2": {"index": "0", "nodeName": "Dot12", "shortcut": "", "title": "FG"}, "3": {"index": "1", "nodeName": "Keymix3", "shortcut": "", "title": "screen correction"}, "4": {"index": "3", "nodeName": "IBKGizmoV3_1", "shortcut": "", "title": "IBKGizmoV3_1"}, "5": {"index": "5", "nodeName": "Dot3", "shortcut": "", "title": "BG"}, "6": {"index": "6", "nodeName": "bm_Lightwrap", "shortcut": "", "title": "bm_Lightwrap"}, "7": {"index": "7", "nodeName": "Write_dpx", "shortcut": "", "title": "Write "}}, "fileName": "divar_window_shots.json", "templateName": "divar window shots"}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/frm_proj.json b/Km_NodeGraphEN/templates/frm_proj.json
new file mode 100644
index 0000000..e31db8d
--- /dev/null
+++ b/Km_NodeGraphEN/templates/frm_proj.json
@@ -0,0 +1 @@
+{"templateName": "frm proj", "fileName": "frm_proj.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test22", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy21", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer122", "index": "6", "shortcut": ""}}}
\ No newline at end of file
diff --git a/Km_NodeGraphEN/templates/test_with_space.json b/Km_NodeGraphEN/templates/test_with_space.json
new file mode 100644
index 0000000..3dce0c9
--- /dev/null
+++ b/Km_NodeGraphEN/templates/test_with_space.json
@@ -0,0 +1 @@
+{"templateName": "test with space", "fileName": "test_with_space.json", "bookmarks": {"1": {"nodeName": "CheckerBoard1", "title": "CheckerBoard1", "index": "0", "shortcut": ""}, "2": {"nodeName": "BackdropNode1", "title": "test", "index": "2", "shortcut": ""}, "3": {"nodeName": "Copy1", "title": "Copy1", "index": "7", "shortcut": ""}, "4": {"nodeName": "Viewer1", "title": "Viewer1", "index": "6", "shortcut": ""}}}
\ No newline at end of file
From d52f6b45379d82ff75f181bce327112c85d8da50 Mon Sep 17 00:00:00 2001
From: hkaramian <93508495+hkaramian@users.noreply.github.com>
Date: Tue, 14 Dec 2021 19:30:33 +0330
Subject: [PATCH 02/11] v2.0
---
Dev-Files/panel_v02 - Settings.ui | 56 +-
Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py | 36 +-
Km_NodeGraphEN/Ui_Settings.py | 719 +++++++++++++++----
Km_NodeGraphEN/icons/cil-check-alt.png | Bin 0 -> 1773 bytes
Km_NodeGraphEN/icons/cil-window-minimize.png | Bin 0 -> 1704 bytes
Km_NodeGraphEN/icons/cil-x.png | Bin 0 -> 1976 bytes
Km_NodeGraphEN/settings.json | 2 +-
7 files changed, 665 insertions(+), 148 deletions(-)
create mode 100644 Km_NodeGraphEN/icons/cil-check-alt.png
create mode 100644 Km_NodeGraphEN/icons/cil-window-minimize.png
create mode 100644 Km_NodeGraphEN/icons/cil-x.png
diff --git a/Dev-Files/panel_v02 - Settings.ui b/Dev-Files/panel_v02 - Settings.ui
index da89148..0a740ae 100644
--- a/Dev-Files/panel_v02 - Settings.ui
+++ b/Dev-Files/panel_v02 - Settings.ui
@@ -45,7 +45,6 @@ QLineEdit {
background-color: rgb(40, 43, 50);
border-radius: 5px;
border: 2px solid rgb(40, 43, 50);
- padding-left: 10px;
}
QLineEdit:hover {
border: 2px solid rgb(64, 71, 88);
@@ -145,7 +144,7 @@ QCheckBox::indicator:hover {
QCheckBox::indicator:checked {
background: 3px solid rgb(52, 59, 72);
border: 3px solid rgb(52, 59, 72);
- background-image: url(:/16x16/icons/16x16/cil-check-alt.png);
+ background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);
}
/* RADIO BUTTON */
@@ -381,7 +380,7 @@ QSlider::handle:vertical:pressed {
- Km NodeGraph Easy Navigate - Settings
+ Km NodeGraph Easy Navigate
5
@@ -466,8 +465,8 @@ QPushButton:pressed {
-
- :/16x16/icons/16x16/cil-window-minimize.png:/16x16/icons/16x16/cil-window-minimize.png
+
+ ../Km_NodeGraphEN/icons/cil-window-minimize.png../Km_NodeGraphEN/icons/cil-window-minimize.png
@@ -511,8 +510,8 @@ QPushButton:pressed {
-
- :/16x16/icons/16x16/cil-x.png:/16x16/icons/16x16/cil-x.png
+
+ ../Km_NodeGraphEN/icons/cil-x.png../Km_NodeGraphEN/icons/cil-x.png
@@ -669,6 +668,9 @@ border-radius: 5px;
shift+e
+
+ Qt::AlignCenter
+
@@ -727,9 +729,9 @@ width : 2px
340
- 160
+ 175
101
- 20
+ 30
@@ -745,9 +747,9 @@ width : 2px
450
- 70
+ 64
61
- 20
+ 30
@@ -766,9 +768,9 @@ width : 2px
340
- 70
+ 64
71
- 20
+ 30
@@ -784,9 +786,9 @@ width : 2px
450
- 100
+ 101
61
- 20
+ 30
@@ -805,9 +807,9 @@ width : 2px
340
- 130
+ 138
101
- 20
+ 30
@@ -823,9 +825,9 @@ width : 2px
450
- 130
+ 138
61
- 20
+ 30
@@ -863,9 +865,9 @@ width : 2px
450
- 160
+ 175
61
- 20
+ 30
@@ -884,9 +886,9 @@ width : 2px
340
- 100
+ 101
71
- 20
+ 30
@@ -1290,7 +1292,7 @@ QPushButton:pressed {
20
- 500
+ 504
571
36
@@ -1303,6 +1305,9 @@ QPushButton:pressed {
Segoe UI Semibold
+
+ color: rgb(200, 200, 200);
+
Km NodeGraph Easy Navigate v2.0
@@ -1330,6 +1335,9 @@ QPushButton:pressed {
Segoe UI Semibold
+
+ color: rgb(200, 200, 200);
+
By Hossein Karamian
diff --git a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
index a6afed8..230b6d5 100644
--- a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
+++ b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
@@ -501,19 +501,51 @@ def __init__(self,nodeName,type,index):
+# url(./icons
+#
+
+
+
class SettingsWindow(QMainWindow,Ui_SettingsWindowUI):
def __init__(self):
super(SettingsWindow, self).__init__()
self.setupUi(self)
+
+ #self.setWindowFlags(Qt.WindowStaysOnTopHint)
+
+ ## REMOVE TITLE BAR
+ self.setWindowFlags(Qt.FramelessWindowHint)
+ self.setAttribute(Qt.WA_TranslucentBackground)
+
+ # opacity
+ # self.op_effect=QGraphicsOpacityEffect(self)
+ # self.opacity_value = 0.92
+ # self.op_effect.setOpacity(self.opacity_value)
+ # self.setGraphicsEffect(self.op_effect)
+
+ ## DROP SHADOW EFFECT
+ self.shadow = QGraphicsDropShadowEffect(self)
+ self.shadow.setBlurRadius(20)
+ self.shadow.setXOffset(0)
+ self.shadow.setYOffset(0)
+ self.shadow.setColor(QColor(0, 0, 0, 100))
+ self.frame.setGraphicsEffect(self.shadow)
+
self.settings = model.Settings().Load()
# Setup UI
self.horizontalSlider_ZoomScale.setMinimum(5)
self.horizontalSlider_ZoomScale.setMaximum(30)
self.horizontalSlider_ZoomScale.setSingleStep(1)
self.horizontalSlider_ZoomScale.valueChanged.connect(self.SliderLabelUpdate)
- self.label_credit.setText('''By Hossein Karamian''')
+ self.label_credit.setText('''By Hossein Karamian''')
self.label_credit.setOpenExternalLinks(True)
- self.setWindowFlags(Qt.WindowStaysOnTopHint)
+ checkBoxStyle = 'QCheckBox::indicator:checked {background-image: url('+os.path.dirname(__file__).replace(os.sep,'/')+'/icons/cil-check-alt.png);}'
+ self.checkBox_zoom_effect.setStyleSheet(checkBoxStyle)
+ self.checkBox_shake_effect.setStyleSheet(checkBoxStyle)
+ self.checkBox_fade_effect.setStyleSheet(checkBoxStyle)
+
+
+
# Signals
self.pushButton_save.clicked.connect(self.applySettings)
self.pushButton_setDefault.clicked.connect(self.SetDefault)
diff --git a/Km_NodeGraphEN/Ui_Settings.py b/Km_NodeGraphEN/Ui_Settings.py
index 0599527..7a2d516 100644
--- a/Km_NodeGraphEN/Ui_Settings.py
+++ b/Km_NodeGraphEN/Ui_Settings.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - SettingsmtIZoa.ui'
+## Form generated from reading UI file 'panel_v02 - SettingscCNRlz.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -15,113 +15,490 @@
QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
+import os
class Ui_SettingsWindowUI(object):
def setupUi(self, SettingsWindowUI):
if not SettingsWindowUI.objectName():
SettingsWindowUI.setObjectName(u"SettingsWindowUI")
- SettingsWindowUI.resize(573, 439)
+ SettingsWindowUI.resize(633, 560)
+ font = QFont()
+ font.setFamily(u"Segoe UI")
+ SettingsWindowUI.setFont(font)
+ SettingsWindowUI.setStyleSheet(u"color: rgb(223, 223, 223);")
self.centralwidget = QWidget(SettingsWindowUI)
self.centralwidget.setObjectName(u"centralwidget")
- self.groupBox = QGroupBox(self.centralwidget)
- self.groupBox.setObjectName(u"groupBox")
- self.groupBox.setGeometry(QRect(20, 10, 531, 251))
- self.checkBox_fade_effect = QCheckBox(self.groupBox)
+ self.centralwidget.setStyleSheet(u"")
+ self.frame = QFrame(self.centralwidget)
+ self.frame.setObjectName(u"frame")
+ self.frame.setGeometry(QRect(10, 10, 611, 541))
+ self.frame.setStyleSheet(u"QFrame {\n"
+" background-color: rgb(61, 64, 71);\n"
+" border-radius : 10px;\n"
+"}\n"
+"\n"
+"/* LINE EDIT */\n"
+"QLineEdit {\n"
+" background-color: rgb(40, 43, 50);\n"
+" border-radius: 5px;\n"
+" border: 2px solid rgb(40, 43, 50);\n"
+"}\n"
+"QLineEdit:hover {\n"
+" border: 2px solid rgb(64, 71, 88);\n"
+"}\n"
+"QLineEdit:focus {\n"
+" border: 2px solid rgb(91, 101, 124);\n"
+"}\n"
+"\n"
+"/* SCROLL BARS */\n"
+"QScrollBar:horizontal {\n"
+" border: none;\n"
+" background: rgb(52, 59, 72);\n"
+" height: 14px;\n"
+" margin: 0px 21px 0 21px;\n"
+" border-radius: 0px;\n"
+"}\n"
+"QScrollBar::handle:horizontal {\n"
+" background: rgb(85, 170, 255);\n"
+" min-width: 25px;\n"
+" border-radius: 7px\n"
+"}\n"
+"QScrollBar::add-line:horizontal {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-right-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: right;\n"
+" subcontrol-origin: margin;\n"
+"}\n"
+"QScrollBar::sub-line:horizontal {\n"
+" border"
+ ": none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-bottom-left-radius: 7px;\n"
+" subcontrol-position: left;\n"
+" subcontrol-origin: margin;\n"
+"}\n"
+"QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+"QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+" QScrollBar:vertical {\n"
+" border: none;\n"
+" background: rgb(52, 59, 72);\n"
+" width: 14px;\n"
+" margin: 21px 0 21px 0;\n"
+" border-radius: 0px;\n"
+" }\n"
+" QScrollBar::handle:vertical { \n"
+" background: rgb(85, 170, 255);\n"
+" min-height: 25px;\n"
+" border-radius: 7px\n"
+" }\n"
+" QScrollBar::add-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-bottom-left-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: bottom;\n"
+" subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar:"
+ ":sub-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-top-right-radius: 7px;\n"
+" subcontrol-position: top;\n"
+" subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+" QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+"/* CHECKBOX */\n"
+"QCheckBox::indicator {\n"
+" border: 3px solid rgb(52, 59, 72);\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QCheckBox::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QCheckBox::indicator:checked {\n"
+" background: 3px solid rgb(52, 59, 72);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+" background-image: url(./icons/cil-check-alt.png);\n"
+"}\n"
+"\n"
+"/* RADIO BUTTON */\n"
+"QRadioButton::indicator {\n"
+" border: 3px solid rgb(52, 59, 72"
+ ");\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QRadioButton::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QRadioButton::indicator:checked {\n"
+" background: 3px solid rgb(94, 106, 130);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+"}\n"
+"\n"
+"/* COMBOBOX */\n"
+"QComboBox{\n"
+" background-color: rgb(27, 29, 35);\n"
+" border-radius: 5px;\n"
+" border: 2px solid rgb(27, 29, 35);\n"
+" padding: 5px;\n"
+" padding-left: 10px;\n"
+"}\n"
+"QComboBox:hover{\n"
+" border: 2px solid rgb(64, 71, 88);\n"
+"}\n"
+"QComboBox::drop-down {\n"
+" subcontrol-origin: padding;\n"
+" subcontrol-position: top right;\n"
+" width: 25px; \n"
+" border-left-width: 3px;\n"
+" border-left-color: rgba(39, 44, 54, 150);\n"
+" border-left-style: solid;\n"
+" border-top-right-radius: 3px;\n"
+" border-bottom-right-radius: 3px; \n"
+" background-image: url(:/16x16/icons/16x16/cil-arrow-bottom.png);\n"
+" background-position: center;\n"
+" background-repeat: no-reperat;"
+ "\n"
+" }\n"
+"QComboBox QAbstractItemView {\n"
+" color: rgb(85, 170, 255); \n"
+" background-color: rgb(27, 29, 35);\n"
+" padding: 10px;\n"
+" selection-background-color: rgb(39, 44, 54);\n"
+"}\n"
+"\n"
+"/* SLIDERS */\n"
+"QSlider::groove:horizontal {\n"
+" border-radius: 9px;\n"
+" height: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QSlider::groove:horizontal:hover {\n"
+" background-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:horizontal {\n"
+" background-color: rgb(255, 212, 95);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:horizontal:hover {\n"
+" background-color: rgb(255, 222, 110);\n"
+"}\n"
+"QSlider::handle:horizontal:pressed {\n"
+" background-color: rgb(255, 212, 95);\n"
+"}\n"
+"\n"
+"QSlider::groove:vertical {\n"
+" border-radius: 9px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QSlider::groove:vertical:hover {\n"
+" backgrou"
+ "nd-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:vertical {\n"
+" background-color: rgb(85, 170, 255);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:vertical:hover {\n"
+" background-color: rgb(105, 180, 255);\n"
+"}\n"
+"QSlider::handle:vertical:pressed {\n"
+" background-color: rgb(65, 130, 195);\n"
+"}\n"
+"\n"
+"")
+ self.frame.setFrameShape(QFrame.StyledPanel)
+ self.frame.setFrameShadow(QFrame.Raised)
+ self.frame_top_btns = QFrame(self.frame)
+ self.frame_top_btns.setObjectName(u"frame_top_btns")
+ self.frame_top_btns.setGeometry(QRect(0, 0, 611, 42))
+ self.frame_top_btns.setMaximumSize(QSize(16777215, 42))
+ self.frame_top_btns.setStyleSheet(u"background-color: rgb(40, 43, 50);")
+ self.frame_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_4 = QHBoxLayout(self.frame_top_btns)
+ self.horizontalLayout_4.setSpacing(0)
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
+ self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.frame_label_top_btns = QFrame(self.frame_top_btns)
+ self.frame_label_top_btns.setObjectName(u"frame_label_top_btns")
+ sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.frame_label_top_btns.sizePolicy().hasHeightForWidth())
+ self.frame_label_top_btns.setSizePolicy(sizePolicy)
+ self.frame_label_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_label_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_10 = QHBoxLayout(self.frame_label_top_btns)
+ self.horizontalLayout_10.setSpacing(0)
+ self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
+ self.horizontalLayout_10.setContentsMargins(5, 0, 10, 0)
+ self.label_16 = QLabel(self.frame_label_top_btns)
+ self.label_16.setObjectName(u"label_16")
+ self.label_16.setMaximumSize(QSize(3, 16777215))
+
+ self.horizontalLayout_10.addWidget(self.label_16)
+
+ self.label_8 = QLabel(self.frame_label_top_btns)
+ self.label_8.setObjectName(u"label_8")
+ self.label_8.setMinimumSize(QSize(20, 0))
+ self.label_8.setMaximumSize(QSize(20, 20))
+ self.label_8.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-settings.png"))
+ self.label_8.setScaledContents(True)
+ self.label_8.setAlignment(Qt.AlignCenter)
+ self.label_8.setMargin(0)
+
+ self.horizontalLayout_10.addWidget(self.label_8)
+
+ self.label_title_bar_top = QLabel(self.frame_label_top_btns)
+ self.label_title_bar_top.setObjectName(u"label_title_bar_top")
+ font1 = QFont()
+ font1.setFamily(u"Segoe UI Semibold")
+ font1.setPointSize(11)
+ font1.setBold(False)
+ font1.setWeight(50)
+ self.label_title_bar_top.setFont(font1)
+ self.label_title_bar_top.setStyleSheet(u"background: transparent;\n"
+"")
+ self.label_title_bar_top.setMargin(5)
+
+ self.horizontalLayout_10.addWidget(self.label_title_bar_top)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_label_top_btns)
+
+ self.frame_btns_right = QFrame(self.frame_top_btns)
+ self.frame_btns_right.setObjectName(u"frame_btns_right")
+ sizePolicy.setHeightForWidth(self.frame_btns_right.sizePolicy().hasHeightForWidth())
+ self.frame_btns_right.setSizePolicy(sizePolicy)
+ self.frame_btns_right.setMaximumSize(QSize(120, 16777215))
+ self.frame_btns_right.setFrameShape(QFrame.NoFrame)
+ self.frame_btns_right.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_5 = QHBoxLayout(self.frame_btns_right)
+ self.horizontalLayout_5.setSpacing(0)
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
+ self.btn_minimize = QPushButton(self.frame_btns_right)
+ self.btn_minimize.setObjectName(u"btn_minimize")
+ sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.btn_minimize.sizePolicy().hasHeightForWidth())
+ self.btn_minimize.setSizePolicy(sizePolicy1)
+ self.btn_minimize.setMinimumSize(QSize(40, 0))
+ self.btn_minimize.setMaximumSize(QSize(40, 16777215))
+ self.btn_minimize.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(85, 170, 255);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(os.path.dirname(__file__)+"/icons/cil-window-minimize.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.btn_minimize.setIcon(icon)
+
+ self.horizontalLayout_5.addWidget(self.btn_minimize)
+
+ self.btn_close = QPushButton(self.frame_btns_right)
+ self.btn_close.setObjectName(u"btn_close")
+ sizePolicy1.setHeightForWidth(self.btn_close.sizePolicy().hasHeightForWidth())
+ self.btn_close.setSizePolicy(sizePolicy1)
+ self.btn_close.setMinimumSize(QSize(40, 0))
+ self.btn_close.setMaximumSize(QSize(40, 16777215))
+ self.btn_close.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(52, 59, 72);\n"
+" border-radius : 10px;\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(85, 170, 255);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(os.path.dirname(__file__)+"/icons/cil-x.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.btn_close.setIcon(icon1)
+
+ self.horizontalLayout_5.addWidget(self.btn_close)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_btns_right, 0, Qt.AlignRight)
+
+ self.frame_2 = QFrame(self.frame)
+ self.frame_2.setObjectName(u"frame_2")
+ self.frame_2.setGeometry(QRect(20, 59, 571, 271))
+ self.frame_2.setStyleSheet(u"QFrame {\n"
+"background-color: rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"")
+ self.frame_2.setFrameShape(QFrame.StyledPanel)
+ self.frame_2.setFrameShadow(QFrame.Raised)
+ self.label_ZoomScale = QLabel(self.frame_2)
+ self.label_ZoomScale.setObjectName(u"label_ZoomScale")
+ self.label_ZoomScale.setGeometry(QRect(180, 220, 41, 20))
+ self.label_ZoomScale.setFont(font)
+ self.checkBox_fade_effect = QCheckBox(self.frame_2)
self.checkBox_fade_effect.setObjectName(u"checkBox_fade_effect")
- self.checkBox_fade_effect.setGeometry(QRect(40, 100, 161, 17))
+ self.checkBox_fade_effect.setGeometry(QRect(50, 110, 211, 25))
+ self.checkBox_fade_effect.setFont(font)
self.checkBox_fade_effect.setChecked(True)
- self.label = QLabel(self.groupBox)
+ self.checkBox_shake_effect = QCheckBox(self.frame_2)
+ self.checkBox_shake_effect.setObjectName(u"checkBox_shake_effect")
+ self.checkBox_shake_effect.setGeometry(QRect(50, 76, 161, 25))
+ self.checkBox_shake_effect.setFont(font)
+ self.checkBox_shake_effect.setChecked(True)
+ self.checkBox_zoom_effect = QCheckBox(self.frame_2)
+ self.checkBox_zoom_effect.setObjectName(u"checkBox_zoom_effect")
+ self.checkBox_zoom_effect.setGeometry(QRect(50, 40, 141, 25))
+ self.checkBox_zoom_effect.setFont(font)
+ self.horizontalSlider_ZoomScale = QSlider(self.frame_2)
+ self.horizontalSlider_ZoomScale.setObjectName(u"horizontalSlider_ZoomScale")
+ self.horizontalSlider_ZoomScale.setGeometry(QRect(50, 220, 111, 22))
+ self.horizontalSlider_ZoomScale.setStyleSheet(u"")
+ self.horizontalSlider_ZoomScale.setMinimum(5)
+ self.horizontalSlider_ZoomScale.setMaximum(20)
+ self.horizontalSlider_ZoomScale.setSingleStep(1)
+ self.horizontalSlider_ZoomScale.setValue(10)
+ self.horizontalSlider_ZoomScale.setOrientation(Qt.Horizontal)
+ self.lineEdit_shortcut = QLineEdit(self.frame_2)
+ self.lineEdit_shortcut.setObjectName(u"lineEdit_shortcut")
+ self.lineEdit_shortcut.setGeometry(QRect(107, 147, 91, 30))
+ self.lineEdit_shortcut.setFont(font)
+ self.lineEdit_shortcut.setStyleSheet(u"")
+ self.lineEdit_shortcut.setAlignment(Qt.AlignCenter)
+ self.label_6 = QLabel(self.frame_2)
+ self.label_6.setObjectName(u"label_6")
+ self.label_6.setGeometry(QRect(50, 151, 51, 20))
+ self.label_6.setFont(font)
+ self.label = QLabel(self.frame_2)
self.label.setObjectName(u"label")
- self.label.setGeometry(QRect(40, 180, 161, 20))
- self.line = QFrame(self.groupBox)
+ self.label.setGeometry(QRect(50, 190, 181, 20))
+ self.label.setFont(font)
+ self.line = QFrame(self.frame_2)
self.line.setObjectName(u"line")
- self.line.setGeometry(QRect(230, 60, 16, 131))
+ self.line.setGeometry(QRect(280, 60, 1, 180))
+ self.line.setStyleSheet(u"background-color: rgb(78, 85, 106);\n"
+"width : 2px")
self.line.setFrameShape(QFrame.VLine)
self.line.setFrameShadow(QFrame.Sunken)
- self.horizontalSlider_ZoomScale = QSlider(self.groupBox)
- self.horizontalSlider_ZoomScale.setObjectName(u"horizontalSlider_ZoomScale")
- self.horizontalSlider_ZoomScale.setGeometry(QRect(40, 210, 111, 22))
- self.horizontalSlider_ZoomScale.setMinimum(1)
- self.horizontalSlider_ZoomScale.setMaximum(3)
- self.horizontalSlider_ZoomScale.setValue(2)
- self.horizontalSlider_ZoomScale.setOrientation(Qt.Horizontal)
- self.checkBox_shake_effect = QCheckBox(self.groupBox)
- self.checkBox_shake_effect.setObjectName(u"checkBox_shake_effect")
- self.checkBox_shake_effect.setGeometry(QRect(40, 70, 91, 17))
- self.checkBox_shake_effect.setChecked(True)
- self.label_6 = QLabel(self.groupBox)
- self.label_6.setObjectName(u"label_6")
- self.label_6.setGeometry(QRect(40, 140, 51, 20))
- self.lineEdit_shortcut = QLineEdit(self.groupBox)
- self.lineEdit_shortcut.setObjectName(u"lineEdit_shortcut")
- self.lineEdit_shortcut.setGeometry(QRect(100, 140, 91, 20))
- self.checkBox_zoom_effect = QCheckBox(self.groupBox)
- self.checkBox_zoom_effect.setObjectName(u"checkBox_zoom_effect")
- self.checkBox_zoom_effect.setGeometry(QRect(40, 40, 91, 17))
- self.label_ZoomScale = QLabel(self.groupBox)
- self.label_ZoomScale.setObjectName(u"label_ZoomScale")
- self.label_ZoomScale.setGeometry(QRect(170, 210, 31, 20))
- self.label_12 = QLabel(self.groupBox)
- self.label_12.setObjectName(u"label_12")
- self.label_12.setGeometry(QRect(340, 30, 121, 20))
- self.lineEdit_columnn = QLineEdit(self.groupBox)
+ self.label_11 = QLabel(self.frame_2)
+ self.label_11.setObjectName(u"label_11")
+ self.label_11.setGeometry(QRect(340, 175, 101, 30))
+ self.label_11.setFont(font)
+ self.lineEdit_columnn = QLineEdit(self.frame_2)
self.lineEdit_columnn.setObjectName(u"lineEdit_columnn")
- self.lineEdit_columnn.setGeometry(QRect(390, 60, 61, 20))
+ self.lineEdit_columnn.setGeometry(QRect(450, 64, 61, 30))
+ self.lineEdit_columnn.setFont(font)
self.lineEdit_columnn.setAlignment(Qt.AlignCenter)
- self.lineEdit_Rows = QLineEdit(self.groupBox)
+ self.label_5 = QLabel(self.frame_2)
+ self.label_5.setObjectName(u"label_5")
+ self.label_5.setGeometry(QRect(340, 64, 71, 30))
+ self.label_5.setFont(font)
+ self.lineEdit_Rows = QLineEdit(self.frame_2)
self.lineEdit_Rows.setObjectName(u"lineEdit_Rows")
- self.lineEdit_Rows.setGeometry(QRect(390, 90, 61, 20))
+ self.lineEdit_Rows.setGeometry(QRect(450, 101, 61, 30))
+ self.lineEdit_Rows.setFont(font)
self.lineEdit_Rows.setAlignment(Qt.AlignCenter)
- self.label_5 = QLabel(self.groupBox)
- self.label_5.setObjectName(u"label_5")
- self.label_5.setGeometry(QRect(300, 60, 71, 20))
- self.label_13 = QLabel(self.groupBox)
- self.label_13.setObjectName(u"label_13")
- self.label_13.setGeometry(QRect(300, 90, 71, 20))
- self.label_10 = QLabel(self.groupBox)
+ self.label_10 = QLabel(self.frame_2)
self.label_10.setObjectName(u"label_10")
- self.label_10.setGeometry(QRect(300, 120, 91, 20))
- self.lineEdit_Button_width = QLineEdit(self.groupBox)
+ self.label_10.setGeometry(QRect(340, 138, 101, 30))
+ self.label_10.setFont(font)
+ self.lineEdit_Button_width = QLineEdit(self.frame_2)
self.lineEdit_Button_width.setObjectName(u"lineEdit_Button_width")
- self.lineEdit_Button_width.setGeometry(QRect(390, 120, 61, 20))
+ self.lineEdit_Button_width.setGeometry(QRect(450, 138, 61, 30))
+ self.lineEdit_Button_width.setFont(font)
self.lineEdit_Button_width.setAlignment(Qt.AlignCenter)
- self.label_11 = QLabel(self.groupBox)
- self.label_11.setObjectName(u"label_11")
- self.label_11.setGeometry(QRect(300, 150, 91, 20))
- self.lineEdit_ButtonHeight = QLineEdit(self.groupBox)
+ self.label_12 = QLabel(self.frame_2)
+ self.label_12.setObjectName(u"label_12")
+ self.label_12.setGeometry(QRect(378, 40, 121, 20))
+ font2 = QFont()
+ font2.setFamily(u"Segoe UI Semibold")
+ font2.setPointSize(9)
+ self.label_12.setFont(font2)
+ self.lineEdit_ButtonHeight = QLineEdit(self.frame_2)
self.lineEdit_ButtonHeight.setObjectName(u"lineEdit_ButtonHeight")
- self.lineEdit_ButtonHeight.setGeometry(QRect(390, 150, 61, 20))
+ self.lineEdit_ButtonHeight.setGeometry(QRect(450, 175, 61, 30))
+ self.lineEdit_ButtonHeight.setFont(font)
self.lineEdit_ButtonHeight.setAlignment(Qt.AlignCenter)
- self.pushButton_save = QPushButton(self.groupBox)
+ self.label_13 = QLabel(self.frame_2)
+ self.label_13.setObjectName(u"label_13")
+ self.label_13.setGeometry(QRect(340, 101, 71, 30))
+ self.label_13.setFont(font)
+ self.pushButton_save = QPushButton(self.frame_2)
self.pushButton_save.setObjectName(u"pushButton_save")
- self.pushButton_save.setGeometry(QRect(400, 200, 101, 35))
- font = QFont()
- font.setFamily(u"Segoe UI Semibold")
- font.setPointSize(13)
- font.setBold(False)
- font.setWeight(50)
- self.pushButton_save.setFont(font)
+ self.pushButton_save.setGeometry(QRect(440, 220, 101, 35))
+ font3 = QFont()
+ font3.setFamily(u"Segoe UI Semibold")
+ font3.setPointSize(13)
+ font3.setBold(False)
+ font3.setWeight(50)
+ self.pushButton_save.setFont(font3)
self.pushButton_save.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(0, 170, 127);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(0, 170, 127);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(0, 197, 145);\n"
-" border: 2px solidrgb(0, 197, 145);\n"
+" background-color: rgb(140, 188, 100);\n"
+" border: 2px solidrgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(0, 170, 127);\n"
-" border: 2px solid rgb(0, 170, 127);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon = QIcon()
- icon.addFile(u"../Km_NodeGraphEN/icons/cil-save.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_save.setIcon(icon)
- self.pushButton_setDefault = QPushButton(self.groupBox)
+ icon2 = QIcon()
+ icon2.addFile(os.path.dirname(__file__)+"/icons/cil-save.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_save.setIcon(icon2)
+ self.pushButton_setDefault = QPushButton(self.frame_2)
self.pushButton_setDefault.setObjectName(u"pushButton_setDefault")
- self.pushButton_setDefault.setGeometry(QRect(270, 200, 101, 35))
- self.pushButton_setDefault.setFont(font)
+ self.pushButton_setDefault.setGeometry(QRect(310, 220, 101, 35))
+ self.pushButton_setDefault.setFont(font3)
self.pushButton_setDefault.setStyleSheet(u"QPushButton {\n"
" border: 2px solid rgb(52, 59, 72);\n"
" border-radius: 5px; \n"
@@ -130,50 +507,133 @@ def setupUi(self, SettingsWindowUI):
"}\n"
"QPushButton:hover {\n"
" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
"}\n"
"QPushButton:pressed { \n"
" background-color: rgb(35, 40, 49);\n"
" border: 2px solid rgb(43, 50, 61);\n"
"}")
- icon1 = QIcon()
- icon1.addFile(u"../Km_NodeGraphEN/icons/cil-menu.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_setDefault.setIcon(icon1)
- self.groupBox_7 = QGroupBox(self.centralwidget)
- self.groupBox_7.setObjectName(u"groupBox_7")
- self.groupBox_7.setGeometry(QRect(20, 270, 531, 131))
- self.pushButton_OpenPDF = QPushButton(self.groupBox_7)
- self.pushButton_OpenPDF.setObjectName(u"pushButton_OpenPDF")
- self.pushButton_OpenPDF.setGeometry(QRect(400, 95, 111, 23))
- self.label_icon_2 = QLabel(self.groupBox_7)
- self.label_icon_2.setObjectName(u"label_icon_2")
- self.label_icon_2.setGeometry(QRect(420, 15, 87, 71))
- self.label_icon_2.setFrameShape(QFrame.NoFrame)
- self.label_icon_2.setPixmap(QPixmap(u"../Km_NodeGraphEN/icons/mouse.png"))
- self.label_4 = QLabel(self.groupBox_7)
+ icon3 = QIcon()
+ icon3.addFile(os.path.dirname(__file__)+"/icons/cil-menu.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_setDefault.setIcon(icon3)
+ self.label_2 = QLabel(self.frame_2)
+ self.label_2.setObjectName(u"label_2")
+ self.label_2.setGeometry(QRect(0, 5, 571, 31))
+ font4 = QFont()
+ font4.setFamily(u"Segoe UI Semibold")
+ font4.setPointSize(13)
+ self.label_2.setFont(font4)
+ self.label_2.setAlignment(Qt.AlignCenter)
+ self.frame_3 = QFrame(self.frame)
+ self.frame_3.setObjectName(u"frame_3")
+ self.frame_3.setGeometry(QRect(20, 350, 571, 151))
+ self.frame_3.setStyleSheet(u"QFrame {\n"
+"background-color:rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"")
+ self.frame_3.setFrameShape(QFrame.StyledPanel)
+ self.frame_3.setFrameShadow(QFrame.Raised)
+ self.label_7 = QLabel(self.frame_3)
+ self.label_7.setObjectName(u"label_7")
+ self.label_7.setGeometry(QRect(0, 2, 571, 31))
+ self.label_7.setFont(font4)
+ self.label_7.setAlignment(Qt.AlignCenter)
+ self.label_14 = QLabel(self.frame_3)
+ self.label_14.setObjectName(u"label_14")
+ self.label_14.setGeometry(QRect(30, 80, 227, 19))
+ self.label_14.setFont(font)
+ self.label_9 = QLabel(self.frame_3)
+ self.label_9.setObjectName(u"label_9")
+ self.label_9.setGeometry(QRect(30, 30, 227, 19))
+ self.label_9.setFont(font)
+ self.label_4 = QLabel(self.frame_3)
self.label_4.setObjectName(u"label_4")
- self.label_4.setGeometry(QRect(20, 55, 227, 20))
- self.label_3 = QLabel(self.groupBox_7)
+ self.label_4.setGeometry(QRect(97, 50, 131, 20))
+ self.label_4.setFont(font)
+ self.label_3 = QLabel(self.frame_3)
self.label_3.setObjectName(u"label_3")
- self.label_3.setGeometry(QRect(220, 89, 171, 19))
- self.label_9 = QLabel(self.groupBox_7)
- self.label_9.setObjectName(u"label_9")
- self.label_9.setGeometry(QRect(20, 30, 227, 19))
- self.label_14 = QLabel(self.groupBox_7)
- self.label_14.setObjectName(u"label_14")
- self.label_14.setGeometry(QRect(20, 90, 227, 19))
- self.label_15 = QLabel(self.groupBox_7)
+ self.label_3.setGeometry(QRect(30, 110, 171, 19))
+ self.label_3.setFont(font)
+ self.label_15 = QLabel(self.frame_3)
self.label_15.setObjectName(u"label_15")
- self.label_15.setGeometry(QRect(220, 10, 171, 81))
+ self.label_15.setGeometry(QRect(360, 32, 181, 61))
+ self.label_15.setFont(font)
+ self.label_15.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)
self.label_15.setWordWrap(True)
- self.layoutWidget = QWidget(self.centralwidget)
+ self.pushButton_OpenPDF = QPushButton(self.frame_3)
+ self.pushButton_OpenPDF.setObjectName(u"pushButton_OpenPDF")
+ self.pushButton_OpenPDF.setGeometry(QRect(233, 110, 130, 31))
+ font5 = QFont()
+ font5.setFamily(u"Segoe UI Semibold")
+ font5.setPointSize(10)
+ self.pushButton_OpenPDF.setFont(font5)
+ self.pushButton_OpenPDF.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon4 = QIcon()
+ icon4.addFile(u"../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_OpenPDF.setIcon(icon4)
+ self.label_icon_2 = QLabel(self.frame_3)
+ self.label_icon_2.setObjectName(u"label_icon_2")
+ self.label_icon_2.setGeometry(QRect(270, 40, 31, 41))
+ self.label_icon_2.setFrameShape(QFrame.NoFrame)
+ self.label_icon_2.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-mouse.png"))
+ self.label_icon_2.setScaledContents(False)
+ self.pushButton_OpenPDF_2 = QPushButton(self.frame_3)
+ self.pushButton_OpenPDF_2.setObjectName(u"pushButton_OpenPDF_2")
+ self.pushButton_OpenPDF_2.setGeometry(QRect(394, 110, 130, 31))
+ self.pushButton_OpenPDF_2.setFont(font5)
+ self.pushButton_OpenPDF_2.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon5 = QIcon()
+ icon5.addFile(os.path.dirname(__file__)+"/icons/cil-heart.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_OpenPDF_2.setIcon(icon5)
+ self.label_17 = QLabel(self.frame_3)
+ self.label_17.setObjectName(u"label_17")
+ self.label_17.setGeometry(QRect(230, 90, 141, 20))
+ self.label_17.setFont(font)
+ self.label_17.setAlignment(Qt.AlignCenter)
+ self.label_18 = QLabel(self.frame_3)
+ self.label_18.setObjectName(u"label_18")
+ self.label_18.setGeometry(QRect(390, 90, 141, 20))
+ self.label_18.setFont(font)
+ self.label_18.setAlignment(Qt.AlignCenter)
+ self.layoutWidget = QWidget(self.frame)
self.layoutWidget.setObjectName(u"layoutWidget")
- self.layoutWidget.setGeometry(QRect(20, 400, 531, 36))
+ self.layoutWidget.setGeometry(QRect(20, 504, 571, 36))
self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.label_plugins_version = QLabel(self.layoutWidget)
self.label_plugins_version.setObjectName(u"label_plugins_version")
+ font6 = QFont()
+ font6.setFamily(u"Segoe UI Semibold")
+ self.label_plugins_version.setFont(font6)
+ self.label_plugins_version.setStyleSheet(u"color: rgb(200, 200, 200);")
self.horizontalLayout_2.addWidget(self.label_plugins_version)
@@ -185,6 +645,9 @@ def setupUi(self, SettingsWindowUI):
self.verticalLayout.setObjectName(u"verticalLayout")
self.label_credit = QLabel(self.layoutWidget)
self.label_credit.setObjectName(u"label_credit")
+ self.label_credit.setFont(font6)
+ self.label_credit.setStyleSheet(u"color: rgb(200, 200, 200);")
+ self.label_credit.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
self.verticalLayout.addWidget(self.label_credit)
@@ -202,34 +665,48 @@ def setupUi(self, SettingsWindowUI):
# setupUi
def retranslateUi(self, SettingsWindowUI):
- SettingsWindowUI.setWindowTitle(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate : Settings", None))
- self.groupBox.setTitle(QCoreApplication.translate("SettingsWindowUI", u"settings", None))
+ SettingsWindowUI.setWindowTitle(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate - Settings", None))
+ self.label_16.setText("")
+ self.label_8.setText("")
+ self.label_title_bar_top.setText(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate", None))
+#if QT_CONFIG(tooltip)
+ self.btn_minimize.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Minimize", None))
+#endif // QT_CONFIG(tooltip)
+ self.btn_minimize.setText("")
+#if QT_CONFIG(tooltip)
+ self.btn_close.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Close", None))
+#endif // QT_CONFIG(tooltip)
+ self.btn_close.setText("")
+ self.label_ZoomScale.setText(QCoreApplication.translate("SettingsWindowUI", u"1.2", None))
self.checkBox_fade_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Main Window Fade In Effect", None))
- self.label.setText(QCoreApplication.translate("SettingsWindowUI", u"Node Graph Zoom Scale", None))
self.checkBox_shake_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Shake Effect", None))
- self.label_6.setText(QCoreApplication.translate("SettingsWindowUI", u"Shortcut", None))
- self.lineEdit_shortcut.setText(QCoreApplication.translate("SettingsWindowUI", u"shift+e", None))
self.checkBox_zoom_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Zoom Effect", None))
- self.label_ZoomScale.setText(QCoreApplication.translate("SettingsWindowUI", u"1.2", None))
- self.label_12.setText(QCoreApplication.translate("SettingsWindowUI", u"Bookmarks Grid ", None))
+ self.lineEdit_shortcut.setText(QCoreApplication.translate("SettingsWindowUI", u"shift+e", None))
+ self.label_6.setText(QCoreApplication.translate("SettingsWindowUI", u"Shortcut", None))
+ self.label.setText(QCoreApplication.translate("SettingsWindowUI", u"Node Graph Zoom Scale", None))
+ self.label_11.setText(QCoreApplication.translate("SettingsWindowUI", u"Button Height :", None))
self.lineEdit_columnn.setText(QCoreApplication.translate("SettingsWindowUI", u"3", None))
- self.lineEdit_Rows.setText(QCoreApplication.translate("SettingsWindowUI", u"3", None))
self.label_5.setText(QCoreApplication.translate("SettingsWindowUI", u"Columns : ", None))
- self.label_13.setText(QCoreApplication.translate("SettingsWindowUI", u"Rows :", None))
+ self.lineEdit_Rows.setText(QCoreApplication.translate("SettingsWindowUI", u"3", None))
self.label_10.setText(QCoreApplication.translate("SettingsWindowUI", u"Button Width : ", None))
self.lineEdit_Button_width.setText(QCoreApplication.translate("SettingsWindowUI", u"110", None))
- self.label_11.setText(QCoreApplication.translate("SettingsWindowUI", u"Button Height :", None))
+ self.label_12.setText(QCoreApplication.translate("SettingsWindowUI", u"Bookmarks Grid ", None))
self.lineEdit_ButtonHeight.setText(QCoreApplication.translate("SettingsWindowUI", u"50", None))
+ self.label_13.setText(QCoreApplication.translate("SettingsWindowUI", u"Rows :", None))
self.pushButton_save.setText(QCoreApplication.translate("SettingsWindowUI", u" Save", None))
self.pushButton_setDefault.setText(QCoreApplication.translate("SettingsWindowUI", u"Reset", None))
- self.groupBox_7.setTitle(QCoreApplication.translate("SettingsWindowUI", u"Tips", None))
+ self.label_2.setText(QCoreApplication.translate("SettingsWindowUI", u"Settings", None))
+ self.label_7.setText(QCoreApplication.translate("SettingsWindowUI", u"Tips", None))
+ self.label_14.setText(QCoreApplication.translate("SettingsWindowUI", u"Middle Button : Edit", None))
+ self.label_9.setText(QCoreApplication.translate("SettingsWindowUI", u"Left Button : Jump to Bookmark", None))
+ self.label_4.setText(QCoreApplication.translate("SettingsWindowUI", u"Assign New Bookmark", None))
+ self.label_3.setText(QCoreApplication.translate("SettingsWindowUI", u"Right Button : Remove", None))
+ self.label_15.setText(QCoreApplication.translate("SettingsWindowUI", u"Assign Bookmark : Select a node or backdrop, Then click on an empty bookmark button to assign", None))
self.pushButton_OpenPDF.setText(QCoreApplication.translate("SettingsWindowUI", u"Open PDF Help", None))
self.label_icon_2.setText("")
- self.label_4.setText(QCoreApplication.translate("SettingsWindowUI", u" Assign New Bookmark", None))
- self.label_3.setText(QCoreApplication.translate("SettingsWindowUI", u"Right Button : Remove", None))
- self.label_9.setText(QCoreApplication.translate("SettingsWindowUI", u"Left Button : Jump to Bookmark", None))
- self.label_14.setText(QCoreApplication.translate("SettingsWindowUI", u"Middle Button : Edit", None))
- self.label_15.setText(QCoreApplication.translate("SettingsWindowUI", u"Assign Bookmark : Select a node or backdrop, Then click on an empty bookmark to assign", None))
+ self.pushButton_OpenPDF_2.setText(QCoreApplication.translate("SettingsWindowUI", u"Buy Me a Coffee", None))
+ self.label_17.setText(QCoreApplication.translate("SettingsWindowUI", u"Learn all in 3 minutes", None))
+ self.label_18.setText(QCoreApplication.translate("SettingsWindowUI", u"Do you like this tool?", None))
self.label_plugins_version.setText(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
self.label_credit.setText(QCoreApplication.translate("SettingsWindowUI", u"By Hossein Karamian", None))
# retranslateUi
diff --git a/Km_NodeGraphEN/icons/cil-check-alt.png b/Km_NodeGraphEN/icons/cil-check-alt.png
new file mode 100644
index 0000000000000000000000000000000000000000..23c4215ec9274440ff7acb614fdb5e3f9c40757c
GIT binary patch
literal 1773
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
Zq-~uSzn%8}OQ-FBYa~<`JW}1b=^rZ;qelP$
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/settings.json b/Km_NodeGraphEN/settings.json
index 2448e7d..3514879 100644
--- a/Km_NodeGraphEN/settings.json
+++ b/Km_NodeGraphEN/settings.json
@@ -1 +1 @@
-{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1.0", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
+{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
From 6f7253c9dd6476baf63a5e38f12f466b368fcc52 Mon Sep 17 00:00:00 2001
From: hkaramian <93508495+hkaramian@users.noreply.github.com>
Date: Sun, 2 Jan 2022 12:18:38 +0330
Subject: [PATCH 03/11] v2.0 dev
---
Dev-Files/panel_v02 - Bookmarks List.ui | 1573 +++++++++++++-----
Dev-Files/panel_v02 - Settings.ui | 51 +-
Dev-Files/panel_v02 - Templates.ui | 965 ++++++++---
Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py | 373 ++++-
Km_NodeGraphEN/Ui_EditBookmarks.py | 702 ++++++--
Km_NodeGraphEN/Ui_Settings.py | 112 +-
Km_NodeGraphEN/Ui_Templates.py | 599 ++++++-
Km_NodeGraphEN/icons/cil-arrow-bottom.png | Bin 0 -> 1874 bytes
Km_NodeGraphEN/menu.py | 8 +-
Km_NodeGraphEN/model.py | 1 +
Km_NodeGraphEN/settings.json | 2 +-
11 files changed, 3435 insertions(+), 951 deletions(-)
create mode 100644 Km_NodeGraphEN/icons/cil-arrow-bottom.png
diff --git a/Dev-Files/panel_v02 - Bookmarks List.ui b/Dev-Files/panel_v02 - Bookmarks List.ui
index 2625e91..09d2310 100644
--- a/Dev-Files/panel_v02 - Bookmarks List.ui
+++ b/Dev-Files/panel_v02 - Bookmarks List.ui
@@ -6,521 +6,1250 @@
0
0
- 599
- 492
+ 641
+ 610
Km NodeGraph Easy Navigate : Edit Bookmarks
-
+
- 20
+ 10
10
- 561
- 371
+ 611
+ 591
-
- Bookmarks List
+
+ QLabel {
+color: rgb(223, 223, 223);
+}
+
+QFrame {
+ background-color: rgb(61, 64, 71);
+ border-radius : 10px;
+}
+
+/* LINE EDIT */
+QLineEdit {
+ background-color: rgb(40, 43, 50);
+ border-radius: 5px;
+ border: 2px solid rgb(40, 43, 50);
+}
+QLineEdit:hover {
+ border: 2px solid rgb(64, 71, 88);
+}
+QLineEdit:focus {
+ border: 2px solid rgb(91, 101, 124);
+}
+
+/* SCROLL BARS */
+QScrollBar:horizontal {
+ border: none;
+ background: rgb(52, 59, 72);
+ height: 14px;
+ margin: 0px 21px 0 21px;
+ border-radius: 0px;
+}
+QScrollBar::handle:horizontal {
+ background: rgb(85, 170, 255);
+ min-width: 25px;
+ border-radius: 7px
+}
+QScrollBar::add-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-right-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+QScrollBar::sub-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-left-radius: 7px;
+ border-bottom-left-radius: 7px;
+ 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 {
+ border: none;
+ background: rgb(61, 64, 71);
+ width: 14px;
+ margin: 21px 0 21px 0;
+ border-radius: 0px;
+ }
+ QScrollBar::handle:vertical {
+ background: rgb(255, 212, 95);
+ min-height: 25px;
+ border-radius: 7px
+ }
+ QScrollBar::add-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
+ background: none;
+ }
+
+ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: none;
+ }
+
+/* CHECKBOX */
+QCheckBox::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QCheckBox::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QCheckBox::indicator:checked {
+ background: 3px solid rgb(52, 59, 72);
+ border: 3px solid rgb(52, 59, 72);
+ background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);
+}
+
+/* RADIO BUTTON */
+QRadioButton::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QRadioButton::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QRadioButton::indicator:checked {
+ background: 3px solid rgb(94, 106, 130);
+ border: 3px solid rgb(52, 59, 72);
+}
+
+/* COMBOBOX */
+QComboBox{
+ background-color: rgb(27, 29, 35);
+ border-radius: 5px;
+ border: 2px solid rgb(27, 29, 35);
+ padding: 5px;
+ padding-left: 10px;
+}
+QComboBox:hover{
+ border: 2px solid rgb(64, 71, 88);
+}
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 25px;
+ border-left-width: 3px;
+ border-left-color: rgba(39, 44, 54, 150);
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ background-image: url(:/16x16/icons/16x16/cil-arrow-bottom.png);
+ background-position: center;
+ background-repeat: no-reperat;
+ }
+QComboBox QAbstractItemView {
+ color: rgb(85, 170, 255);
+ background-color: rgb(27, 29, 35);
+ padding: 10px;
+ selection-background-color: rgb(39, 44, 54);
+}
+
+/* SLIDERS */
+QSlider::groove:horizontal {
+ border-radius: 9px;
+ height: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:horizontal:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:horizontal {
+ background-color: rgb(255, 212, 95);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:horizontal:hover {
+ background-color: rgb(255, 222, 110);
+}
+QSlider::handle:horizontal:pressed {
+ background-color: rgb(255, 212, 95);
+}
+
+QSlider::groove:vertical {
+ border-radius: 9px;
+ width: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:vertical:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:vertical {
+ background-color: rgb(85, 170, 255);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:vertical:hover {
+ background-color: rgb(105, 180, 255);
+}
+QSlider::handle:vertical:pressed {
+ background-color: rgb(65, 130, 195);
+}
+
+
-
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
- 20
- 20
- 521
- 341
+ 0
+ 0
+ 611
+ 42
-
- true
+
+
+ 16777215
+ 42
+
-
- Qt::DashLine
+
+ background-color: rgb(40, 43, 50);
+border-bottom-left-radius: 1px;
+border-bottom-right-radius: 1px;
-
- true
+
+ QFrame::NoFrame
-
- true
+
+ QFrame::Raised
-
- 20
-
-
- 100
-
-
- true
-
-
- true
-
-
- true
-
-
- false
-
-
- 30
-
-
-
- 1
+
+
+ 0
-
-
-
- 2
+
+ 0
-
-
-
- Index (Order)
+
+ 0
-
-
-
- Node Name
+
+ 0
-
-
-
- Title
+
+ 0
-
- Copy url to clipboard
+ -
+
+
+
+ 0
+ 0
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 5
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
-
+
+
+
+ 3
+ 16777215
+
+
+
+
+
+
+
+ -
+
+
+
+ 20
+ 0
+
+
+
+
+ 20
+ 20
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-menu.png
+
+
+ true
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+
+ -
+
+
+
+ Segoe UI Semibold
+ 11
+ 50
+ false
+
+
+
+ background: transparent;
+
+
+
+ Km NodeGraph Easy Navigate
+
+
+ 5
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 120
+ 16777215
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Minimize
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(50, 55, 65);
+ border-radius : 0px;
+}
+QPushButton:pressed {
+ background-color: rgb(40, 50, 62);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-window-minimize.png../Km_NodeGraphEN/icons/cil-window-minimize.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Close
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(50, 55, 65);
+ border-top-right-radius: 10px;
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+QPushButton:pressed {
+ background-color: rgb(40, 50, 62);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-x.png../Km_NodeGraphEN/icons/cil-x.png
+
+
+
+
+
+
+
+
+
+
+
+ 20
+ 59
+ 571
+ 411
+
+
+
+ QFrame {
+background-color: rgb(51, 54, 63);
+border-radius: 5px;
+}
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 0
+ 5
+ 571
+ 31
+
-
-
-
- Shortcut
+
+
+ Segoe UI Semibold
+ 13
+
-
- -
- 1
+ Edit Bookmarks
-
- -
-
- test
+
+ Qt::AlignCenter
-
- -
-
-
+
+
+
+
+ 10
+ 33
+ 551
+ 321
+
-
- -
-
-
+
+ QTableWidget {
+ background-color: rgb(51, 54, 63);
+ padding: 10px;
+ border-radius: 5px;
+ gridline-color: rgb(61, 64, 71);
+ border-bottom: 1px solid rgb(51, 54, 63);
+ color : rgb(190, 190, 198);
+}
+QTableWidget::item{
+ border-color: rgb(61, 64, 71);
+ padding-left: 5px;
+ padding-right: 5px;
+ gridline-color: rgb(61, 64, 71);
+}
+QTableWidget::item:selected{
+ background-color: rgb(40, 43, 50);
+ background-color: rgb(40, 43, 50);
+ border-radius: 15px;
+ color : rgb(190, 190, 198);
+}
+QScrollBar:horizontal {
+ border: none;
+ background: rgb(255, 212, 95);
+ height: 14px;
+ margin: 0px 21px 0 21px;
+ border-radius: 0px;
+}
+ QScrollBar:vertical {
+ border: none;
+ background: rgb(61, 64, 71);
+ width: 14px;
+ margin: 21px 0 21px 0;
+ border-radius: 0px;
+ }
+QHeaderView::section{
+ Background-color: rgb(51, 54, 63);
+ max-width: 30px;
+ border: 1px solid rgb(61, 64, 71);
+ border-style: none;
+ border-bottom: 1px solid rgb(61, 64, 71);
+ border-right: 1px solid rgb(61, 64, 71);
+ font-size : 13px
+}
+QTableWidget::horizontalHeader {
+ background-color: rgb(102, 157, 178);
+}
+QHeaderView::section:horizontal
+{
+ border: 1px solid rgb(102, 157, 178);
+ background-color: rgb(102, 157, 178);
+ padding: 3px;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ color : rgb(255, 255, 255);
+}
+QHeaderView::section:vertical
+{
+ border: 1px solid rgb(61, 64, 71);
+}
+
-
- -
-
- 2
+
+ QFrame::NoFrame
-
- -
-
- tt
+
+ Qt::ScrollBarAlwaysOn
-
-
-
-
-
-
- 20
- 450
- 561
- 36
-
-
-
- -
-
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ Qt::SolidLine
+
+
+ false
+
+
+ true
+
+
+ 20
+
+
+ 100
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ 30
+
+
+ false
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ Index (Order)
+
Segoe UI
+
+
- Km NodeGraph Easy Navigate v2.0
-
-
-
- -
-
-
- Qt::Horizontal
+ Node Name
-
-
- 40
- 20
-
+
+
+ Segoe UI
+
-
-
- -
-
-
-
-
-
-
- Segoe UI
-
-
-
- By Hossein Karamian
-
-
-
-
-
-
-
-
-
-
- 20
- 390
- 561
- 41
-
-
-
- -
-
-
-
- 35
- 35
-
+
+
+
+ Title
-
-
- 35
- 35
-
+
+ Copy url to clipboard
Segoe UI
- 9
-
- Change order (move up)
+
+
+
+ Shortcut
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
- border-radius: 5px;
- background-color: rgb(52, 59, 72);
- color: rgb(223, 223, 223);
-}
-QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
-}
-QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
-}
+
+
+ Segoe UI
+
+
+
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-arrow-circle-top.png../Km_NodeGraphEN/icons/cil-arrow-circle-top.png
+ 1
-
-
- 25
- 25
-
+
+ -
+
+ test
-
-
- -
-
-
-
- 35
- 35
-
+
+ -
+
+
-
-
- 35
- 35
-
+
+ -
+
+
-
-
- Segoe UI
- 9
-
+
+ -
+
+ 2
-
- Change order (move down)
+
+ -
+
+ tt
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
+
+
+
+
+
+ 0
+ 360
+ 561
+ 41
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Change order (move up)
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
border-radius: 5px;
- background-color: rgb(52, 59, 72);
+ background-color: rgb(126, 177, 85);
color: rgb(223, 223, 223);
}
QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
}
QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
}
-
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png
-
-
-
- 25
- 25
-
-
-
-
- -
-
-
-
- 35
- 35
-
-
-
-
- 35
- 35
-
-
-
-
- Segoe UI
- 9
-
-
-
- Change order (move down)
-
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-arrow-circle-top.png../Km_NodeGraphEN/icons/cil-arrow-circle-top.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Change order (move down)
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
border-radius: 5px;
- background-color: rgb(52, 59, 72);
+ background-color: rgb(126, 177, 85);
color: rgb(223, 223, 223);
}
QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
}
QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
}
-
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-check-circle.png../Km_NodeGraphEN/icons/cil-check-circle.png
-
-
-
- 25
- 25
-
-
-
-
- -
-
-
-
- 35
- 35
-
-
-
-
- 35
- 35
-
-
-
-
- Segoe UI
- 9
-
-
-
- Remove (Set Empty) Selected Bookmark
-
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png../Km_NodeGraphEN/icons/cil-arrow-circle-bottom.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Set Selected Node to Selected Row(Index)
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
border-radius: 5px;
- background-color: rgb(52, 59, 72);
+ background-color: rgb(126, 177, 85);
color: rgb(223, 223, 223);
}
QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
}
QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
}
-
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-x-circle.png../Km_NodeGraphEN/icons/cil-x-circle.png
-
-
-
- 25
- 25
-
-
-
-
- -
-
-
-
- 35
- 35
-
-
-
-
- 35
- 35
-
-
-
-
- Segoe UI
- 9
-
-
-
- Create Bookmarks From Backdrops
-
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-check-circle.png../Km_NodeGraphEN/icons/cil-check-circle.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Remove (Set Empty) Selected Bookmark
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
border-radius: 5px;
- background-color: rgb(52, 59, 72);
+ background-color: rgb(126, 177, 85);
color: rgb(223, 223, 223);
}
QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
}
QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
}
-
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-smile.png../Km_NodeGraphEN/icons/cil-smile.png
-
-
-
- 25
- 25
-
-
-
-
- -
-
-
-
- 35
- 35
-
-
-
-
- 35
- 35
-
-
-
-
- Segoe UI
- 9
-
-
-
- Remove (Set Empty) All Bookmarks
-
-
- QPushButton {
- border: 2px solid rgb(52, 59, 72);
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-x-circle.png../Km_NodeGraphEN/icons/cil-x-circle.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Create Bookmarks From Backdrops
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
border-radius: 5px;
- background-color: rgb(52, 59, 72);
+ background-color: rgb(126, 177, 85);
color: rgb(223, 223, 223);
}
QPushButton:hover {
- background-color: rgb(57, 65, 80);
- border: 2px solid rgb(61, 70, 86);
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
}
QPushButton:pressed {
- background-color: rgb(35, 40, 49);
- border: 2px solid rgb(43, 50, 61);
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
}
-
-
-
-
-
-
- ../Km_NodeGraphEN/icons/cil-trash.png../Km_NodeGraphEN/icons/cil-trash.png
-
-
-
- 25
- 25
-
-
-
-
-
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-smile.png../Km_NodeGraphEN/icons/cil-smile.png
+
+
+
+ 25
+ 25
+
+
+
+
+ -
+
+
+
+ 35
+ 35
+
+
+
+
+ 35
+ 35
+
+
+
+
+ Segoe UI
+ 9
+
+
+
+ Remove (Set Empty) All Bookmarks
+
+
+ QPushButton {
+ border: 2px solid rgb(126, 177, 85);
+ border-radius: 5px;
+ background-color: rgb(126, 177, 85);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color:rgb(140, 188, 100);
+ border: 2px solid rgb(140, 188, 100);
+}
+QPushButton:pressed {
+ background-color: rgb(126, 177, 85);
+ border: 2px solid rgb(126, 177, 85);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-trash.png../Km_NodeGraphEN/icons/cil-trash.png
+
+
+
+ 25
+ 25
+
+
+
+
+
+
+
+
+
+
+ 20
+ 490
+ 571
+ 61
+
+
+
+ QFrame {
+background-color:rgb(51, 54, 63);
+border-radius: 5px;
+}
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ -10
+ 2
+ 571
+ 31
+
+
+
+
+ Segoe UI Semibold
+ 13
+
+
+
+ Tips
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 30
+ 30
+ 227
+ 19
+
+
+
+
+ Segoe UI
+
+
+
+ <strong>Middle Button :</strong> Edit
+
+
+
+
+
+ 340
+ 20
+ 31
+ 41
+
+
+
+ QFrame::NoFrame
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-mouse.png
+
+
+ false
+
+
+
+
+
+
+ 20
+ 554
+ 571
+ 36
+
+
+
+ -
+
+
+
+ Segoe UI Semibold
+
+
+
+ color: rgb(200, 200, 200);
+
+
+ Km NodeGraph Easy Navigate v2.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ Segoe UI Semibold
+
+
+
+ color: rgb(200, 200, 200);
+
+
+ By Hossein Karamian
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
diff --git a/Dev-Files/panel_v02 - Settings.ui b/Dev-Files/panel_v02 - Settings.ui
index 0a740ae..3b0d726 100644
--- a/Dev-Files/panel_v02 - Settings.ui
+++ b/Dev-Files/panel_v02 - Settings.ui
@@ -1,13 +1,14 @@
+ Hossein Karamian
SettingsWindowUI
0
0
- 633
- 560
+ 635
+ 557
@@ -267,7 +268,9 @@ QSlider::handle:vertical:pressed {
- background-color: rgb(40, 43, 50);
+ background-color: rgb(40, 43, 50);
+border-bottom-left-radius: 1px;
+border-bottom-right-radius: 1px;
QFrame::NoFrame
@@ -427,7 +430,7 @@ QSlider::handle:vertical:pressed {
0
-
-
+
0
@@ -455,10 +458,11 @@ QSlider::handle:vertical:pressed {
background-color: transparent;
}
QPushButton:hover {
- background-color: rgb(52, 59, 72);
+ background-color: rgb(50, 55, 65);
+ border-radius : 0px;
}
QPushButton:pressed {
- background-color: rgb(85, 170, 255);
+ background-color: rgb(40, 50, 62);
}
@@ -471,7 +475,7 @@ QPushButton:pressed {
-
-
+
0
@@ -499,11 +503,14 @@ QPushButton:pressed {
background-color: transparent;
}
QPushButton:hover {
- background-color: rgb(52, 59, 72);
- border-radius : 10px;
+ background-color: rgb(50, 55, 65);
+ border-top-right-radius: 10px;
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
}
QPushButton:pressed {
- background-color: rgb(85, 170, 255);
+ background-color: rgb(40, 50, 62);
}
@@ -1181,7 +1188,7 @@ QPushButton:pressed {
- ../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png
+ ../Km_NodeGraphEN/icons/cil-lightbulb.png../Km_NodeGraphEN/icons/cil-lightbulb.png
@@ -1206,7 +1213,7 @@ QPushButton:pressed {
false
-
+
394
@@ -1353,6 +1360,26 @@ QPushButton:pressed {
+
+ checkBox_zoom_effect
+ checkBox_shake_effect
+ checkBox_fade_effect
+ lineEdit_shortcut
+ horizontalSlider_ZoomScale
+ lineEdit_columnn
+ lineEdit_Rows
+ lineEdit_Button_width
+ lineEdit_ButtonHeight
+ pushButton_save
+ pushButton_setDefault
+ pushButton_OpenPDF
+ pushButton_BuyMeACoffee
+ pushButton_minimize
+ pushButton_close
+
+
+ test hints
+
diff --git a/Dev-Files/panel_v02 - Templates.ui b/Dev-Files/panel_v02 - Templates.ui
index f234012..3ac6687 100644
--- a/Dev-Files/panel_v02 - Templates.ui
+++ b/Dev-Files/panel_v02 - Templates.ui
@@ -6,73 +6,613 @@
0
0
- 506
- 621
+ 906
+ 410
Km NodeGraph Easy Navigate : BookMarks Templates
+
+ color: rgb(223, 223, 223);
+
-
+
- 10
- 20
- 481
- 551
+ 12
+ 12
+ 885
+ 391
-
- BookMark Templates
+
+ QFrame {
+ background-color: rgb(61, 64, 71);
+ border-radius : 10px;
+}
+
+/* LINE EDIT */
+QLineEdit {
+ background-color: rgb(40, 43, 50);
+ border-radius: 5px;
+ border: 2px solid rgb(40, 43, 50);
+}
+QLineEdit:hover {
+ border: 2px solid rgb(64, 71, 88);
+}
+QLineEdit:focus {
+ border: 2px solid rgb(91, 101, 124);
+}
+
+/* SCROLL BARS */
+QScrollBar:horizontal {
+ border: none;
+ background: rgb(52, 59, 72);
+ height: 14px;
+ margin: 0px 21px 0 21px;
+ border-radius: 0px;
+}
+QScrollBar::handle:horizontal {
+ background: rgb(85, 170, 255);
+ min-width: 25px;
+ border-radius: 7px
+}
+QScrollBar::add-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-right-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+QScrollBar::sub-line:horizontal {
+ border: none;
+ background: rgb(55, 63, 77);
+ width: 20px;
+ border-top-left-radius: 7px;
+ border-bottom-left-radius: 7px;
+ 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 {
+ border: none;
+ background: rgb(52, 59, 72);
+ width: 14px;
+ margin: 21px 0 21px 0;
+ border-radius: 0px;
+ }
+ QScrollBar::handle:vertical {
+ background: rgb(85, 170, 255);
+ min-height: 25px;
+ border-radius: 7px
+ }
+ QScrollBar::add-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:vertical {
+ border: none;
+ background: rgb(55, 63, 77);
+ height: 20px;
+ border-top-left-radius: 7px;
+ border-top-right-radius: 7px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
+ background: none;
+ }
+
+ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: none;
+ }
+
+/* CHECKBOX */
+QCheckBox::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QCheckBox::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QCheckBox::indicator:checked {
+ background: 3px solid rgb(52, 59, 72);
+ border: 3px solid rgb(52, 59, 72);
+ background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);
+}
+
+/* RADIO BUTTON */
+QRadioButton::indicator {
+ border: 3px solid rgb(52, 59, 72);
+ width: 15px;
+ height: 15px;
+ border-radius: 10px;
+ background: rgb(44, 49, 60);
+}
+QRadioButton::indicator:hover {
+ border: 3px solid rgb(58, 66, 81);
+}
+QRadioButton::indicator:checked {
+ background: 3px solid rgb(94, 106, 130);
+ border: 3px solid rgb(52, 59, 72);
+}
+
+/* SLIDERS */
+QSlider::groove:horizontal {
+ border-radius: 9px;
+ height: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:horizontal:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:horizontal {
+ background-color: rgb(255, 212, 95);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:horizontal:hover {
+ background-color: rgb(255, 222, 110);
+}
+QSlider::handle:horizontal:pressed {
+ background-color: rgb(255, 212, 95);
+}
+
+QSlider::groove:vertical {
+ border-radius: 9px;
+ width: 18px;
+ margin: 0px;
+ background-color: rgb(52, 59, 72);
+}
+QSlider::groove:vertical:hover {
+ background-color: rgb(55, 62, 76);
+}
+QSlider::handle:vertical {
+ background-color: rgb(85, 170, 255);
+ border: none;
+ height: 18px;
+ width: 18px;
+ margin: 0px;
+ border-radius: 9px;
+}
+QSlider::handle:vertical:hover {
+ background-color: rgb(105, 180, 255);
+}
+QSlider::handle:vertical:pressed {
+ background-color: rgb(65, 130, 195);
+}
+
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
-
+
- 10
- 20
- 461
- 241
+ 0
+ 0
+ 885
+ 42
-
- List
+
+
+ 16777215
+ 42
+
-
+
+ background-color: rgb(40, 43, 50);
+border-bottom-left-radius: 1px;
+border-bottom-right-radius: 1px;
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 5
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
-
+
+
+
+ 3
+ 16777215
+
+
+
+
+
+
+
+ -
+
+
+
+ 20
+ 0
+
+
+
+
+ 20
+ 20
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-star.png
+
+
+ true
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+
+ -
+
+
+
+ Segoe UI Semibold
+ 11
+ 50
+ false
+
+
+
+ background: transparent;
+
+
+
+ Km NodeGraph Easy Navigate
+
+
+ 5
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 120
+ 16777215
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Minimize
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(50, 55, 65);
+ border-radius : 0px;
+}
+QPushButton:pressed {
+ background-color: rgb(40, 50, 62);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-window-minimize.png../Km_NodeGraphEN/icons/cil-window-minimize.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 40
+ 16777215
+
+
+
+ Close
+
+
+ QPushButton {
+ border: none;
+ background-color: transparent;
+}
+QPushButton:hover {
+ background-color: rgb(50, 55, 65);
+ border-top-right-radius: 10px;
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+QPushButton:pressed {
+ background-color: rgb(40, 50, 62);
+}
+
+
+
+
+
+
+ ../Km_NodeGraphEN/icons/cil-x.png../Km_NodeGraphEN/icons/cil-x.png
+
+
+
+
+
+
+
+
+
+
+
+ 20
+ 63
+ 551
+ 291
+
+
+
+ QFrame {
+background-color: rgb(51, 54, 63);
+border-radius: 5px;
+}
+QListWidget {
+ background-color: rgb(63, 68, 88);
+ border-radius: 5px;
+ padding: 5px;
+}
+QListWidget::item {
+padding: 5px;
+}
+QListWidget::item:hover {
+padding: 5px;
+ background-color: rgb(83, 89, 115);
+}
+QListWidget::item:selected {
+ padding: 5px;
+ background-color: rgb(83, 89, 115);
+ color: rgb(223, 223, 223);
+}
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
- 130
- 200
- 81
- 23
+ 40
+ 244
+ 101
+ 35
+
+
+ Segoe UI Semibold
+ 13
+ 50
+ false
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
- Load
+ Remove
+
+
+
+ ../Km_NodeGraphEN/icons/cil-trash.png../Km_NodeGraphEN/icons/cil-trash.png
-
+
- 30
- 200
- 81
- 23
+ 0
+ 5
+ 571
+ 31
+
+
+ Segoe UI Semibold
+ 13
+
+
- Remove
+ BookMark Templates
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 40
+ 33
+ 61
+ 21
+
+
+
+ Templates:
- 20
+ 40
60
- 201
- 121
+ 221
+ 171
+
+
+
-
Template 1
@@ -94,26 +634,26 @@
-
+
- 20
- 30
- 61
+ 290
+ 33
+ 141
21
- Templates:
+ Selected Template Items:
- 240
+ 290
60
- 201
- 121
+ 221
+ 171
-
@@ -147,52 +687,177 @@
-
+
- 240
- 30
- 141
- 21
+ 160
+ 244
+ 101
+ 35
+
+
+ Segoe UI Semibold
+ 13
+ 50
+ false
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
+
- Selected Template Items:
+ Load
+
+
+
+ ../Km_NodeGraphEN/icons/cil-library-add.png../Km_NodeGraphEN/icons/cil-library-add.png
-
+
- 240
- 280
- 231
- 251
+ 20
+ 353
+ 841
+ 36
-
- Add New Template
+
+ -
+
+
+
+ Segoe UI Semibold
+
+
+
+ color: rgb(200, 200, 200);
+
+
+ Km NodeGraph Easy Navigate v2.0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ Segoe UI Semibold
+
+
+
+ color: rgb(200, 200, 200);
+
+
+ By Hossein Karamian
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
+
+
+
+ 590
+ 63
+ 271
+ 291
+
-
+
+ QFrame {
+background-color: rgb(51, 54, 63);
+border-radius: 5px;
+}
+QListWidget {
+ background-color: rgb(63, 68, 88);
+ border-radius: 5px;
+ padding: 5px;
+}
+QListWidget::item {
+padding: 5px;
+}
+QListWidget::item:hover {
+padding: 5px;
+ background-color: rgb(83, 89, 115);
+}
+QListWidget::item:selected {
+ padding: 5px;
+ background-color: rgb(83, 89, 115);
+ color: rgb(223, 223, 223);
+}
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
- 80
- 210
- 81
- 23
+ 0
+ 2
+ 271
+ 31
+
+
+ Segoe UI Semibold
+ 13
+
+
- Add
+ Add New Template
+
+
+ Qt::AlignCenter
- 10
- 50
- 201
- 121
+ 20
+ 54
+ 221
+ 151
-
@@ -226,34 +891,11 @@
-
-
-
- 112
- 180
- 101
- 20
-
-
-
-
-
-
- 10
- 180
- 101
- 21
-
-
-
- Template Name :
-
-
- 10
- 20
+ 20
+ 30
181
21
@@ -262,132 +904,75 @@
Current Project Bookmarks:
-
-
-
-
- 10
- 280
- 211
- 251
-
-
-
- Global Override
-
-
+
30
- 100
- 181
- 16
+ 216
+ 101
+ 21
- (Use a template for all projects)
+ Template Name :
-
+
- 30
- 70
- 181
- 31
+ 130
+ 213
+ 121
+ 30
-
- Template Global Override
-
-
+
- 60
- 160
+ 90
+ 249
101
- 22
+ 35
- -
-
- Template 1
-
-
- -
-
- Template 2
-
-
- -
-
- Template 3
-
-
- -
-
- Template 4
-
-
-
-
-
-
- 60
- 140
- 141
- 16
-
+
+
+ Segoe UI Semibold
+ 13
+ 50
+ false
+
+
+
+ QPushButton {
+ border: 2px solid rgb(52, 59, 72);
+ border-radius: 5px;
+ background-color: rgb(52, 59, 72);
+ color: rgb(223, 223, 223);
+}
+QPushButton:hover {
+ background-color: rgb(57, 65, 80);
+ border: 2px solid rgb(57, 65, 80);
+}
+QPushButton:pressed {
+ background-color: rgb(35, 40, 49);
+ border: 2px solid rgb(43, 50, 61);
+}
- Select Template :
+ Add
+
+
+
+ ../Km_NodeGraphEN/icons/cil-medical-cross.png../Km_NodeGraphEN/icons/cil-medical-cross.png
-
-
-
-
- 10
- 570
- 481
- 36
-
-
-
- -
-
-
- Km NodeGraph Easy Navigate v2.0
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
-
-
- By Hossein Karamian
-
-
-
-
-
-
+ frame_top_btns
+ layoutWidget
+ frame_4
+ frame_2
diff --git a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
index 230b6d5..2670617 100644
--- a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
+++ b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
@@ -5,7 +5,7 @@
#
# Developed By Hossein Karamian
#
-# www.kmworks.ir
+# www.hkaramian.com
# kmworks.call@gmail.com
# _ __ __ __
# | |/ / | \/ |
@@ -80,6 +80,7 @@
import subprocess
import datetime
import json
+import webbrowser
# Pyside Library Import (pyside and pyside 2) : pyside for nuke10.5 and older , pyside2 for nuke 11.0 and newer
from PysideImport import *
@@ -112,7 +113,7 @@ def __init__(self):
#QDesktopWidget().screenGeometry(-1).width()
#screenHeight = QDesktopWidget().screenGeometry(-1).height()
#QCursor.pos().x()
- offset = QPoint(width * 0.5, height * 1 + 30)
+ offset = QPoint(width * 0.5, height * 0.5 + 30)
self.move(QCursor.pos() - offset)
self.setContentsMargins(0,0,0,0)
@@ -131,10 +132,10 @@ def __init__(self):
allBookmarksData = model.Bookmarks.Load()
# Template Global Override
- if self.settings["templateGlobalOverride"] == "Enable" :
- templateFileName = self.settings["globalOverrideTemplateFileName"]
- if model.BookmarkTemplates.GetATemplateData(templateFileName) :
- allBookmarksData = model.BookmarkTemplates.GetATemplateData(templateFileName)["bookmarks"].values()
+ # if self.settings["templateGlobalOverride"] == "Enable" :
+ # templateFileName = self.settings["globalOverrideTemplateFileName"]
+ # if model.BookmarkTemplates.GetATemplateData(templateFileName) :
+ # allBookmarksData = model.BookmarkTemplates.GetATemplateData(templateFileName)["bookmarks"].values()
for index in range(0, numberOfBoomarks):
isEmpty = True
@@ -169,17 +170,19 @@ def __init__(self):
# set main layout
self.setLayout(mainVerticalLayout)
+
# Opacity(Fade In) Effect
finalOpacity = 0.9
self.SetWindowProperties()
self.effect = QGraphicsOpacityEffect()
- self.effect.setOpacity(0)
- self.setGraphicsEffect(self.effect)
- self.fade = QPropertyAnimation(self.effect, 'opacity'.encode()) # encode is utf-8 by default
- self.fade.setDuration(300)
- self.fade.setStartValue(0)
- self.fade.setEndValue(finalOpacity)
- self.fade.start()
+ if self.settings["mainWindowFadeInEffect"] == "Enable" :
+ self.effect.setOpacity(0)
+ self.setGraphicsEffect(self.effect)
+ self.fade = QPropertyAnimation(self.effect, 'opacity'.encode()) # encode is utf-8 by default
+ self.fade.setDuration(300)
+ self.fade.setStartValue(0)
+ self.fade.setEndValue(finalOpacity)
+ self.fade.start()
def SetWindowProperties(self):
"""Set window falgs and focused widget."""
@@ -236,6 +239,11 @@ def __init__(self, bookmarkData,parrent,width=70,height=70):
self.setText(bookmarkData["title"])
self.setWordWrap(True)
+ # define bookmark shortcut and top menu
+ if self.nodeName != "empty" :
+ menu = nuke.menu("Nuke")
+ Km_NGJ = menu.addMenu("KmTools")
+ Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Bookmarks/"+bookmarkData["title"],lambda: self.JumpToNode(bookmarkData['nodeName']),bookmarkData["shortcut"])
def enterEvent(self, event):
self.setStyleSheet("""background:orange; border-radius: 10px;
@@ -246,38 +254,51 @@ def leaveEvent(self, event):
color:white;font-size:12px;""")
def JumpToTargetAndShakeNode(self,targetNodeName):
- #Jump :
+ self.settings = model.Settings().Load()
+ zoomScale = float(self.settings["nodeGraphZoomScale"])
TargetNode = nuke.toNode(targetNodeName)
xC = TargetNode.xpos() + TargetNode.screenWidth()/2
- yC = TargetNode.ypos() + TargetNode.screenHeight()/2
- nuke.zoom( 1, [ xC, yC ])
+ yC = TargetNode.ypos()
+ nuke.zoom( zoomScale, [ xC, yC ])
#Shake :
moveValue = 5
for i in range( 0, 8 ):
moveValue = moveValue * -1
TargetNode.setXpos(int(TargetNode["xpos"].getValue())+ moveValue)
time.sleep( 0.05 )
- #print move_value
- #print(datetime.datetime.now())
def JumpToTargetWithZoomEffect(self,targetNodeName):
+ self.settings = model.Settings().Load()
+ zoomScale = float(self.settings["nodeGraphZoomScale"])
TargetNode = nuke.toNode(targetNodeName)
zoom = 0.1
for i in range( 0, 200 ):
time.sleep( 0.0001 )
#print(datetime.datetime.now())
xC = TargetNode.xpos() + TargetNode.screenWidth()/2
- yC = TargetNode.ypos() + TargetNode.screenHeight()/2
+ yC = TargetNode.ypos()
zoom = zoom + 0.05
- if zoom > 1:
+ if zoom > zoomScale:
break
nuke.zoom( zoom, [ xC, yC ])
def JumpToTargetWithoutEffect(self,targetNodeName):
+ self.settings = model.Settings().Load()
+ zoomScale = float(self.settings["nodeGraphZoomScale"])
TargetNode = nuke.toNode(targetNodeName)
xC = TargetNode.xpos() + TargetNode.screenWidth()/2
- yC = TargetNode.ypos() + TargetNode.screenHeight()/2
- nuke.zoom( 1, [ xC, yC ])
+ yC = TargetNode.ypos()
+ nuke.zoom( zoomScale, [ xC, yC ])
+
+ def JumpToNode(self,targetNodeName) :
+ if self.myParrent.settings["zoomEffect"] == "Enable":
+ threading.Thread( target=self.JumpToTargetWithZoomEffect, args=(targetNodeName,)).start()
+ else:
+ self.JumpToTargetWithoutEffect(targetNodeName)
+
+ if self.myParrent.settings["shakeEffect"] == "Enable":
+ threading.Thread( target=self.JumpToTargetAndShakeNode, args=(targetNodeName,)).start()
+
def mousePressEvent(self, event):
navigationEffect = "JumpAndShake"
@@ -307,13 +328,7 @@ def mousePressEvent(self, event):
nuke.message("Selected node exists in the list, you can delete or edite that")
# jump to bookmark
else :
- if self.myParrent.settings["zoomEffect"] == "Enable":
- threading.Thread( target=self.JumpToTargetWithZoomEffect, args=(self.nodeName,)).start()
- else:
- self.JumpToTargetWithoutEffect(self.nodeName)
-
- if self.myParrent.settings["shakeEffect"] == "Enable":
- threading.Thread( target=self.JumpToTargetAndShakeNode, args=(self.nodeName,)).start()
+ self.JumpToNode(self.nodeName)
if event.buttons() == Qt.RightButton:
if self.nodeName != "empty":
@@ -331,6 +346,7 @@ def mousePressEvent(self, event):
bookmarkData = {"nodeName": self.nodeName,"title": title, "index": index, "shortcut" : shortcut}
model.Bookmarks.UpdateBookmarkData(bookmarkData)
+ updateShortcuts()
self.myParrent.close()
@@ -438,7 +454,7 @@ def OpenTemplatesWindow(self) :
self.templatesWindowInstance.show()
def OpenEditBookmarksWindow(self) :
- self.editBookmarksInstance = EditBookmarks()
+ self.editBookmarksInstance = EditBookmarksWindow()
self.editBookmarksInstance.show()
@@ -501,8 +517,13 @@ def __init__(self,nodeName,type,index):
-# url(./icons
-#
+
+ ################################################################################
+## ui_ .py changes needed for new version from qt designer :
+## add import os
+## Replace :
+## u"../Km_NodeGraphEN/icons
+## os.path.dirname(__file__)+"/icons
@@ -531,6 +552,9 @@ def __init__(self):
self.shadow.setColor(QColor(0, 0, 0, 100))
self.frame.setGraphicsEffect(self.shadow)
+ # remove text shadows
+ self.RemoveDefaultTextShadow()
+
self.settings = model.Settings().Load()
# Setup UI
self.horizontalSlider_ZoomScale.setMinimum(5)
@@ -543,6 +567,8 @@ def __init__(self):
self.checkBox_zoom_effect.setStyleSheet(checkBoxStyle)
self.checkBox_shake_effect.setStyleSheet(checkBoxStyle)
self.checkBox_fade_effect.setStyleSheet(checkBoxStyle)
+ # adding window drag to title bar
+ self.AddWindowDragToTitleBar()
@@ -550,10 +576,45 @@ def __init__(self):
self.pushButton_save.clicked.connect(self.applySettings)
self.pushButton_setDefault.clicked.connect(self.SetDefault)
self.pushButton_OpenPDF.clicked.connect(self.open_documentation)
+ self.pushButton_BuyMeACoffee.clicked.connect(self.BuyMeACoffee)
+ self.pushButton_minimize.clicked.connect(self.showMinimized)
+ self.pushButton_close.clicked.connect(self.close)
+
self.updateUI()
+
+ def RemoveDefaultTextShadow(self):
+ """Get Rid of nuke pyside default style that apply shadow for texts"""
+ #self.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_save.setStyle(QStyleFactory.create('Windows'))
+ self.label_2.setStyle(QStyleFactory.create('Windows'))
+ self.label_7.setStyle(QStyleFactory.create('Windows'))
+ self.label_plugins_version.setStyle(QStyleFactory.create('Windows'))
+ self.label_credit.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_setDefault.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_BuyMeACoffee.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_OpenPDF.setStyle(QStyleFactory.create('Windows'))
+
+ # for adding window drag to title bar
+ def mousePressEvent(self, event ) :
+ self.clickPosition = event.globalPos()
+ # adding window drag to title bar
+ def AddWindowDragToTitleBar(self):
+ def moveWindow(e):
+ if self.isMaximized() == False:
+ if e.buttons() == Qt.LeftButton :
+ self.move(self.pos() + e.globalPos() - self.clickPosition)
+ self.clickPosition = e.globalPos()
+ e.accept()
+ self.frame_top_btns.mouseMoveEvent = moveWindow
+
+
+ def BuyMeACoffee(self) :
+ url = "https://www.buymeacoffee.com/karamian"
+ webbrowser.open(url)
+
def updateUI(self):
if self.settings["shakeEffect"] == "Enable" :
@@ -606,7 +667,7 @@ def applySettings(self):
model.Settings().Save(self.settings)
menu = nuke.menu("Nuke")
Km_NGJ = menu.addMenu("KmTools")
- Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.start()",self.settings["shortcut"])
+ Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.ShowMainWindow()",self.settings["shortcut"])
self.close()
def SetDefault(self) :
@@ -623,7 +684,7 @@ def SetDefault(self) :
model.Settings().Save(self.settings)
menu = nuke.menu("Nuke")
Km_NGJ = menu.addMenu("KmTools")
- Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.start()",self.settings["shortcut"])
+ Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.ShowMainWindow()",self.settings["shortcut"])
self.updateUI()
def open_documentation(self):
@@ -637,24 +698,95 @@ class TemplatesWindow(QMainWindow,Ui_TemplatesWindowUI):
def __init__(self,parent=None):
super(TemplatesWindow, self).__init__(parent)
self.setupUi(self)
- self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
- self.setWindowFlags(Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint) # disable resize
- self.label_credit.setText('''By Hossein Karamian''')
+ #self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
+ #self.setWindowFlags(Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint) # disable resize
+
+ # remove text shadows
+ self.RemoveDefaultTextShadow()
+
+ ## REMOVE TITLE BAR
+ self.setWindowFlags(Qt.FramelessWindowHint)
+ self.setAttribute(Qt.WA_TranslucentBackground)
+
+ ## DROP SHADOW EFFECT
+ self.shadow = QGraphicsDropShadowEffect(self)
+ self.shadow.setBlurRadius(20)
+ self.shadow.setXOffset(0)
+ self.shadow.setYOffset(0)
+ self.shadow.setColor(QColor(0, 0, 0, 100))
+ self.frame.setGraphicsEffect(self.shadow)
+
+ # adding window drag to title bar
+ self.AddWindowDragToTitleBar()
+
+ self.label_credit.setText('''By Hossein Karamian''')
self.label_credit.setOpenExternalLinks(True)
#self.setWindowFlags(Qt.WindowStaysOnTopHint)
# UpdateUI
self.UpdateUI()
+
+ #qomboBoxStyle = 'QComboBox::drop-down {background-image: url('+os.path.dirname(__file__).replace(os.sep,'/')+'/icons/cil-arrow-bottom.png);}'
+# self.comboBox_TemplateOverride.setStyleSheet(u"QComboBox{\n"
+# " background-color:rgb(40, 43, 50);\n"
+# " border-radius: 5px;\n"
+# " border: 2px solid rgb(40, 43, 50);\n"
+# " padding: 5px;\n"
+# " padding-left: 10px;\n"
+# "}\n"
+# "QComboBox::drop-down {\n"
+# " subcontrol-origin: padding;\n"
+# " subcontrol-position: top right;\n"
+# " width: 25px; \n"
+# " border-left-width: 3px;\n"
+# " border-left-color: rgba(39, 44, 54, 150);\n"
+# " border-left-style: solid;\n"
+# " border-top-right-radius: 3px;\n"
+# " border-bottom-right-radius: 3px; \n"
+# " background-image: url("+os.path.dirname(__file__).replace(os.sep,'/')+"/icons/cil-arrow-bottom.png);\n"
+# " background-position: center;\n"
+# " background-repeat: no-reperat;\n"
+# " }")
+
# Signals
+ self.pushButton_minimize.clicked.connect(self.showMinimized)
+ self.pushButton_close.clicked.connect(self.close)
self.pushButton_remove.clicked.connect(self.removeTemplate)
self.pushButton_load.clicked.connect(self.LoadTemplate)
self.pushButton_add.clicked.connect(self.AddTemplate)
- self.comboBox_TemplateOverride.currentIndexChanged.connect(self.ComboBoxTemplateOverrideChange)
- self.checkBox_TemplateOverride.stateChanged['int'].connect(self.CheckBoxTemplateOverrideChange)
+ # self.comboBox_TemplateOverride.currentIndexChanged.connect(self.ComboBoxTemplateOverrideChange)
+ # self.checkBox_TemplateOverride.stateChanged['int'].connect(self.CheckBoxTemplateOverrideChange)
self.listWidget_templateList.currentItemChanged.connect(self.selectedTemplateItemsListUpdateUI)
+
+ checkBoxStyle = 'QCheckBox::indicator:checked {background-image: url('+os.path.dirname(__file__).replace(os.sep,'/')+'/icons/cil-check-alt.png);}'
+ # self.checkBox_TemplateOverride.setStyleSheet(checkBoxStyle)
+
+
+
+ def RemoveDefaultTextShadow(self):
+ """Get Rid of nuke pyside default style that apply shadow for texts"""
+ #self.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_load.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_remove.setStyle(QStyleFactory.create('Windows'))
+ self.pushButton_add.setStyle(QStyleFactory.create('Windows'))
+
+
+ # for adding window drag to title bar
+ def mousePressEvent(self, event ) :
+ self.clickPosition = event.globalPos()
+ # adding window drag to title bar
+ def AddWindowDragToTitleBar(self):
+ def moveWindow(e):
+ if self.isMaximized() == False:
+ if e.buttons() == Qt.LeftButton :
+ self.move(self.pos() + e.globalPos() - self.clickPosition)
+ self.clickPosition = e.globalPos()
+ e.accept()
+ self.frame_top_btns.mouseMoveEvent = moveWindow
+
def UpdateUI(self) :
self.settings = model.Settings().Load()
currentProjectBookmarks = model.Bookmarks.Load()
@@ -664,7 +796,7 @@ def UpdateUI(self) :
self.listWidget_templateItems.clear()
self.listWidget_newTemplateItems.clear() # clear list widget
self.listWidget_templateList.clear() # clear list widget
- self.comboBox_TemplateOverride.clear()
+ # self.comboBox_TemplateOverride.clear()
# new Template Items listWidget
itemCounter = 0
@@ -674,45 +806,45 @@ def UpdateUI(self) :
itemCounter += 1
# templates list
- self.overrideTemplateIndex = -1 # if override template file not exits
+ # self.overrideTemplateIndex = -1 # if override template file not exits
itemCounter = 0
for templateItem in self.templatesList :
QListWidgetItem(self.listWidget_templateList)
self.listWidget_templateList.item(itemCounter).setText(templateItem["templateName"])
- self.comboBox_TemplateOverride.addItem(templateItem["templateName"])
- if templateItem["fileName"] == self.settings["globalOverrideTemplateFileName"] :
- self.overrideTemplateIndex = itemCounter
+ # self.comboBox_TemplateOverride.addItem(templateItem["templateName"])
+ # if templateItem["fileName"] == self.settings["globalOverrideTemplateFileName"] :
+ # self.overrideTemplateIndex = itemCounter
itemCounter += 1
- if self.overrideTemplateIndex != -1 :
- self.comboBox_TemplateOverride.setCurrentIndex(self.overrideTemplateIndex)
+ # if self.overrideTemplateIndex != -1 :
+ # self.comboBox_TemplateOverride.setCurrentIndex(self.overrideTemplateIndex)
- if self.settings["templateGlobalOverride"] == "Enable" :
- self.checkBox_TemplateOverride.setChecked(True)
- self.comboBox_TemplateOverride.setEnabled(True)
- else :
- self.checkBox_TemplateOverride.setChecked(False)
- self.comboBox_TemplateOverride.setEnabled(False)
+ # if self.settings["templateGlobalOverride"] == "Enable" :
+ # self.checkBox_TemplateOverride.setChecked(True)
+ # self.comboBox_TemplateOverride.setEnabled(True)
+ # else :
+ # self.checkBox_TemplateOverride.setChecked(False)
+ # self.comboBox_TemplateOverride.setEnabled(False)
- def CheckBoxTemplateOverrideChange(self):
- if self.checkBox_TemplateOverride.isChecked():
- self.comboBox_TemplateOverride.setEnabled(True)
- self.settings["templateGlobalOverride"] = "Enable"
- else :
- self.comboBox_TemplateOverride.setEnabled(False)
- self.settings["templateGlobalOverride"] = "Disable"
- if self.comboBox_TemplateOverride.count != 0 :
- currentIndex = self.comboBox_TemplateOverride.currentIndex()
- self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
- model.Settings.Save(self.settings)
-
- def ComboBoxTemplateOverrideChange(self):
- currentIndex = self.comboBox_TemplateOverride.currentIndex()
- self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
- model.Settings.Save(self.settings)
+ # def CheckBoxTemplateOverrideChange(self):
+ # if self.checkBox_TemplateOverride.isChecked():
+ # self.comboBox_TemplateOverride.setEnabled(True)
+ # self.settings["templateGlobalOverride"] = "Enable"
+ # else :
+ # self.comboBox_TemplateOverride.setEnabled(False)
+ # self.settings["templateGlobalOverride"] = "Disable"
+ # if self.comboBox_TemplateOverride.count != 0 :
+ # currentIndex = self.comboBox_TemplateOverride.currentIndex()
+ # self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
+ # model.Settings.Save(self.settings)
+
+ # def ComboBoxTemplateOverrideChange(self):
+ # currentIndex = self.comboBox_TemplateOverride.currentIndex()
+ # self.settings["globalOverrideTemplateFileName"] = self.templatesList[currentIndex]["fileName"]
+ # model.Settings.Save(self.settings)
def selectedTemplateItemsListUpdateUI(self):
self.listWidget_templateItems.clear()
@@ -748,6 +880,7 @@ def LoadTemplate(self) :
self.raise_()
self.UpdateUI()
self.listWidget_templateList.setCurrentRow(selectedTemplateIndex)
+ updateShortcuts()
def AddTemplate(self) :
templateName = self.lineEdit_templateName.text()
@@ -765,27 +898,74 @@ def AddTemplate(self) :
from Ui_EditBookmarks import Ui_EditBookmarksWindowUI
-class EditBookmarks(QMainWindow,Ui_EditBookmarksWindowUI):
+class EditBookmarksWindow(QMainWindow,Ui_EditBookmarksWindowUI):
def __init__(self,parent=None):
- super(EditBookmarks, self).__init__(parent)
+ super(EditBookmarksWindow, self).__init__(parent)
self.setupUi(self)
self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
self.setWindowFlags(Qt.WindowStaysOnTopHint)
#self.setWindowFlags(Qt.WindowStaysOnTopHint)
- # UpdateUI
- self.UpdateUI()
+ ## REMOVE TITLE BAR
+ self.setWindowFlags(Qt.FramelessWindowHint)
+ self.setAttribute(Qt.WA_TranslucentBackground)
+
+ ## DROP SHADOW EFFECT
+ self.shadow = QGraphicsDropShadowEffect(self)
+ self.shadow.setBlurRadius(20)
+ self.shadow.setXOffset(0)
+ self.shadow.setYOffset(0)
+ self.shadow.setColor(QColor(0, 0, 0, 100))
+ self.frame.setGraphicsEffect(self.shadow)
+
+ # Setup UI
+ self.label_credit.setText('''By Hossein Karamian''')
+ self.label_credit.setOpenExternalLinks(True)
+
+ # adding window drag to title bar
+ self.AddWindowDragToTitleBar()
+ # remove text shadows
+ self.RemoveDefaultTextShadow()
+
+
+ # Signals
self.pushButton_reset.clicked.connect(self.resetBookmarks)
self.pushButton_removeItem.clicked.connect(self.removeABookmark)
self.pushButton_shiftUp.clicked.connect(self.ShiftUpBookmark)
self.pushButton_shiftDown.clicked.connect(self.ShiftDownBookmark)
self.pushButton_createFromBackdrops.clicked.connect(self.createBookmarksFromBackdrops)
self.pushButton_AddBookmark.clicked.connect(self.AddNewBookmark)
+ self.pushButton_minimize.clicked.connect(self.showMinimized)
+ self.pushButton_close.clicked.connect(self.close)
+ self.tableWidget_BookmarksList.itemChanged.connect(self.BookmarkUpdate)
+ # UpdateUI
+ self.UpdateUI()
#self.listWidget_templateList.currentItemChanged.connect(self.selectedTemplateItemsListUpdateUI)
+ def RemoveDefaultTextShadow(self):
+ """Get Rid of nuke pyside default style that apply shadow for texts"""
+ #self.setStyle(QStyleFactory.create('Windows'))
+ self.label_credit.setStyle(QStyleFactory.create('Windows'))
+ self.label_plugins_version.setStyle(QStyleFactory.create('Windows'))
+ self.label_2.setStyle(QStyleFactory.create('Windows'))
+ self.label_7.setStyle(QStyleFactory.create('Windows'))
+
+ def BookmarkUpdate(self, item) :
+ """cell value change signal function"""
+ row = item.row()
+ #col = item.column()
+ nodeName = self.tableWidget_BookmarksList.item(row,1).text()
+ title = self.tableWidget_BookmarksList.item(row,2).text()
+ shortcut = self.tableWidget_BookmarksList.item(row,3).text()
+ bookmarkData = {"nodeName": nodeName,"title": title, "index": row, "shortcut" : shortcut}
+ model.Bookmarks.UpdateBookmarkData(bookmarkData)
+ self.UpdateUI()
+
+
+
def AddNewBookmark(self):
if nuke.selectedNodes() == [] :
# self.msg=QMessageBox()
@@ -887,9 +1067,23 @@ def resetBookmarks(self):
self.UpdateUI()
self.raise_()
- def UpdateUI(self) :
- #self.tableWidget_BookmarksList.clear()
+ # for adding window drag to title bar
+ def mousePressEvent(self, event ) :
+ self.clickPosition = event.globalPos()
+ # adding window drag to title bar
+ def AddWindowDragToTitleBar(self):
+ def moveWindow(e):
+ if self.isMaximized() == False:
+ if e.buttons() == Qt.LeftButton :
+ self.move(self.pos() + e.globalPos() - self.clickPosition)
+ self.clickPosition = e.globalPos()
+ e.accept()
+ self.frame_top_btns.mouseMoveEvent = moveWindow
+
+ def UpdateUI(self) :
+ updateShortcuts()
+ self.tableWidget_BookmarksList.blockSignals(True) # disable Item Change signal
# new Template Items listWidget
currentProjectBookmarks = model.Bookmarks.Load()
settings = model.Settings.Load()
@@ -923,6 +1117,8 @@ def UpdateUI(self) :
item = self.CreateWidgetItemAndSetFlags(shortcut,isEmpty)
self.tableWidget_BookmarksList.setItem(index,3,item) # shortcut column
+ self.tableWidget_BookmarksList.blockSignals(False) # enable Item Change signal
+
def CreateWidgetItemAndSetFlags(self,text,IsDisable=False) :
widgetItem = QTableWidgetItem()
if IsDisable : widgetItem.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled)
@@ -939,14 +1135,35 @@ def CreateWidgetItemAndSetFlags(self,text,IsDisable=False) :
## u"../Km_NodeGraphEN/icons
## os.path.dirname(__file__)+"/icons
-
-def showSettings():
+def ShowSettings():
global settingsWindowInstance
settingsWindowInstance = SettingsWindow()
settingsWindowInstance.show()
-def start():
+def ShowEditBookmarksWindow():
+ global editBookmarksWindowInstance
+ editBookmarksWindowInstance = EditBookmarksWindow()
+ editBookmarksWindowInstance.show()
+
+def ShowTemplatesWindow():
+ global templatesWindowInstance
+ templatesWindowInstance = TemplatesWindow()
+ templatesWindowInstance.show()
+
+def ShowMainWindow():
"""Start up function for MainWindow"""
global mainWindowInstance # pylint: disable=global-statement
mainWindowInstance = MainWindow()
- mainWindowInstance.show()
\ No newline at end of file
+ mainWindowInstance.show()
+
+
+def updateShortcuts():
+ """create an instance of main window to update bookmarks in top menu & shortcuts
+ (we define each bookmark shortcut in BookmarkButton Class) """
+ menu = nuke.menu("Nuke")
+ tappmenu = menu.findItem('KmTools/Km NodeGraph Easy Navigate')
+ tappmenu.removeItem('Bookmarks') # remove older shortcuts
+ MainWindow() # define shortcuts
+
+# add nuke callbacks
+nuke.addOnScriptLoad(updateShortcuts)
diff --git a/Km_NodeGraphEN/Ui_EditBookmarks.py b/Km_NodeGraphEN/Ui_EditBookmarks.py
index 5758061..d8c9c49 100644
--- a/Km_NodeGraphEN/Ui_EditBookmarks.py
+++ b/Km_NodeGraphEN/Ui_EditBookmarks.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - Bookmarks ListYOUAbY.ui'
+## Form generated from reading UI file 'panel_v02 - Bookmarks ListKFdroA.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -15,28 +15,398 @@
QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
-import os
+import os
class Ui_EditBookmarksWindowUI(object):
def setupUi(self, EditBookmarksWindowUI):
if not EditBookmarksWindowUI.objectName():
EditBookmarksWindowUI.setObjectName(u"EditBookmarksWindowUI")
- EditBookmarksWindowUI.resize(599, 492)
+ EditBookmarksWindowUI.resize(641, 610)
self.centralwidget = QWidget(EditBookmarksWindowUI)
self.centralwidget.setObjectName(u"centralwidget")
- self.groupBox = QGroupBox(self.centralwidget)
- self.groupBox.setObjectName(u"groupBox")
- self.groupBox.setGeometry(QRect(20, 10, 561, 371))
- self.tableWidget_BookmarksList = QTableWidget(self.groupBox)
+ self.frame = QFrame(self.centralwidget)
+ self.frame.setObjectName(u"frame")
+ self.frame.setGeometry(QRect(10, 10, 611, 591))
+ self.frame.setStyleSheet(u"QLabel {\n"
+"color: rgb(223, 223, 223);\n"
+"}\n"
+"\n"
+"QFrame {\n"
+" background-color: rgb(61, 64, 71);\n"
+" border-radius : 10px;\n"
+"}\n"
+"\n"
+"/* LINE EDIT */\n"
+"QLineEdit {\n"
+" background-color: rgb(40, 43, 50);\n"
+" border-radius: 5px;\n"
+" border: 2px solid rgb(40, 43, 50);\n"
+"}\n"
+"QLineEdit:hover {\n"
+" border: 2px solid rgb(64, 71, 88);\n"
+"}\n"
+"QLineEdit:focus {\n"
+" border: 2px solid rgb(91, 101, 124);\n"
+"}\n"
+"\n"
+"/* SCROLL BARS */\n"
+"QScrollBar:horizontal {\n"
+" border: none;\n"
+" background: rgb(52, 59, 72);\n"
+" height: 14px;\n"
+" margin: 0px 21px 0 21px;\n"
+" border-radius: 0px;\n"
+"}\n"
+"QScrollBar::handle:horizontal {\n"
+" background: rgb(85, 170, 255);\n"
+" min-width: 25px;\n"
+" border-radius: 7px\n"
+"}\n"
+"QScrollBar::add-line:horizontal {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-right-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: right;\n"
+" subcontrol-origin: margin;\n"
+""
+ "}\n"
+"QScrollBar::sub-line:horizontal {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-bottom-left-radius: 7px;\n"
+" subcontrol-position: left;\n"
+" subcontrol-origin: margin;\n"
+"}\n"
+"QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+"QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+" QScrollBar:vertical {\n"
+" border: none;\n"
+" background: rgb(61, 64, 71);\n"
+" width: 14px;\n"
+" margin: 21px 0 21px 0;\n"
+" border-radius: 0px;\n"
+" }\n"
+" QScrollBar::handle:vertical { \n"
+" background: rgb(255, 212, 95);\n"
+" min-height: 25px;\n"
+" border-radius: 7px\n"
+" }\n"
+" QScrollBar::add-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-bottom-left-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: bottom;\n"
+" "
+ " subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar::sub-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-top-right-radius: 7px;\n"
+" subcontrol-position: top;\n"
+" subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+" QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+"/* CHECKBOX */\n"
+"QCheckBox::indicator {\n"
+" border: 3px solid rgb(52, 59, 72);\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QCheckBox::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QCheckBox::indicator:checked {\n"
+" background: 3px solid rgb(52, 59, 72);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+" background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);\n"
+"}\n"
+"\n"
+"/* RADIO BUTTON */\n"
+""
+ "QRadioButton::indicator {\n"
+" border: 3px solid rgb(52, 59, 72);\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QRadioButton::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QRadioButton::indicator:checked {\n"
+" background: 3px solid rgb(94, 106, 130);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+"}\n"
+"\n"
+"/* COMBOBOX */\n"
+"QComboBox{\n"
+" background-color: rgb(27, 29, 35);\n"
+" border-radius: 5px;\n"
+" border: 2px solid rgb(27, 29, 35);\n"
+" padding: 5px;\n"
+" padding-left: 10px;\n"
+"}\n"
+"QComboBox:hover{\n"
+" border: 2px solid rgb(64, 71, 88);\n"
+"}\n"
+"QComboBox::drop-down {\n"
+" subcontrol-origin: padding;\n"
+" subcontrol-position: top right;\n"
+" width: 25px; \n"
+" border-left-width: 3px;\n"
+" border-left-color: rgba(39, 44, 54, 150);\n"
+" border-left-style: solid;\n"
+" border-top-right-radius: 3px;\n"
+" border-bottom-right-radius: 3px; \n"
+" background-image: url(:/16x16/icons/16x16/cil-arrow-bottom.png);\n"
+""
+ " background-position: center;\n"
+" background-repeat: no-reperat;\n"
+" }\n"
+"QComboBox QAbstractItemView {\n"
+" color: rgb(85, 170, 255); \n"
+" background-color: rgb(27, 29, 35);\n"
+" padding: 10px;\n"
+" selection-background-color: rgb(39, 44, 54);\n"
+"}\n"
+"\n"
+"/* SLIDERS */\n"
+"QSlider::groove:horizontal {\n"
+" border-radius: 9px;\n"
+" height: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QSlider::groove:horizontal:hover {\n"
+" background-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:horizontal {\n"
+" background-color: rgb(255, 212, 95);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:horizontal:hover {\n"
+" background-color: rgb(255, 222, 110);\n"
+"}\n"
+"QSlider::handle:horizontal:pressed {\n"
+" background-color: rgb(255, 212, 95);\n"
+"}\n"
+"\n"
+"QSlider::groove:vertical {\n"
+" border-radius: 9px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, "
+ "59, 72);\n"
+"}\n"
+"QSlider::groove:vertical:hover {\n"
+" background-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:vertical {\n"
+" background-color: rgb(85, 170, 255);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:vertical:hover {\n"
+" background-color: rgb(105, 180, 255);\n"
+"}\n"
+"QSlider::handle:vertical:pressed {\n"
+" background-color: rgb(65, 130, 195);\n"
+"}\n"
+"\n"
+"")
+ self.frame.setFrameShape(QFrame.StyledPanel)
+ self.frame.setFrameShadow(QFrame.Raised)
+ self.frame_top_btns = QFrame(self.frame)
+ self.frame_top_btns.setObjectName(u"frame_top_btns")
+ self.frame_top_btns.setGeometry(QRect(0, 0, 611, 42))
+ self.frame_top_btns.setMaximumSize(QSize(16777215, 42))
+ self.frame_top_btns.setStyleSheet(u"background-color: rgb(40, 43, 50);\n"
+"border-bottom-left-radius: 1px;\n"
+"border-bottom-right-radius: 1px;")
+ self.frame_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_4 = QHBoxLayout(self.frame_top_btns)
+ self.horizontalLayout_4.setSpacing(0)
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
+ self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.frame_label_top_btns = QFrame(self.frame_top_btns)
+ self.frame_label_top_btns.setObjectName(u"frame_label_top_btns")
+ sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.frame_label_top_btns.sizePolicy().hasHeightForWidth())
+ self.frame_label_top_btns.setSizePolicy(sizePolicy)
+ self.frame_label_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_label_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_10 = QHBoxLayout(self.frame_label_top_btns)
+ self.horizontalLayout_10.setSpacing(0)
+ self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
+ self.horizontalLayout_10.setContentsMargins(5, 0, 10, 0)
+ self.label_16 = QLabel(self.frame_label_top_btns)
+ self.label_16.setObjectName(u"label_16")
+ self.label_16.setMaximumSize(QSize(3, 16777215))
+
+ self.horizontalLayout_10.addWidget(self.label_16)
+
+ self.label_9 = QLabel(self.frame_label_top_btns)
+ self.label_9.setObjectName(u"label_9")
+ self.label_9.setMinimumSize(QSize(20, 0))
+ self.label_9.setMaximumSize(QSize(20, 20))
+ self.label_9.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-menu.png"))
+ self.label_9.setScaledContents(True)
+ self.label_9.setAlignment(Qt.AlignCenter)
+ self.label_9.setMargin(0)
+
+ self.horizontalLayout_10.addWidget(self.label_9)
+
+ self.label_title_bar_top = QLabel(self.frame_label_top_btns)
+ self.label_title_bar_top.setObjectName(u"label_title_bar_top")
+ font = QFont()
+ font.setFamily(u"Segoe UI Semibold")
+ font.setPointSize(11)
+ font.setBold(False)
+ font.setWeight(50)
+ self.label_title_bar_top.setFont(font)
+ self.label_title_bar_top.setStyleSheet(u"background: transparent;\n"
+"")
+ self.label_title_bar_top.setMargin(5)
+
+ self.horizontalLayout_10.addWidget(self.label_title_bar_top)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_label_top_btns)
+
+ self.frame_btns_right = QFrame(self.frame_top_btns)
+ self.frame_btns_right.setObjectName(u"frame_btns_right")
+ sizePolicy.setHeightForWidth(self.frame_btns_right.sizePolicy().hasHeightForWidth())
+ self.frame_btns_right.setSizePolicy(sizePolicy)
+ self.frame_btns_right.setMaximumSize(QSize(120, 16777215))
+ self.frame_btns_right.setFrameShape(QFrame.NoFrame)
+ self.frame_btns_right.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_5 = QHBoxLayout(self.frame_btns_right)
+ self.horizontalLayout_5.setSpacing(0)
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
+ self.pushButton_minimize = QPushButton(self.frame_btns_right)
+ self.pushButton_minimize.setObjectName(u"pushButton_minimize")
+ sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.pushButton_minimize.sizePolicy().hasHeightForWidth())
+ self.pushButton_minimize.setSizePolicy(sizePolicy1)
+ self.pushButton_minimize.setMinimumSize(QSize(40, 0))
+ self.pushButton_minimize.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_minimize.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-radius : 0px;\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(40, 50, 62);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(os.path.dirname(__file__)+"/icons/cil-window-minimize.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_minimize.setIcon(icon)
+
+ self.horizontalLayout_5.addWidget(self.pushButton_minimize)
+
+ self.pushButton_close = QPushButton(self.frame_btns_right)
+ self.pushButton_close.setObjectName(u"pushButton_close")
+ sizePolicy1.setHeightForWidth(self.pushButton_close.sizePolicy().hasHeightForWidth())
+ self.pushButton_close.setSizePolicy(sizePolicy1)
+ self.pushButton_close.setMinimumSize(QSize(40, 0))
+ self.pushButton_close.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_close.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-top-right-radius: 10px;\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(40, 50, 62);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(os.path.dirname(__file__)+"/icons/cil-x.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_close.setIcon(icon1)
+
+ self.horizontalLayout_5.addWidget(self.pushButton_close)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_btns_right, 0, Qt.AlignRight)
+
+ self.frame_2 = QFrame(self.frame)
+ self.frame_2.setObjectName(u"frame_2")
+ self.frame_2.setGeometry(QRect(20, 59, 571, 411))
+ self.frame_2.setStyleSheet(u"QFrame {\n"
+"background-color: rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"")
+ self.frame_2.setFrameShape(QFrame.StyledPanel)
+ self.frame_2.setFrameShadow(QFrame.Raised)
+ self.label_2 = QLabel(self.frame_2)
+ self.label_2.setObjectName(u"label_2")
+ self.label_2.setGeometry(QRect(0, 5, 571, 31))
+ font1 = QFont()
+ font1.setFamily(u"Segoe UI Semibold")
+ font1.setPointSize(13)
+ self.label_2.setFont(font1)
+ self.label_2.setAlignment(Qt.AlignCenter)
+ self.tableWidget_BookmarksList = QTableWidget(self.frame_2)
if (self.tableWidget_BookmarksList.columnCount() < 4):
self.tableWidget_BookmarksList.setColumnCount(4)
+ font2 = QFont()
+ font2.setFamily(u"Segoe UI")
__qtablewidgetitem = QTableWidgetItem()
+ __qtablewidgetitem.setFont(font2);
self.tableWidget_BookmarksList.setHorizontalHeaderItem(0, __qtablewidgetitem)
__qtablewidgetitem1 = QTableWidgetItem()
+ __qtablewidgetitem1.setFont(font2);
self.tableWidget_BookmarksList.setHorizontalHeaderItem(1, __qtablewidgetitem1)
__qtablewidgetitem2 = QTableWidgetItem()
+ __qtablewidgetitem2.setFont(font2);
self.tableWidget_BookmarksList.setHorizontalHeaderItem(2, __qtablewidgetitem2)
__qtablewidgetitem3 = QTableWidgetItem()
+ __qtablewidgetitem3.setFont(font2);
self.tableWidget_BookmarksList.setHorizontalHeaderItem(3, __qtablewidgetitem3)
if (self.tableWidget_BookmarksList.rowCount() < 2):
self.tableWidget_BookmarksList.setRowCount(2)
@@ -57,53 +427,87 @@ def setupUi(self, EditBookmarksWindowUI):
__qtablewidgetitem11 = QTableWidgetItem()
self.tableWidget_BookmarksList.setItem(1, 2, __qtablewidgetitem11)
self.tableWidget_BookmarksList.setObjectName(u"tableWidget_BookmarksList")
- self.tableWidget_BookmarksList.setGeometry(QRect(20, 20, 521, 341))
+ self.tableWidget_BookmarksList.setGeometry(QRect(10, 33, 551, 321))
+ self.tableWidget_BookmarksList.setStyleSheet(u"QTableWidget { \n"
+" background-color: rgb(51, 54, 63);\n"
+" padding: 10px;\n"
+" border-radius: 5px;\n"
+" gridline-color: rgb(61, 64, 71);\n"
+" border-bottom: 1px solid rgb(51, 54, 63);\n"
+" color : rgb(190, 190, 198);\n"
+"}\n"
+"QTableWidget::item{\n"
+" border-color: rgb(61, 64, 71);\n"
+" padding-left: 5px;\n"
+" padding-right: 5px;\n"
+" gridline-color: rgb(61, 64, 71);\n"
+"}\n"
+"QTableWidget::item:selected{\n"
+" background-color: rgb(40, 43, 50);\n"
+" background-color: rgb(40, 43, 50);\n"
+" border-radius: 15px;\n"
+" color : rgb(190, 190, 198);\n"
+"}\n"
+"QScrollBar:horizontal {\n"
+" border: none;\n"
+" background: rgb(255, 212, 95);\n"
+" height: 14px;\n"
+" margin: 0px 21px 0 21px;\n"
+" border-radius: 0px;\n"
+"}\n"
+" QScrollBar:vertical {\n"
+" border: none;\n"
+" background: rgb(61, 64, 71);\n"
+" width: 14px;\n"
+" margin: 21px 0 21px 0;\n"
+" border-radius: 0px;\n"
+" }\n"
+"QHeaderView::section{\n"
+" Background-color: rgb(51, 54, 63);\n"
+" max-width: 30px;\n"
+" border: 1px solid rgb(61, 64, 71"
+ ");\n"
+" border-style: none;\n"
+" border-bottom: 1px solid rgb(61, 64, 71);\n"
+" border-right: 1px solid rgb(61, 64, 71);\n"
+" font-size : 13px\n"
+"}\n"
+"QTableWidget::horizontalHeader { \n"
+" background-color: rgb(102, 157, 178);\n"
+"}\n"
+"QHeaderView::section:horizontal\n"
+"{\n"
+" border: 1px solid rgb(102, 157, 178);\n"
+" background-color: rgb(102, 157, 178);\n"
+" padding: 3px;\n"
+" border-top-left-radius: 7px;\n"
+" border-top-right-radius: 7px;\n"
+" color : rgb(255, 255, 255);\n"
+"}\n"
+"QHeaderView::section:vertical\n"
+"{\n"
+" border: 1px solid rgb(61, 64, 71);\n"
+"}\n"
+"")
+ self.tableWidget_BookmarksList.setFrameShape(QFrame.NoFrame)
+ self.tableWidget_BookmarksList.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
+ self.tableWidget_BookmarksList.setSelectionMode(QAbstractItemView.SingleSelection)
+ self.tableWidget_BookmarksList.setSelectionBehavior(QAbstractItemView.SelectRows)
self.tableWidget_BookmarksList.setShowGrid(True)
- self.tableWidget_BookmarksList.setGridStyle(Qt.DashLine)
- self.tableWidget_BookmarksList.setSortingEnabled(True)
+ self.tableWidget_BookmarksList.setGridStyle(Qt.SolidLine)
+ self.tableWidget_BookmarksList.setSortingEnabled(False)
self.tableWidget_BookmarksList.setWordWrap(True)
self.tableWidget_BookmarksList.horizontalHeader().setMinimumSectionSize(20)
self.tableWidget_BookmarksList.horizontalHeader().setDefaultSectionSize(100)
self.tableWidget_BookmarksList.horizontalHeader().setHighlightSections(True)
- self.tableWidget_BookmarksList.horizontalHeader().setProperty("showSortIndicator", True)
+ self.tableWidget_BookmarksList.horizontalHeader().setProperty("showSortIndicator", False)
self.tableWidget_BookmarksList.horizontalHeader().setStretchLastSection(True)
self.tableWidget_BookmarksList.verticalHeader().setVisible(False)
self.tableWidget_BookmarksList.verticalHeader().setDefaultSectionSize(30)
- self.layoutWidget = QWidget(self.centralwidget)
- self.layoutWidget.setObjectName(u"layoutWidget")
- self.layoutWidget.setGeometry(QRect(20, 450, 561, 36))
- self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
- self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
- self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
- self.label_plugins_version = QLabel(self.layoutWidget)
- self.label_plugins_version.setObjectName(u"label_plugins_version")
- font = QFont()
- font.setFamily(u"Segoe UI")
- self.label_plugins_version.setFont(font)
-
- self.horizontalLayout_2.addWidget(self.label_plugins_version)
-
- self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
-
- self.horizontalLayout_2.addItem(self.horizontalSpacer_4)
-
- self.verticalLayout = QVBoxLayout()
- self.verticalLayout.setObjectName(u"verticalLayout")
- self.label_8 = QLabel(self.layoutWidget)
- self.label_8.setObjectName(u"label_8")
- self.label_8.setFont(font)
-
- self.verticalLayout.addWidget(self.label_8)
-
-
- self.horizontalLayout_2.addLayout(self.verticalLayout)
-
- self.horizontalLayout_2.setStretch(0, 3)
- self.horizontalLayout_2.setStretch(1, 28)
- self.horizontalLayout_2.setStretch(2, 3)
- self.horizontalLayoutWidget = QWidget(self.centralwidget)
+ self.tableWidget_BookmarksList.verticalHeader().setStretchLastSection(False)
+ self.horizontalLayoutWidget = QWidget(self.frame_2)
self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
- self.horizontalLayoutWidget.setGeometry(QRect(20, 390, 561, 41))
+ self.horizontalLayoutWidget.setGeometry(QRect(0, 360, 561, 41))
self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
@@ -111,27 +515,27 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_shiftUp.setObjectName(u"pushButton_shiftUp")
self.pushButton_shiftUp.setMinimumSize(QSize(35, 35))
self.pushButton_shiftUp.setMaximumSize(QSize(35, 35))
- font1 = QFont()
- font1.setFamily(u"Segoe UI")
- font1.setPointSize(9)
- self.pushButton_shiftUp.setFont(font1)
+ font3 = QFont()
+ font3.setFamily(u"Segoe UI")
+ font3.setPointSize(9)
+ self.pushButton_shiftUp.setFont(font3)
self.pushButton_shiftUp.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon = QIcon()
- icon.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-top.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_shiftUp.setIcon(icon)
+ icon2 = QIcon()
+ icon2.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-top.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_shiftUp.setIcon(icon2)
self.pushButton_shiftUp.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_shiftUp)
@@ -140,24 +544,24 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_shiftDown.setObjectName(u"pushButton_shiftDown")
self.pushButton_shiftDown.setMinimumSize(QSize(35, 35))
self.pushButton_shiftDown.setMaximumSize(QSize(35, 35))
- self.pushButton_shiftDown.setFont(font1)
+ self.pushButton_shiftDown.setFont(font3)
self.pushButton_shiftDown.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon1 = QIcon()
- icon1.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-bottom.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_shiftDown.setIcon(icon1)
+ icon3 = QIcon()
+ icon3.addFile(os.path.dirname(__file__)+"/icons/cil-arrow-circle-bottom.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_shiftDown.setIcon(icon3)
self.pushButton_shiftDown.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_shiftDown)
@@ -166,24 +570,24 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_AddBookmark.setObjectName(u"pushButton_AddBookmark")
self.pushButton_AddBookmark.setMinimumSize(QSize(35, 35))
self.pushButton_AddBookmark.setMaximumSize(QSize(35, 35))
- self.pushButton_AddBookmark.setFont(font1)
+ self.pushButton_AddBookmark.setFont(font3)
self.pushButton_AddBookmark.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon2 = QIcon()
- icon2.addFile(os.path.dirname(__file__)+"/icons/cil-check-circle.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_AddBookmark.setIcon(icon2)
+ icon4 = QIcon()
+ icon4.addFile(os.path.dirname(__file__)+"/icons/cil-check-circle.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_AddBookmark.setIcon(icon4)
self.pushButton_AddBookmark.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_AddBookmark)
@@ -192,24 +596,24 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_removeItem.setObjectName(u"pushButton_removeItem")
self.pushButton_removeItem.setMinimumSize(QSize(35, 35))
self.pushButton_removeItem.setMaximumSize(QSize(35, 35))
- self.pushButton_removeItem.setFont(font1)
+ self.pushButton_removeItem.setFont(font3)
self.pushButton_removeItem.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon3 = QIcon()
- icon3.addFile(os.path.dirname(__file__)+"/icons/cil-x-circle.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_removeItem.setIcon(icon3)
+ icon5 = QIcon()
+ icon5.addFile(os.path.dirname(__file__)+"/icons/cil-x-circle.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_removeItem.setIcon(icon5)
self.pushButton_removeItem.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_removeItem)
@@ -218,24 +622,24 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_createFromBackdrops.setObjectName(u"pushButton_createFromBackdrops")
self.pushButton_createFromBackdrops.setMinimumSize(QSize(35, 35))
self.pushButton_createFromBackdrops.setMaximumSize(QSize(35, 35))
- self.pushButton_createFromBackdrops.setFont(font1)
+ self.pushButton_createFromBackdrops.setFont(font3)
self.pushButton_createFromBackdrops.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon4 = QIcon()
- icon4.addFile(os.path.dirname(__file__)+"/icons/cil-smile.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_createFromBackdrops.setIcon(icon4)
+ icon6 = QIcon()
+ icon6.addFile(os.path.dirname(__file__)+"/icons/cil-smile.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_createFromBackdrops.setIcon(icon6)
self.pushButton_createFromBackdrops.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_createFromBackdrops)
@@ -244,28 +648,88 @@ def setupUi(self, EditBookmarksWindowUI):
self.pushButton_reset.setObjectName(u"pushButton_reset")
self.pushButton_reset.setMinimumSize(QSize(35, 35))
self.pushButton_reset.setMaximumSize(QSize(35, 35))
- self.pushButton_reset.setFont(font1)
+ self.pushButton_reset.setFont(font3)
self.pushButton_reset.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(52, 59, 72);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
" border-radius: 5px; \n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(126, 177, 85);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(57, 65, 80);\n"
-" border: 2px solid rgb(61, 70, 86);\n"
+" background-color:rgb(140, 188, 100);\n"
+" border: 2px solid rgb(140, 188, 100);\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(35, 40, 49);\n"
-" border: 2px solid rgb(43, 50, 61);\n"
+" background-color: rgb(126, 177, 85);\n"
+" border: 2px solid rgb(126, 177, 85);\n"
"}")
- icon5 = QIcon()
- icon5.addFile(os.path.dirname(__file__)+"/icons/cil-trash.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_reset.setIcon(icon5)
+ icon7 = QIcon()
+ icon7.addFile(os.path.dirname(__file__)+"/icons/cil-trash.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_reset.setIcon(icon7)
self.pushButton_reset.setIconSize(QSize(25, 25))
self.horizontalLayout.addWidget(self.pushButton_reset)
+ self.frame_3 = QFrame(self.frame)
+ self.frame_3.setObjectName(u"frame_3")
+ self.frame_3.setGeometry(QRect(20, 490, 571, 61))
+ self.frame_3.setStyleSheet(u"QFrame {\n"
+"background-color:rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"")
+ self.frame_3.setFrameShape(QFrame.StyledPanel)
+ self.frame_3.setFrameShadow(QFrame.Raised)
+ self.label_7 = QLabel(self.frame_3)
+ self.label_7.setObjectName(u"label_7")
+ self.label_7.setGeometry(QRect(-10, 2, 571, 31))
+ self.label_7.setFont(font1)
+ self.label_7.setAlignment(Qt.AlignCenter)
+ self.label_14 = QLabel(self.frame_3)
+ self.label_14.setObjectName(u"label_14")
+ self.label_14.setGeometry(QRect(30, 30, 227, 19))
+ self.label_14.setFont(font2)
+ self.label_icon_2 = QLabel(self.frame_3)
+ self.label_icon_2.setObjectName(u"label_icon_2")
+ self.label_icon_2.setGeometry(QRect(340, 20, 31, 41))
+ self.label_icon_2.setFrameShape(QFrame.NoFrame)
+ self.label_icon_2.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-mouse.png"))
+ self.label_icon_2.setScaledContents(False)
+ self.layoutWidget_2 = QWidget(self.frame)
+ self.layoutWidget_2.setObjectName(u"layoutWidget_2")
+ self.layoutWidget_2.setGeometry(QRect(20, 554, 571, 36))
+ self.horizontalLayout_3 = QHBoxLayout(self.layoutWidget_2)
+ self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
+ self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
+ self.label_plugins_version = QLabel(self.layoutWidget_2)
+ self.label_plugins_version.setObjectName(u"label_plugins_version")
+ font4 = QFont()
+ font4.setFamily(u"Segoe UI Semibold")
+ self.label_plugins_version.setFont(font4)
+ self.label_plugins_version.setStyleSheet(u"color: rgb(200, 200, 200);")
+
+ self.horizontalLayout_3.addWidget(self.label_plugins_version)
+
+ self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+ self.horizontalLayout_3.addItem(self.horizontalSpacer_5)
+
+ self.verticalLayout_2 = QVBoxLayout()
+ self.verticalLayout_2.setObjectName(u"verticalLayout_2")
+ self.label_credit = QLabel(self.layoutWidget_2)
+ self.label_credit.setObjectName(u"label_credit")
+ self.label_credit.setFont(font4)
+ self.label_credit.setStyleSheet(u"color: rgb(200, 200, 200);")
+ self.label_credit.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.verticalLayout_2.addWidget(self.label_credit)
+
+
+ self.horizontalLayout_3.addLayout(self.verticalLayout_2)
+
+ self.horizontalLayout_3.setStretch(0, 3)
+ self.horizontalLayout_3.setStretch(1, 28)
+ self.horizontalLayout_3.setStretch(2, 3)
EditBookmarksWindowUI.setCentralWidget(self.centralwidget)
self.retranslateUi(EditBookmarksWindowUI)
@@ -275,7 +739,18 @@ def setupUi(self, EditBookmarksWindowUI):
def retranslateUi(self, EditBookmarksWindowUI):
EditBookmarksWindowUI.setWindowTitle(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate : Edit Bookmarks", None))
- self.groupBox.setTitle(QCoreApplication.translate("EditBookmarksWindowUI", u"Bookmarks List", None))
+ self.label_16.setText("")
+ self.label_9.setText("")
+ self.label_title_bar_top.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate", None))
+#if QT_CONFIG(tooltip)
+ self.pushButton_minimize.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Minimize", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_minimize.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_close.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Close", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_close.setText("")
+ self.label_2.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Edit Bookmarks", None))
___qtablewidgetitem = self.tableWidget_BookmarksList.horizontalHeaderItem(0)
___qtablewidgetitem.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Index (Order)", None));
___qtablewidgetitem1 = self.tableWidget_BookmarksList.horizontalHeaderItem(1)
@@ -304,8 +779,6 @@ def retranslateUi(self, EditBookmarksWindowUI):
___qtablewidgetitem9.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"tt", None));
self.tableWidget_BookmarksList.setSortingEnabled(__sortingEnabled)
- self.label_plugins_version.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
- self.label_8.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"By Hossein Karamian", None))
#if QT_CONFIG(tooltip)
self.pushButton_shiftUp.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Change order (move up)", None))
#endif // QT_CONFIG(tooltip)
@@ -315,7 +788,7 @@ def retranslateUi(self, EditBookmarksWindowUI):
#endif // QT_CONFIG(tooltip)
self.pushButton_shiftDown.setText("")
#if QT_CONFIG(tooltip)
- self.pushButton_AddBookmark.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Change order (move down)", None))
+ self.pushButton_AddBookmark.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Set Selected Node to Selected Row(Index)", None))
#endif // QT_CONFIG(tooltip)
self.pushButton_AddBookmark.setText("")
#if QT_CONFIG(tooltip)
@@ -330,5 +803,10 @@ def retranslateUi(self, EditBookmarksWindowUI):
self.pushButton_reset.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Remove (Set Empty) All Bookmarks", None))
#endif // QT_CONFIG(tooltip)
self.pushButton_reset.setText("")
+ self.label_7.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Tips", None))
+ self.label_14.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Middle Button : Edit", None))
+ self.label_icon_2.setText("")
+ self.label_plugins_version.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
+ self.label_credit.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"By Hossein Karamian", None))
# retranslateUi
diff --git a/Km_NodeGraphEN/Ui_Settings.py b/Km_NodeGraphEN/Ui_Settings.py
index 7a2d516..b04fdc7 100644
--- a/Km_NodeGraphEN/Ui_Settings.py
+++ b/Km_NodeGraphEN/Ui_Settings.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - SettingscCNRlz.ui'
+## Form generated from reading UI file 'panel_v02 - SettingskglSob.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -21,7 +21,7 @@ class Ui_SettingsWindowUI(object):
def setupUi(self, SettingsWindowUI):
if not SettingsWindowUI.objectName():
SettingsWindowUI.setObjectName(u"SettingsWindowUI")
- SettingsWindowUI.resize(633, 560)
+ SettingsWindowUI.resize(635, 557)
font = QFont()
font.setFamily(u"Segoe UI")
SettingsWindowUI.setFont(font)
@@ -143,13 +143,13 @@ def setupUi(self, SettingsWindowUI):
"QCheckBox::indicator:checked {\n"
" background: 3px solid rgb(52, 59, 72);\n"
" border: 3px solid rgb(52, 59, 72); \n"
-" background-image: url(./icons/cil-check-alt.png);\n"
+" background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);\n"
"}\n"
"\n"
"/* RADIO BUTTON */\n"
"QRadioButton::indicator {\n"
-" border: 3px solid rgb(52, 59, 72"
- ");\n"
+" border: 3px soli"
+ "d rgb(52, 59, 72);\n"
" width: 15px;\n"
" height: 15px;\n"
" border-radius: 10px;\n"
@@ -185,8 +185,8 @@ def setupUi(self, SettingsWindowUI):
" border-bottom-right-radius: 3px; \n"
" background-image: url(:/16x16/icons/16x16/cil-arrow-bottom.png);\n"
" background-position: center;\n"
-" background-repeat: no-reperat;"
- "\n"
+" background-rep"
+ "eat: no-reperat;\n"
" }\n"
"QComboBox QAbstractItemView {\n"
" color: rgb(85, 170, 255); \n"
@@ -226,9 +226,9 @@ def setupUi(self, SettingsWindowUI):
" margin: 0px;\n"
" background-color: rgb(52, 59, 72);\n"
"}\n"
-"QSlider::groove:vertical:hover {\n"
-" backgrou"
- "nd-color: rgb(55, 62, 76);\n"
+"QSlider::groove:vertical:hover"
+ " {\n"
+" background-color: rgb(55, 62, 76);\n"
"}\n"
"QSlider::handle:vertical {\n"
" background-color: rgb(85, 170, 255);\n"
@@ -252,7 +252,9 @@ def setupUi(self, SettingsWindowUI):
self.frame_top_btns.setObjectName(u"frame_top_btns")
self.frame_top_btns.setGeometry(QRect(0, 0, 611, 42))
self.frame_top_btns.setMaximumSize(QSize(16777215, 42))
- self.frame_top_btns.setStyleSheet(u"background-color: rgb(40, 43, 50);")
+ self.frame_top_btns.setStyleSheet(u"background-color: rgb(40, 43, 50);\n"
+"border-bottom-left-radius: 1px;\n"
+"border-bottom-right-radius: 1px;")
self.frame_top_btns.setFrameShape(QFrame.NoFrame)
self.frame_top_btns.setFrameShadow(QFrame.Raised)
self.horizontalLayout_4 = QHBoxLayout(self.frame_top_btns)
@@ -317,53 +319,57 @@ def setupUi(self, SettingsWindowUI):
self.horizontalLayout_5.setSpacing(0)
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
- self.btn_minimize = QPushButton(self.frame_btns_right)
- self.btn_minimize.setObjectName(u"btn_minimize")
+ self.pushButton_minimize = QPushButton(self.frame_btns_right)
+ self.pushButton_minimize.setObjectName(u"pushButton_minimize")
sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
sizePolicy1.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0)
- sizePolicy1.setHeightForWidth(self.btn_minimize.sizePolicy().hasHeightForWidth())
- self.btn_minimize.setSizePolicy(sizePolicy1)
- self.btn_minimize.setMinimumSize(QSize(40, 0))
- self.btn_minimize.setMaximumSize(QSize(40, 16777215))
- self.btn_minimize.setStyleSheet(u"QPushButton { \n"
+ sizePolicy1.setHeightForWidth(self.pushButton_minimize.sizePolicy().hasHeightForWidth())
+ self.pushButton_minimize.setSizePolicy(sizePolicy1)
+ self.pushButton_minimize.setMinimumSize(QSize(40, 0))
+ self.pushButton_minimize.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_minimize.setStyleSheet(u"QPushButton { \n"
" border: none;\n"
" background-color: transparent;\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(52, 59, 72);\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-radius : 0px;\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(85, 170, 255);\n"
+" background-color: rgb(40, 50, 62);\n"
"}")
icon = QIcon()
icon.addFile(os.path.dirname(__file__)+"/icons/cil-window-minimize.png", QSize(), QIcon.Normal, QIcon.Off)
- self.btn_minimize.setIcon(icon)
+ self.pushButton_minimize.setIcon(icon)
- self.horizontalLayout_5.addWidget(self.btn_minimize)
+ self.horizontalLayout_5.addWidget(self.pushButton_minimize)
- self.btn_close = QPushButton(self.frame_btns_right)
- self.btn_close.setObjectName(u"btn_close")
- sizePolicy1.setHeightForWidth(self.btn_close.sizePolicy().hasHeightForWidth())
- self.btn_close.setSizePolicy(sizePolicy1)
- self.btn_close.setMinimumSize(QSize(40, 0))
- self.btn_close.setMaximumSize(QSize(40, 16777215))
- self.btn_close.setStyleSheet(u"QPushButton { \n"
+ self.pushButton_close = QPushButton(self.frame_btns_right)
+ self.pushButton_close.setObjectName(u"pushButton_close")
+ sizePolicy1.setHeightForWidth(self.pushButton_close.sizePolicy().hasHeightForWidth())
+ self.pushButton_close.setSizePolicy(sizePolicy1)
+ self.pushButton_close.setMinimumSize(QSize(40, 0))
+ self.pushButton_close.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_close.setStyleSheet(u"QPushButton { \n"
" border: none;\n"
" background-color: transparent;\n"
"}\n"
"QPushButton:hover {\n"
-" background-color: rgb(52, 59, 72);\n"
-" border-radius : 10px;\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-top-right-radius: 10px;\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
"}\n"
"QPushButton:pressed { \n"
-" background-color: rgb(85, 170, 255);\n"
+" background-color: rgb(40, 50, 62);\n"
"}")
icon1 = QIcon()
icon1.addFile(os.path.dirname(__file__)+"/icons/cil-x.png", QSize(), QIcon.Normal, QIcon.Off)
- self.btn_close.setIcon(icon1)
+ self.pushButton_close.setIcon(icon1)
- self.horizontalLayout_5.addWidget(self.btn_close)
+ self.horizontalLayout_5.addWidget(self.pushButton_close)
self.horizontalLayout_4.addWidget(self.frame_btns_right, 0, Qt.AlignRight)
@@ -583,7 +589,7 @@ def setupUi(self, SettingsWindowUI):
" border: 2px solid rgb(43, 50, 61);\n"
"}")
icon4 = QIcon()
- icon4.addFile(u"../../../../Km_Rendering_Finished/Github/Km-Rendering-Finished/Km_Rendering_Finished/icons/pack/cil-lightbulb.png", QSize(), QIcon.Normal, QIcon.Off)
+ icon4.addFile(os.path.dirname(__file__)+"/icons/cil-lightbulb.png", QSize(), QIcon.Normal, QIcon.Off)
self.pushButton_OpenPDF.setIcon(icon4)
self.label_icon_2 = QLabel(self.frame_3)
self.label_icon_2.setObjectName(u"label_icon_2")
@@ -591,11 +597,11 @@ def setupUi(self, SettingsWindowUI):
self.label_icon_2.setFrameShape(QFrame.NoFrame)
self.label_icon_2.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-mouse.png"))
self.label_icon_2.setScaledContents(False)
- self.pushButton_OpenPDF_2 = QPushButton(self.frame_3)
- self.pushButton_OpenPDF_2.setObjectName(u"pushButton_OpenPDF_2")
- self.pushButton_OpenPDF_2.setGeometry(QRect(394, 110, 130, 31))
- self.pushButton_OpenPDF_2.setFont(font5)
- self.pushButton_OpenPDF_2.setStyleSheet(u"QPushButton {\n"
+ self.pushButton_BuyMeACoffee = QPushButton(self.frame_3)
+ self.pushButton_BuyMeACoffee.setObjectName(u"pushButton_BuyMeACoffee")
+ self.pushButton_BuyMeACoffee.setGeometry(QRect(394, 110, 130, 31))
+ self.pushButton_BuyMeACoffee.setFont(font5)
+ self.pushButton_BuyMeACoffee.setStyleSheet(u"QPushButton {\n"
" border: 2px solid rgb(52, 59, 72);\n"
" border-radius: 5px; \n"
" background-color: rgb(52, 59, 72);\n"
@@ -611,7 +617,7 @@ def setupUi(self, SettingsWindowUI):
"}")
icon5 = QIcon()
icon5.addFile(os.path.dirname(__file__)+"/icons/cil-heart.png", QSize(), QIcon.Normal, QIcon.Off)
- self.pushButton_OpenPDF_2.setIcon(icon5)
+ self.pushButton_BuyMeACoffee.setIcon(icon5)
self.label_17 = QLabel(self.frame_3)
self.label_17.setObjectName(u"label_17")
self.label_17.setGeometry(QRect(230, 90, 141, 20))
@@ -658,6 +664,20 @@ def setupUi(self, SettingsWindowUI):
self.horizontalLayout_2.setStretch(1, 28)
self.horizontalLayout_2.setStretch(2, 3)
SettingsWindowUI.setCentralWidget(self.centralwidget)
+ QWidget.setTabOrder(self.checkBox_zoom_effect, self.checkBox_shake_effect)
+ QWidget.setTabOrder(self.checkBox_shake_effect, self.checkBox_fade_effect)
+ QWidget.setTabOrder(self.checkBox_fade_effect, self.lineEdit_shortcut)
+ QWidget.setTabOrder(self.lineEdit_shortcut, self.horizontalSlider_ZoomScale)
+ QWidget.setTabOrder(self.horizontalSlider_ZoomScale, self.lineEdit_columnn)
+ QWidget.setTabOrder(self.lineEdit_columnn, self.lineEdit_Rows)
+ QWidget.setTabOrder(self.lineEdit_Rows, self.lineEdit_Button_width)
+ QWidget.setTabOrder(self.lineEdit_Button_width, self.lineEdit_ButtonHeight)
+ QWidget.setTabOrder(self.lineEdit_ButtonHeight, self.pushButton_save)
+ QWidget.setTabOrder(self.pushButton_save, self.pushButton_setDefault)
+ QWidget.setTabOrder(self.pushButton_setDefault, self.pushButton_OpenPDF)
+ QWidget.setTabOrder(self.pushButton_OpenPDF, self.pushButton_BuyMeACoffee)
+ QWidget.setTabOrder(self.pushButton_BuyMeACoffee, self.pushButton_minimize)
+ QWidget.setTabOrder(self.pushButton_minimize, self.pushButton_close)
self.retranslateUi(SettingsWindowUI)
@@ -670,13 +690,13 @@ def retranslateUi(self, SettingsWindowUI):
self.label_8.setText("")
self.label_title_bar_top.setText(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate", None))
#if QT_CONFIG(tooltip)
- self.btn_minimize.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Minimize", None))
+ self.pushButton_minimize.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Minimize", None))
#endif // QT_CONFIG(tooltip)
- self.btn_minimize.setText("")
+ self.pushButton_minimize.setText("")
#if QT_CONFIG(tooltip)
- self.btn_close.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Close", None))
+ self.pushButton_close.setToolTip(QCoreApplication.translate("SettingsWindowUI", u"Close", None))
#endif // QT_CONFIG(tooltip)
- self.btn_close.setText("")
+ self.pushButton_close.setText("")
self.label_ZoomScale.setText(QCoreApplication.translate("SettingsWindowUI", u"1.2", None))
self.checkBox_fade_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Main Window Fade In Effect", None))
self.checkBox_shake_effect.setText(QCoreApplication.translate("SettingsWindowUI", u"Shake Effect", None))
@@ -704,7 +724,7 @@ def retranslateUi(self, SettingsWindowUI):
self.label_15.setText(QCoreApplication.translate("SettingsWindowUI", u"Assign Bookmark : Select a node or backdrop, Then click on an empty bookmark button to assign", None))
self.pushButton_OpenPDF.setText(QCoreApplication.translate("SettingsWindowUI", u"Open PDF Help", None))
self.label_icon_2.setText("")
- self.pushButton_OpenPDF_2.setText(QCoreApplication.translate("SettingsWindowUI", u"Buy Me a Coffee", None))
+ self.pushButton_BuyMeACoffee.setText(QCoreApplication.translate("SettingsWindowUI", u"Buy Me a Coffee", None))
self.label_17.setText(QCoreApplication.translate("SettingsWindowUI", u"Learn all in 3 minutes", None))
self.label_18.setText(QCoreApplication.translate("SettingsWindowUI", u"Do you like this tool?", None))
self.label_plugins_version.setText(QCoreApplication.translate("SettingsWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
diff --git a/Km_NodeGraphEN/Ui_Templates.py b/Km_NodeGraphEN/Ui_Templates.py
index 47507cf..e6ceb1e 100644
--- a/Km_NodeGraphEN/Ui_Templates.py
+++ b/Km_NodeGraphEN/Ui_Templates.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - TemplatesKsqUVU.ui'
+## Form generated from reading UI file 'panel_v02 - TemplatesmWAWNR.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -15,37 +15,404 @@
QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
+import os
class Ui_TemplatesWindowUI(object):
def setupUi(self, TemplatesWindowUI):
if not TemplatesWindowUI.objectName():
TemplatesWindowUI.setObjectName(u"TemplatesWindowUI")
- TemplatesWindowUI.resize(506, 621)
+ TemplatesWindowUI.resize(906, 410)
+ TemplatesWindowUI.setStyleSheet(u"color: rgb(223, 223, 223);")
self.centralwidget = QWidget(TemplatesWindowUI)
self.centralwidget.setObjectName(u"centralwidget")
- self.groupBox_5 = QGroupBox(self.centralwidget)
- self.groupBox_5.setObjectName(u"groupBox_5")
- self.groupBox_5.setGeometry(QRect(10, 20, 481, 551))
- self.groupBox_6 = QGroupBox(self.groupBox_5)
- self.groupBox_6.setObjectName(u"groupBox_6")
- self.groupBox_6.setGeometry(QRect(10, 20, 461, 241))
- self.pushButton_load = QPushButton(self.groupBox_6)
- self.pushButton_load.setObjectName(u"pushButton_load")
- self.pushButton_load.setGeometry(QRect(130, 200, 81, 23))
- self.pushButton_remove = QPushButton(self.groupBox_6)
+ self.frame = QFrame(self.centralwidget)
+ self.frame.setObjectName(u"frame")
+ self.frame.setGeometry(QRect(12, 12, 885, 391))
+ self.frame.setStyleSheet(u"QFrame {\n"
+" background-color: rgb(61, 64, 71);\n"
+" border-radius : 10px;\n"
+"}\n"
+"\n"
+"/* LINE EDIT */\n"
+"QLineEdit {\n"
+" background-color: rgb(40, 43, 50);\n"
+" border-radius: 5px;\n"
+" border: 2px solid rgb(40, 43, 50);\n"
+"}\n"
+"QLineEdit:hover {\n"
+" border: 2px solid rgb(64, 71, 88);\n"
+"}\n"
+"QLineEdit:focus {\n"
+" border: 2px solid rgb(91, 101, 124);\n"
+"}\n"
+"\n"
+"/* SCROLL BARS */\n"
+"QScrollBar:horizontal {\n"
+" border: none;\n"
+" background: rgb(52, 59, 72);\n"
+" height: 14px;\n"
+" margin: 0px 21px 0 21px;\n"
+" border-radius: 0px;\n"
+"}\n"
+"QScrollBar::handle:horizontal {\n"
+" background: rgb(85, 170, 255);\n"
+" min-width: 25px;\n"
+" border-radius: 7px\n"
+"}\n"
+"QScrollBar::add-line:horizontal {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-right-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: right;\n"
+" subcontrol-origin: margin;\n"
+"}\n"
+"QScrollBar::sub-line:horizontal {\n"
+" border"
+ ": none;\n"
+" background: rgb(55, 63, 77);\n"
+" width: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-bottom-left-radius: 7px;\n"
+" subcontrol-position: left;\n"
+" subcontrol-origin: margin;\n"
+"}\n"
+"QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+"QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal\n"
+"{\n"
+" background: none;\n"
+"}\n"
+" QScrollBar:vertical {\n"
+" border: none;\n"
+" background: rgb(52, 59, 72);\n"
+" width: 14px;\n"
+" margin: 21px 0 21px 0;\n"
+" border-radius: 0px;\n"
+" }\n"
+" QScrollBar::handle:vertical { \n"
+" background: rgb(85, 170, 255);\n"
+" min-height: 25px;\n"
+" border-radius: 7px\n"
+" }\n"
+" QScrollBar::add-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-bottom-left-radius: 7px;\n"
+" border-bottom-right-radius: 7px;\n"
+" subcontrol-position: bottom;\n"
+" subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar:"
+ ":sub-line:vertical {\n"
+" border: none;\n"
+" background: rgb(55, 63, 77);\n"
+" height: 20px;\n"
+" border-top-left-radius: 7px;\n"
+" border-top-right-radius: 7px;\n"
+" subcontrol-position: top;\n"
+" subcontrol-origin: margin;\n"
+" }\n"
+" QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+" QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n"
+" background: none;\n"
+" }\n"
+"\n"
+"/* CHECKBOX */\n"
+"QCheckBox::indicator {\n"
+" border: 3px solid rgb(52, 59, 72);\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QCheckBox::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QCheckBox::indicator:checked {\n"
+" background: 3px solid rgb(52, 59, 72);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+" background-image: url(../Km_NodeGraphEN/icons/cil-check-alt.png);\n"
+"}\n"
+"\n"
+"/* RADIO BUTTON */\n"
+"QRadioButton::indicator {\n"
+" border: 3px soli"
+ "d rgb(52, 59, 72);\n"
+" width: 15px;\n"
+" height: 15px;\n"
+" border-radius: 10px;\n"
+" background: rgb(44, 49, 60);\n"
+"}\n"
+"QRadioButton::indicator:hover {\n"
+" border: 3px solid rgb(58, 66, 81);\n"
+"}\n"
+"QRadioButton::indicator:checked {\n"
+" background: 3px solid rgb(94, 106, 130);\n"
+" border: 3px solid rgb(52, 59, 72); \n"
+"}\n"
+"\n"
+"/* SLIDERS */\n"
+"QSlider::groove:horizontal {\n"
+" border-radius: 9px;\n"
+" height: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QSlider::groove:horizontal:hover {\n"
+" background-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:horizontal {\n"
+" background-color: rgb(255, 212, 95);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:horizontal:hover {\n"
+" background-color: rgb(255, 222, 110);\n"
+"}\n"
+"QSlider::handle:horizontal:pressed {\n"
+" background-color: rgb(255, 212, 95);\n"
+"}\n"
+"\n"
+"QSlider::groove:vertical {\n"
+" bord"
+ "er-radius: 9px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" background-color: rgb(52, 59, 72);\n"
+"}\n"
+"QSlider::groove:vertical:hover {\n"
+" background-color: rgb(55, 62, 76);\n"
+"}\n"
+"QSlider::handle:vertical {\n"
+" background-color: rgb(85, 170, 255);\n"
+" border: none;\n"
+" height: 18px;\n"
+" width: 18px;\n"
+" margin: 0px;\n"
+" border-radius: 9px;\n"
+"}\n"
+"QSlider::handle:vertical:hover {\n"
+" background-color: rgb(105, 180, 255);\n"
+"}\n"
+"QSlider::handle:vertical:pressed {\n"
+" background-color: rgb(65, 130, 195);\n"
+"}\n"
+"\n"
+"")
+ self.frame.setFrameShape(QFrame.StyledPanel)
+ self.frame.setFrameShadow(QFrame.Raised)
+ self.frame_top_btns = QFrame(self.frame)
+ self.frame_top_btns.setObjectName(u"frame_top_btns")
+ self.frame_top_btns.setGeometry(QRect(0, 0, 885, 42))
+ self.frame_top_btns.setMaximumSize(QSize(16777215, 42))
+ self.frame_top_btns.setStyleSheet(u"background-color: rgb(40, 43, 50);\n"
+"border-bottom-left-radius: 1px;\n"
+"border-bottom-right-radius: 1px;")
+ self.frame_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_4 = QHBoxLayout(self.frame_top_btns)
+ self.horizontalLayout_4.setSpacing(0)
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
+ self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.frame_label_top_btns = QFrame(self.frame_top_btns)
+ self.frame_label_top_btns.setObjectName(u"frame_label_top_btns")
+ sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.frame_label_top_btns.sizePolicy().hasHeightForWidth())
+ self.frame_label_top_btns.setSizePolicy(sizePolicy)
+ self.frame_label_top_btns.setFrameShape(QFrame.NoFrame)
+ self.frame_label_top_btns.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_10 = QHBoxLayout(self.frame_label_top_btns)
+ self.horizontalLayout_10.setSpacing(0)
+ self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
+ self.horizontalLayout_10.setContentsMargins(5, 0, 10, 0)
+ self.label_16 = QLabel(self.frame_label_top_btns)
+ self.label_16.setObjectName(u"label_16")
+ self.label_16.setMaximumSize(QSize(3, 16777215))
+
+ self.horizontalLayout_10.addWidget(self.label_16)
+
+ self.label_10 = QLabel(self.frame_label_top_btns)
+ self.label_10.setObjectName(u"label_10")
+ self.label_10.setMinimumSize(QSize(20, 0))
+ self.label_10.setMaximumSize(QSize(20, 20))
+ self.label_10.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-star.png"))
+ self.label_10.setScaledContents(True)
+ self.label_10.setAlignment(Qt.AlignCenter)
+ self.label_10.setMargin(0)
+
+ self.horizontalLayout_10.addWidget(self.label_10)
+
+ self.label_title_bar_top = QLabel(self.frame_label_top_btns)
+ self.label_title_bar_top.setObjectName(u"label_title_bar_top")
+ font = QFont()
+ font.setFamily(u"Segoe UI Semibold")
+ font.setPointSize(11)
+ font.setBold(False)
+ font.setWeight(50)
+ self.label_title_bar_top.setFont(font)
+ self.label_title_bar_top.setStyleSheet(u"background: transparent;\n"
+"")
+ self.label_title_bar_top.setMargin(5)
+
+ self.horizontalLayout_10.addWidget(self.label_title_bar_top)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_label_top_btns)
+
+ self.frame_btns_right = QFrame(self.frame_top_btns)
+ self.frame_btns_right.setObjectName(u"frame_btns_right")
+ sizePolicy.setHeightForWidth(self.frame_btns_right.sizePolicy().hasHeightForWidth())
+ self.frame_btns_right.setSizePolicy(sizePolicy)
+ self.frame_btns_right.setMaximumSize(QSize(120, 16777215))
+ self.frame_btns_right.setFrameShape(QFrame.NoFrame)
+ self.frame_btns_right.setFrameShadow(QFrame.Raised)
+ self.horizontalLayout_5 = QHBoxLayout(self.frame_btns_right)
+ self.horizontalLayout_5.setSpacing(0)
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
+ self.pushButton_minimize = QPushButton(self.frame_btns_right)
+ self.pushButton_minimize.setObjectName(u"pushButton_minimize")
+ sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.pushButton_minimize.sizePolicy().hasHeightForWidth())
+ self.pushButton_minimize.setSizePolicy(sizePolicy1)
+ self.pushButton_minimize.setMinimumSize(QSize(40, 0))
+ self.pushButton_minimize.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_minimize.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-radius : 0px;\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(40, 50, 62);\n"
+"}")
+ icon = QIcon()
+ icon.addFile(os.path.dirname(__file__)+"/icons/cil-window-minimize.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_minimize.setIcon(icon)
+
+ self.horizontalLayout_5.addWidget(self.pushButton_minimize)
+
+ self.pushButton_close = QPushButton(self.frame_btns_right)
+ self.pushButton_close.setObjectName(u"pushButton_close")
+ sizePolicy1.setHeightForWidth(self.pushButton_close.sizePolicy().hasHeightForWidth())
+ self.pushButton_close.setSizePolicy(sizePolicy1)
+ self.pushButton_close.setMinimumSize(QSize(40, 0))
+ self.pushButton_close.setMaximumSize(QSize(40, 16777215))
+ self.pushButton_close.setStyleSheet(u"QPushButton { \n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(50, 55, 65);\n"
+" border-top-right-radius: 10px;\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(40, 50, 62);\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(os.path.dirname(__file__)+"/icons/cil-x.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_close.setIcon(icon1)
+
+ self.horizontalLayout_5.addWidget(self.pushButton_close)
+
+
+ self.horizontalLayout_4.addWidget(self.frame_btns_right, 0, Qt.AlignRight)
+
+ self.frame_2 = QFrame(self.frame)
+ self.frame_2.setObjectName(u"frame_2")
+ self.frame_2.setGeometry(QRect(20, 63, 551, 291))
+ self.frame_2.setStyleSheet(u"QFrame {\n"
+"background-color: rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"QListWidget {\n"
+" background-color: rgb(63, 68, 88);\n"
+" border-radius: 5px;\n"
+" padding: 5px;\n"
+"}\n"
+"QListWidget::item {\n"
+"padding: 5px;\n"
+"}\n"
+"QListWidget::item:hover {\n"
+"padding: 5px;\n"
+" background-color: rgb(83, 89, 115);\n"
+"}\n"
+"QListWidget::item:selected {\n"
+" padding: 5px;\n"
+" background-color: rgb(83, 89, 115);\n"
+" color: rgb(223, 223, 223);\n"
+"}")
+ self.frame_2.setFrameShape(QFrame.StyledPanel)
+ self.frame_2.setFrameShadow(QFrame.Raised)
+ self.pushButton_remove = QPushButton(self.frame_2)
self.pushButton_remove.setObjectName(u"pushButton_remove")
- self.pushButton_remove.setGeometry(QRect(30, 200, 81, 23))
- self.listWidget_templateList = QListWidget(self.groupBox_6)
+ self.pushButton_remove.setGeometry(QRect(40, 244, 101, 35))
+ font1 = QFont()
+ font1.setFamily(u"Segoe UI Semibold")
+ font1.setPointSize(13)
+ font1.setBold(False)
+ font1.setWeight(50)
+ self.pushButton_remove.setFont(font1)
+ self.pushButton_remove.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon2 = QIcon()
+ icon2.addFile(os.path.dirname(__file__)+"/icons/cil-trash.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_remove.setIcon(icon2)
+ self.label_2 = QLabel(self.frame_2)
+ self.label_2.setObjectName(u"label_2")
+ self.label_2.setGeometry(QRect(0, 5, 571, 31))
+ font2 = QFont()
+ font2.setFamily(u"Segoe UI Semibold")
+ font2.setPointSize(13)
+ self.label_2.setFont(font2)
+ self.label_2.setAlignment(Qt.AlignCenter)
+ self.label_3 = QLabel(self.frame_2)
+ self.label_3.setObjectName(u"label_3")
+ self.label_3.setGeometry(QRect(40, 33, 61, 21))
+ self.listWidget_templateList = QListWidget(self.frame_2)
QListWidgetItem(self.listWidget_templateList)
QListWidgetItem(self.listWidget_templateList)
QListWidgetItem(self.listWidget_templateList)
QListWidgetItem(self.listWidget_templateList)
self.listWidget_templateList.setObjectName(u"listWidget_templateList")
- self.listWidget_templateList.setGeometry(QRect(20, 60, 201, 121))
- self.label_3 = QLabel(self.groupBox_6)
- self.label_3.setObjectName(u"label_3")
- self.label_3.setGeometry(QRect(20, 30, 61, 21))
- self.listWidget_templateItems = QListWidget(self.groupBox_6)
+ self.listWidget_templateList.setGeometry(QRect(40, 60, 221, 171))
+ self.listWidget_templateList.setStyleSheet(u"")
+ self.label_8 = QLabel(self.frame_2)
+ self.label_8.setObjectName(u"label_8")
+ self.label_8.setGeometry(QRect(290, 33, 141, 21))
+ self.listWidget_templateItems = QListWidget(self.frame_2)
QListWidgetItem(self.listWidget_templateItems)
QListWidgetItem(self.listWidget_templateItems)
QListWidgetItem(self.listWidget_templateItems)
@@ -53,61 +420,40 @@ def setupUi(self, TemplatesWindowUI):
QListWidgetItem(self.listWidget_templateItems)
QListWidgetItem(self.listWidget_templateItems)
self.listWidget_templateItems.setObjectName(u"listWidget_templateItems")
- self.listWidget_templateItems.setGeometry(QRect(240, 60, 201, 121))
- self.label_8 = QLabel(self.groupBox_6)
- self.label_8.setObjectName(u"label_8")
- self.label_8.setGeometry(QRect(240, 30, 141, 21))
- self.groupBox_4 = QGroupBox(self.groupBox_5)
- self.groupBox_4.setObjectName(u"groupBox_4")
- self.groupBox_4.setGeometry(QRect(240, 280, 231, 251))
- self.pushButton_add = QPushButton(self.groupBox_4)
- self.pushButton_add.setObjectName(u"pushButton_add")
- self.pushButton_add.setGeometry(QRect(80, 210, 81, 23))
- self.listWidget_newTemplateItems = QListWidget(self.groupBox_4)
- QListWidgetItem(self.listWidget_newTemplateItems)
- QListWidgetItem(self.listWidget_newTemplateItems)
- QListWidgetItem(self.listWidget_newTemplateItems)
- QListWidgetItem(self.listWidget_newTemplateItems)
- QListWidgetItem(self.listWidget_newTemplateItems)
- QListWidgetItem(self.listWidget_newTemplateItems)
- self.listWidget_newTemplateItems.setObjectName(u"listWidget_newTemplateItems")
- self.listWidget_newTemplateItems.setGeometry(QRect(10, 50, 201, 121))
- self.lineEdit_templateName = QLineEdit(self.groupBox_4)
- self.lineEdit_templateName.setObjectName(u"lineEdit_templateName")
- self.lineEdit_templateName.setGeometry(QRect(112, 180, 101, 20))
- self.label_4 = QLabel(self.groupBox_4)
- self.label_4.setObjectName(u"label_4")
- self.label_4.setGeometry(QRect(10, 180, 101, 21))
- self.label_5 = QLabel(self.groupBox_4)
- self.label_5.setObjectName(u"label_5")
- self.label_5.setGeometry(QRect(10, 20, 181, 21))
- self.groupBox = QGroupBox(self.groupBox_5)
- self.groupBox.setObjectName(u"groupBox")
- self.groupBox.setGeometry(QRect(10, 280, 211, 251))
- self.label_7 = QLabel(self.groupBox)
- self.label_7.setObjectName(u"label_7")
- self.label_7.setGeometry(QRect(30, 100, 181, 16))
- self.checkBox_TemplateOverride = QCheckBox(self.groupBox)
- self.checkBox_TemplateOverride.setObjectName(u"checkBox_TemplateOverride")
- self.checkBox_TemplateOverride.setGeometry(QRect(30, 70, 181, 31))
- self.comboBox_TemplateOverride = QComboBox(self.groupBox)
- self.comboBox_TemplateOverride.addItem("")
- self.comboBox_TemplateOverride.addItem("")
- self.comboBox_TemplateOverride.addItem("")
- self.comboBox_TemplateOverride.addItem("")
- self.comboBox_TemplateOverride.setObjectName(u"comboBox_TemplateOverride")
- self.comboBox_TemplateOverride.setGeometry(QRect(60, 160, 101, 22))
- self.label_9 = QLabel(self.groupBox)
- self.label_9.setObjectName(u"label_9")
- self.label_9.setGeometry(QRect(60, 140, 141, 16))
- self.layoutWidget = QWidget(self.centralwidget)
+ self.listWidget_templateItems.setGeometry(QRect(290, 60, 221, 171))
+ self.pushButton_load = QPushButton(self.frame_2)
+ self.pushButton_load.setObjectName(u"pushButton_load")
+ self.pushButton_load.setGeometry(QRect(160, 244, 101, 35))
+ self.pushButton_load.setFont(font1)
+ self.pushButton_load.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon3 = QIcon()
+ icon3.addFile(os.path.dirname(__file__)+"/icons/cil-library-add.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_load.setIcon(icon3)
+ self.layoutWidget = QWidget(self.frame)
self.layoutWidget.setObjectName(u"layoutWidget")
- self.layoutWidget.setGeometry(QRect(10, 570, 481, 36))
+ self.layoutWidget.setGeometry(QRect(20, 353, 841, 36))
self.horizontalLayout_2 = QHBoxLayout(self.layoutWidget)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.label_plugins_version = QLabel(self.layoutWidget)
self.label_plugins_version.setObjectName(u"label_plugins_version")
+ font3 = QFont()
+ font3.setFamily(u"Segoe UI Semibold")
+ self.label_plugins_version.setFont(font3)
+ self.label_plugins_version.setStyleSheet(u"color: rgb(200, 200, 200);")
self.horizontalLayout_2.addWidget(self.label_plugins_version)
@@ -119,15 +465,91 @@ def setupUi(self, TemplatesWindowUI):
self.verticalLayout.setObjectName(u"verticalLayout")
self.label_credit = QLabel(self.layoutWidget)
self.label_credit.setObjectName(u"label_credit")
+ self.label_credit.setFont(font3)
+ self.label_credit.setStyleSheet(u"color: rgb(200, 200, 200);")
+ self.label_credit.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
self.verticalLayout.addWidget(self.label_credit)
self.horizontalLayout_2.addLayout(self.verticalLayout)
- self.horizontalLayout_2.setStretch(0, 3)
self.horizontalLayout_2.setStretch(1, 28)
self.horizontalLayout_2.setStretch(2, 3)
+ self.frame_4 = QFrame(self.frame)
+ self.frame_4.setObjectName(u"frame_4")
+ self.frame_4.setGeometry(QRect(590, 63, 271, 291))
+ self.frame_4.setStyleSheet(u"QFrame {\n"
+"background-color: rgb(51, 54, 63);\n"
+"border-radius: 5px;\n"
+"}\n"
+"QListWidget {\n"
+" background-color: rgb(63, 68, 88);\n"
+" border-radius: 5px;\n"
+" padding: 5px;\n"
+"}\n"
+"QListWidget::item {\n"
+"padding: 5px;\n"
+"}\n"
+"QListWidget::item:hover {\n"
+"padding: 5px;\n"
+" background-color: rgb(83, 89, 115);\n"
+"}\n"
+"QListWidget::item:selected {\n"
+" padding: 5px;\n"
+" background-color: rgb(83, 89, 115);\n"
+" color: rgb(223, 223, 223);\n"
+"}")
+ self.frame_4.setFrameShape(QFrame.StyledPanel)
+ self.frame_4.setFrameShadow(QFrame.Raised)
+ self.label_18 = QLabel(self.frame_4)
+ self.label_18.setObjectName(u"label_18")
+ self.label_18.setGeometry(QRect(0, 2, 271, 31))
+ self.label_18.setFont(font2)
+ self.label_18.setAlignment(Qt.AlignCenter)
+ self.listWidget_newTemplateItems = QListWidget(self.frame_4)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ QListWidgetItem(self.listWidget_newTemplateItems)
+ self.listWidget_newTemplateItems.setObjectName(u"listWidget_newTemplateItems")
+ self.listWidget_newTemplateItems.setGeometry(QRect(20, 54, 221, 151))
+ self.label_5 = QLabel(self.frame_4)
+ self.label_5.setObjectName(u"label_5")
+ self.label_5.setGeometry(QRect(20, 30, 181, 21))
+ self.label_4 = QLabel(self.frame_4)
+ self.label_4.setObjectName(u"label_4")
+ self.label_4.setGeometry(QRect(30, 216, 101, 21))
+ self.lineEdit_templateName = QLineEdit(self.frame_4)
+ self.lineEdit_templateName.setObjectName(u"lineEdit_templateName")
+ self.lineEdit_templateName.setGeometry(QRect(130, 213, 121, 30))
+ self.pushButton_add = QPushButton(self.frame_4)
+ self.pushButton_add.setObjectName(u"pushButton_add")
+ self.pushButton_add.setGeometry(QRect(90, 249, 101, 35))
+ self.pushButton_add.setFont(font1)
+ self.pushButton_add.setStyleSheet(u"QPushButton {\n"
+" border: 2px solid rgb(52, 59, 72);\n"
+" border-radius: 5px; \n"
+" background-color: rgb(52, 59, 72);\n"
+" color: rgb(223, 223, 223);\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(57, 65, 80);\n"
+" border: 2px solid rgb(57, 65, 80);\n"
+"}\n"
+"QPushButton:pressed { \n"
+" background-color: rgb(35, 40, 49);\n"
+" border: 2px solid rgb(43, 50, 61);\n"
+"}")
+ icon4 = QIcon()
+ icon4.addFile(os.path.dirname(__file__)+"/icons/cil-medical-cross.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.pushButton_add.setIcon(icon4)
+ self.frame_top_btns.raise_()
+ self.layoutWidget.raise_()
+ self.frame_4.raise_()
+ self.frame_2.raise_()
TemplatesWindowUI.setCentralWidget(self.centralwidget)
self.retranslateUi(TemplatesWindowUI)
@@ -137,10 +559,20 @@ def setupUi(self, TemplatesWindowUI):
def retranslateUi(self, TemplatesWindowUI):
TemplatesWindowUI.setWindowTitle(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate : BookMarks Templates", None))
- self.groupBox_5.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"BookMark Templates", None))
- self.groupBox_6.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"List", None))
- self.pushButton_load.setText(QCoreApplication.translate("TemplatesWindowUI", u"Load", None))
+ self.label_16.setText("")
+ self.label_10.setText("")
+ self.label_title_bar_top.setText(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate", None))
+#if QT_CONFIG(tooltip)
+ self.pushButton_minimize.setToolTip(QCoreApplication.translate("TemplatesWindowUI", u"Minimize", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_minimize.setText("")
+#if QT_CONFIG(tooltip)
+ self.pushButton_close.setToolTip(QCoreApplication.translate("TemplatesWindowUI", u"Close", None))
+#endif // QT_CONFIG(tooltip)
+ self.pushButton_close.setText("")
self.pushButton_remove.setText(QCoreApplication.translate("TemplatesWindowUI", u"Remove", None))
+ self.label_2.setText(QCoreApplication.translate("TemplatesWindowUI", u"BookMark Templates", None))
+ self.label_3.setText(QCoreApplication.translate("TemplatesWindowUI", u"Templates:", None))
__sortingEnabled = self.listWidget_templateList.isSortingEnabled()
self.listWidget_templateList.setSortingEnabled(False)
@@ -154,7 +586,7 @@ def retranslateUi(self, TemplatesWindowUI):
___qlistwidgetitem3.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template 4", None));
self.listWidget_templateList.setSortingEnabled(__sortingEnabled)
- self.label_3.setText(QCoreApplication.translate("TemplatesWindowUI", u"Templates:", None))
+ self.label_8.setText(QCoreApplication.translate("TemplatesWindowUI", u"Selected Template Items:", None))
__sortingEnabled1 = self.listWidget_templateItems.isSortingEnabled()
self.listWidget_templateItems.setSortingEnabled(False)
@@ -172,9 +604,10 @@ def retranslateUi(self, TemplatesWindowUI):
___qlistwidgetitem9.setText(QCoreApplication.translate("TemplatesWindowUI", u"Clean", None));
self.listWidget_templateItems.setSortingEnabled(__sortingEnabled1)
- self.label_8.setText(QCoreApplication.translate("TemplatesWindowUI", u"Selected Template Items:", None))
- self.groupBox_4.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"Add New Template", None))
- self.pushButton_add.setText(QCoreApplication.translate("TemplatesWindowUI", u"Add", None))
+ self.pushButton_load.setText(QCoreApplication.translate("TemplatesWindowUI", u"Load", None))
+ self.label_plugins_version.setText(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
+ self.label_credit.setText(QCoreApplication.translate("TemplatesWindowUI", u"By Hossein Karamian", None))
+ self.label_18.setText(QCoreApplication.translate("TemplatesWindowUI", u"Add New Template", None))
__sortingEnabled2 = self.listWidget_newTemplateItems.isSortingEnabled()
self.listWidget_newTemplateItems.setSortingEnabled(False)
@@ -192,18 +625,8 @@ def retranslateUi(self, TemplatesWindowUI):
___qlistwidgetitem15.setText(QCoreApplication.translate("TemplatesWindowUI", u"Clean", None));
self.listWidget_newTemplateItems.setSortingEnabled(__sortingEnabled2)
- self.label_4.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template Name :", None))
self.label_5.setText(QCoreApplication.translate("TemplatesWindowUI", u" Current Project Bookmarks:", None))
- self.groupBox.setTitle(QCoreApplication.translate("TemplatesWindowUI", u"Global Override", None))
- self.label_7.setText(QCoreApplication.translate("TemplatesWindowUI", u"(Use a template for all projects)", None))
- self.checkBox_TemplateOverride.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template Global Override", None))
- self.comboBox_TemplateOverride.setItemText(0, QCoreApplication.translate("TemplatesWindowUI", u"Template 1", None))
- self.comboBox_TemplateOverride.setItemText(1, QCoreApplication.translate("TemplatesWindowUI", u"Template 2", None))
- self.comboBox_TemplateOverride.setItemText(2, QCoreApplication.translate("TemplatesWindowUI", u"Template 3", None))
- self.comboBox_TemplateOverride.setItemText(3, QCoreApplication.translate("TemplatesWindowUI", u"Template 4", None))
-
- self.label_9.setText(QCoreApplication.translate("TemplatesWindowUI", u"Select Template :", None))
- self.label_plugins_version.setText(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
- self.label_credit.setText(QCoreApplication.translate("TemplatesWindowUI", u"By Hossein Karamian", None))
+ self.label_4.setText(QCoreApplication.translate("TemplatesWindowUI", u"Template Name :", None))
+ self.pushButton_add.setText(QCoreApplication.translate("TemplatesWindowUI", u"Add", None))
# retranslateUi
diff --git a/Km_NodeGraphEN/icons/cil-arrow-bottom.png b/Km_NodeGraphEN/icons/cil-arrow-bottom.png
new file mode 100644
index 0000000000000000000000000000000000000000..21a0354512a23bba8c5539aba38cc3837dca62e5
GIT binary patch
literal 1874
zcmbVNTWB0r7@mYSZPKP7hE_@n<202NJ3E)%ncW$(4ax2{S#;wjT}jeP$?Q32c8Ba-
zGBe3;0+vuztd>>~M6@j}MNqs$)naOcXeq{mNU78ZHBr1gG$z4{`rzfv-b^ID;4rgu
z=A7?*|My?czlW1OU5yP}8wi4EjCV)-@cSO`Szm{LXY=9T@vGkI9&`v|^A7K+iTAZE
z62#giEj8c{Bp#H3srwXYrjf6pTNq6cZS4h10mH~8(Om%n$$$>he1)oR*E)XJvl8+MutY6$k@+>DYY>46fG|S1XC<{Tdd{Nk%4OO`>x~FUle}$>6
z>sm6yEyoy#1xq08M~7{*@QtS&>D4K=Yy$q(wfU(rLd0=l~3{L6t{BP(>BC
zhinZWNF}$N)l&sABZrSoNb-wxC=DRZ2LdeSfeOvCq8LnziX;a8UfCBbN$%Dhoa6EG
zLE4K(%A=e{7K=w#fOjau6!5A6L8?5htrCwrvRvMu&mv5Eiz+EucTCmID>mxL;Mm=^
z3YnXUca*VPOTV*JmNcyK
z>~GO0Ynql$*1bGi`{Ff&_<7{&n&vZy=31ZH{a3@rx%GDseCV54YMOlInTg5R_0unm
z)y0m3H5)=7JB0f7u^rckg!zpPr+*8FF19|$9ov6?sB!HkPSyY?V4cj}AJp9o&8_5StZv7YD~
IokNHI0R*mUS^xk5
literal 0
HcmV?d00001
diff --git a/Km_NodeGraphEN/menu.py b/Km_NodeGraphEN/menu.py
index 41e4696..c6b5b28 100644
--- a/Km_NodeGraphEN/menu.py
+++ b/Km_NodeGraphEN/menu.py
@@ -1,7 +1,11 @@
import nuke
import Km_NodeGraph_Easy_Navigate
+import model
+settings = model.Settings().Load()
menu = nuke.menu("Nuke")
Km_NGJ = menu.addMenu("KmTools")
-Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.start()","shift+e")
-Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Settings | Help","Km_NodeGraph_Easy_Navigate.showSettings()","")
+Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.ShowMainWindow()",settings["shortcut"])
+Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Settings | Help","Km_NodeGraph_Easy_Navigate.ShowSettings()","")
+Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Edit Bookmarks","Km_NodeGraph_Easy_Navigate.ShowEditBookmarksWindow()","")
+Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Templates","Km_NodeGraph_Easy_Navigate.ShowTemplatesWindow()","")
\ No newline at end of file
diff --git a/Km_NodeGraphEN/model.py b/Km_NodeGraphEN/model.py
index 4d6c031..ab78145 100644
--- a/Km_NodeGraphEN/model.py
+++ b/Km_NodeGraphEN/model.py
@@ -123,6 +123,7 @@ def AddNew(templateName):
}
}
bookmarksData = Bookmarks.Load()
+ if (len(bookmarksData) == 0) : return False # return if there is no bookmark
counter = 1
for item in bookmarksData :
templateData['bookmarks'][counter] = {"nodeName": item["nodeName"], "title": item["title"], "index": item["index"], "shortcut": item["shortcut"]}
diff --git a/Km_NodeGraphEN/settings.json b/Km_NodeGraphEN/settings.json
index 3514879..2448e7d 100644
--- a/Km_NodeGraphEN/settings.json
+++ b/Km_NodeGraphEN/settings.json
@@ -1 +1 @@
-{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
+{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1.0", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
From 0034b7a8091ecd3266a47d81c73741e57949b99d Mon Sep 17 00:00:00 2001
From: hkaramian <93508495+hkaramian@users.noreply.github.com>
Date: Sun, 2 Jan 2022 20:30:09 +0330
Subject: [PATCH 04/11] v2.0 dev
---
Dev-Files/panel_v02 - Bookmarks List.ui | 113 +++++--------------
Dev-Files/panel_v02 - Templates.ui | 25 ++++
Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py | 87 ++++++++++----
Km_NodeGraphEN/Ui_EditBookmarks.py | 60 ++++------
Km_NodeGraphEN/Ui_Templates.py | 15 ++-
Km_NodeGraphEN/menu.py | 2 +-
Km_NodeGraphEN/settings.json | 2 +-
7 files changed, 155 insertions(+), 149 deletions(-)
diff --git a/Dev-Files/panel_v02 - Bookmarks List.ui b/Dev-Files/panel_v02 - Bookmarks List.ui
index 09d2310..5fc3432 100644
--- a/Dev-Files/panel_v02 - Bookmarks List.ui
+++ b/Dev-Files/panel_v02 - Bookmarks List.ui
@@ -6,8 +6,8 @@
0
0
- 641
- 610
+ 633
+ 545
@@ -20,7 +20,7 @@
10
10
611
- 591
+ 521
@@ -525,7 +525,7 @@ QPushButton:pressed {
20
59
571
- 411
+ 425
@@ -569,7 +569,7 @@ border-radius: 5px;
10
33
551
- 321
+ 331
@@ -770,7 +770,7 @@ QHeaderView::section:vertical
0
- 360
+ 370
561
41
@@ -905,7 +905,7 @@ QPushButton:pressed {
- Set Selected Node to Selected Row(Index)
+ Assign Selected Node to Selected Bookmark
QPushButton {
@@ -1102,97 +1102,25 @@ QPushButton:pressed {
-
-
-
-
- 20
- 490
- 571
- 61
-
-
-
- QFrame {
-background-color:rgb(51, 54, 63);
-border-radius: 5px;
-}
-
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
-
-
+
- -10
- 2
- 571
- 31
+ 70
+ 10
+ 0
+ 0
-
-
- Segoe UI Semibold
- 13
-
-
-
- Tips
-
-
- Qt::AlignCenter
-
-
-
-
-
- 30
- 30
- 227
- 19
-
-
-
-
- Segoe UI
-
-
-
- <strong>Middle Button :</strong> Edit
-
-
-
-
-
- 340
- 20
- 31
- 41
-
-
-
- QFrame::NoFrame
-
-
- ../Km_NodeGraphEN/icons/cil-mouse.png
-
-
- false
-
20
- 554
+ 483
571
36
@@ -1250,9 +1178,24 @@ border-radius: 5px;
+ frame_top_btns
+ layoutWidget_2
+ frame_2
+
+ checkBox_for_fake_focus
+ pushButton_minimize
+ pushButton_shiftUp
+ pushButton_shiftDown
+ pushButton_AddBookmark
+ pushButton_removeItem
+ pushButton_createFromBackdrops
+ pushButton_reset
+ pushButton_close
+ tableWidget_BookmarksList
+
diff --git a/Dev-Files/panel_v02 - Templates.ui b/Dev-Files/panel_v02 - Templates.ui
index 3ac6687..caeea6e 100644
--- a/Dev-Files/panel_v02 - Templates.ui
+++ b/Dev-Files/panel_v02 - Templates.ui
@@ -728,6 +728,19 @@ QPushButton:pressed {
../Km_NodeGraphEN/icons/cil-library-add.png../Km_NodeGraphEN/icons/cil-library-add.png
+
+
+
+ 20
+ 10
+ 0
+ 17
+
+
+
+ CheckBox
+
+
@@ -976,6 +989,18 @@ QPushButton:pressed {
+
+ checkBox_for_fake_focus
+ pushButton_remove
+ listWidget_templateItems
+ listWidget_templateList
+ pushButton_load
+ listWidget_newTemplateItems
+ lineEdit_templateName
+ pushButton_add
+ pushButton_close
+ pushButton_minimize
+
diff --git a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
index 2670617..9a349a3 100644
--- a/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
+++ b/Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py
@@ -69,6 +69,8 @@
# Import Nuke Libraries
from re import template
+
+import PySide2
import nuke
import nukescripts
@@ -234,10 +236,16 @@ def __init__(self, bookmarkData,parrent,width=70,height=70):
#width , height = 70 , 70
self.setFixedWidth(width)
self.setFixedHeight(height)
- self.setStyleSheet("""background:gray; border-radius: 10px;
- color:white ; border:2px red ; font-size:12px;""")
+ self.setStyleSheet("""background:rgb(61, 64, 71); border-radius: 10px;
+ color:white ; border:2px red ;""")
self.setText(bookmarkData["title"])
self.setWordWrap(True)
+ self.RemoveDefaultTextShadow()
+
+ font = QFont()
+ font.setFamily(u"Segoe UI")
+ font.setPointSize(11)
+ self.setFont(font)
# define bookmark shortcut and top menu
if self.nodeName != "empty" :
@@ -245,13 +253,17 @@ def __init__(self, bookmarkData,parrent,width=70,height=70):
Km_NGJ = menu.addMenu("KmTools")
Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Bookmarks/"+bookmarkData["title"],lambda: self.JumpToNode(bookmarkData['nodeName']),bookmarkData["shortcut"])
+ def RemoveDefaultTextShadow(self):
+ """Get Rid of nuke pyside default style that apply shadow for texts"""
+ self.setStyle(QStyleFactory.create('Windows'))
+
def enterEvent(self, event):
- self.setStyleSheet("""background:orange; border-radius: 10px;
- color:white ;font-size:12px;""")
+ self.setStyleSheet("""background:rgb(80, 80, 90); border-radius: 10px;
+ color:white ;""")
def leaveEvent(self, event):
- self.setStyleSheet("""background:gray; border-radius: 10px;
- color:white;font-size:12px;""")
+ self.setStyleSheet("""background:rgb(61, 64, 71); border-radius: 10px;
+ color:white;""")
def JumpToTargetAndShakeNode(self,targetNodeName):
self.settings = model.Settings().Load()
@@ -377,9 +389,9 @@ def __init__(self):
font.setPointSize(9)
self.pushButton_Templates.setFont(font)
self.pushButton_Templates.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(128, 146, 177);\n"
+" border: 2px solid rgb(80, 80, 90);\n"
" border-radius: 10px; \n"
-" background-color: rgb(128, 146, 177);\n"
+" background-color: rgb(80, 80, 90);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
@@ -397,9 +409,9 @@ def __init__(self):
self.pushButton_settings.setBaseSize(QSize(0, 0))
self.pushButton_settings.setFont(font)
self.pushButton_settings.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(128, 146, 177);\n"
+" border: 2px solid rgb(80, 80, 90);\n"
" border-radius: 10px; \n"
-" background-color: rgb(128, 146, 177);\n"
+" background-color: rgb(80, 80, 90);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
@@ -416,9 +428,9 @@ def __init__(self):
self.pushButton_EditBookmarks.setMaximumSize(QSize(28, 28))
self.pushButton_EditBookmarks.setFont(font)
self.pushButton_EditBookmarks.setStyleSheet(u"QPushButton {\n"
-" border: 2px solid rgb(128, 146, 177);\n"
+" border: 2px solid rgb(80, 80, 90);\n"
" border-radius: 12px; \n"
-" background-color: rgb(128, 146, 177);\n"
+" background-color: rgb(80, 80, 90);\n"
" color: rgb(223, 223, 223);\n"
"}\n"
"QPushButton:hover {\n"
@@ -429,6 +441,9 @@ def __init__(self):
icon2.addFile(os.path.dirname(__file__)+"/icons/cil-menu.png", QSize(), QIcon.Normal, QIcon.Off)
self.pushButton_EditBookmarks.setIcon(icon2)
self.pushButton_EditBookmarks.setIconSize(QSize(20, 20))
+ self.pushButton_Templates.setToolTip("Bookmark Templates")
+ self.pushButton_EditBookmarks.setToolTip("Edit Bookmarks")
+ self.pushButton_settings.setToolTip("Settings")
self.horizontalLayout_3.addWidget(self.pushButton_Templates)
self.horizontalLayout_3.addWidget(self.pushButton_EditBookmarks)
self.horizontalLayout_3.addWidget(self.pushButton_settings)
@@ -443,6 +458,9 @@ def __init__(self):
self.pushButton_Templates.clicked.connect(self.OpenTemplatesWindow)
self.pushButton_EditBookmarks.clicked.connect(self.OpenEditBookmarksWindow)
+ QWidget.setTabOrder(self.pushButton_EditBookmarks,self.pushButton_settings)
+ QWidget.setTabOrder(self.pushButton_settings,self.pushButton_Templates)
+
def OpenSettingsWindow(self) :
global settingsWindowInstance
@@ -871,13 +889,21 @@ def LoadTemplate(self) :
selectedTemplateIndex = self.listWidget_templateList.currentRow()
selectedTemplate = self.templatesList[selectedTemplateIndex]
#self.setWindowState(Qt.WindowState.WindowNoState)
- if nuke.ask("Load \""+selectedTemplate["templateName"]+"\" Bookmark Template ? \n(current bookmarks will removed and replace with this template)"):
+
+ questionString = "Load \""+selectedTemplate["templateName"]+"\" Bookmark Template ? \n(current bookmarks will removed and replace with this template)"
+ self.dialog = QMessageBox()
+ self.dialog.setIcon(QMessageBox.Question)
+ self.dialog.setWindowTitle("Message")
+ self.dialog.setText(questionString)
+ self.dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
+ self.dialog.setDefaultButton(QMessageBox.Yes)
+ self.dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
+
+ if self.dialog.exec_() == self.dialog.Yes :
model.Bookmarks.ResetBookmarks() # remove current bookmarks in this project
for bookmarkItem in selectedTemplate["bookmarks"].values() :
model.Bookmarks.AddNewBookmark(bookmarkItem["nodeName"],bookmarkItem["title"],bookmarkItem["index"],bookmarkItem["shortcut"])
- #self.show() #setWindowState(Qt::WindowState::WindowActive); // Bring window to foreground
- #self.setWindowState(Qt.WindowState.WindowActive) # bring back window to front
- self.raise_()
+ # self.raise_()
self.UpdateUI()
self.listWidget_templateList.setCurrentRow(selectedTemplateIndex)
updateShortcuts()
@@ -902,12 +928,9 @@ class EditBookmarksWindow(QMainWindow,Ui_EditBookmarksWindowUI):
def __init__(self,parent=None):
super(EditBookmarksWindow, self).__init__(parent)
self.setupUi(self)
- self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
- self.setWindowFlags(Qt.WindowStaysOnTopHint)
- #self.setWindowFlags(Qt.WindowStaysOnTopHint)
## REMOVE TITLE BAR
- self.setWindowFlags(Qt.FramelessWindowHint)
+ self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground)
## DROP SHADOW EFFECT
@@ -951,7 +974,7 @@ def RemoveDefaultTextShadow(self):
self.label_credit.setStyle(QStyleFactory.create('Windows'))
self.label_plugins_version.setStyle(QStyleFactory.create('Windows'))
self.label_2.setStyle(QStyleFactory.create('Windows'))
- self.label_7.setStyle(QStyleFactory.create('Windows'))
+ #self.label_7.setStyle(QStyleFactory.create('Windows'))
def BookmarkUpdate(self, item) :
"""cell value change signal function"""
@@ -1000,7 +1023,15 @@ def AddNewBookmark(self):
self.raise_()
def createBookmarksFromBackdrops(self):
- if nuke.ask("Create Bookmarks from backdrops ? \nAll the bookmarks in this project will removed"):
+
+ self.dialog = QMessageBox()
+ self.dialog.setIcon(QMessageBox.Question)
+ self.dialog.setWindowTitle("Message")
+ self.dialog.setText("Create Bookmarks from backdrops ? \nAll the bookmarks in this project will removed")
+ self.dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
+ self.dialog.setDefaultButton(QMessageBox.Yes)
+ self.dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
+ if self.dialog.exec_() == self.dialog.Yes :
model.Bookmarks.ResetBookmarks()
allBackdrops = nuke.allNodes("BackdropNode")
counter = 0
@@ -1014,7 +1045,7 @@ def createBookmarksFromBackdrops(self):
model.Bookmarks.AddNewBookmark(bookmarkNodeName,bookmarkTitle,bookmarkIndex,bookmarkShortcut)
counter += 1
self.UpdateUI()
- self.raise_()
+ # self.raise_()
def removeABookmark(self) :
selectedRow = self.tableWidget_BookmarksList.currentRow()
@@ -1062,10 +1093,16 @@ def ShiftDownBookmark(self):
def resetBookmarks(self):
- if nuke.ask("Remove all bookmarks in the current project ? "):
+ self.dialog = QMessageBox()
+ self.dialog.setIcon(QMessageBox.Question)
+ self.dialog.setWindowTitle("Message")
+ self.dialog.setText("Remove all bookmarks in the current project ? ")
+ self.dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
+ self.dialog.setDefaultButton(QMessageBox.Yes)
+ self.dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
+ if self.dialog.exec_() == self.dialog.Yes :
model.Bookmarks.ResetBookmarks()
self.UpdateUI()
- self.raise_()
# for adding window drag to title bar
diff --git a/Km_NodeGraphEN/Ui_EditBookmarks.py b/Km_NodeGraphEN/Ui_EditBookmarks.py
index d8c9c49..170e51c 100644
--- a/Km_NodeGraphEN/Ui_EditBookmarks.py
+++ b/Km_NodeGraphEN/Ui_EditBookmarks.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - Bookmarks ListKFdroA.ui'
+## Form generated from reading UI file 'panel_v02 - Bookmarks ListkrxGBA.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -21,12 +21,12 @@ class Ui_EditBookmarksWindowUI(object):
def setupUi(self, EditBookmarksWindowUI):
if not EditBookmarksWindowUI.objectName():
EditBookmarksWindowUI.setObjectName(u"EditBookmarksWindowUI")
- EditBookmarksWindowUI.resize(641, 610)
+ EditBookmarksWindowUI.resize(633, 545)
self.centralwidget = QWidget(EditBookmarksWindowUI)
self.centralwidget.setObjectName(u"centralwidget")
self.frame = QFrame(self.centralwidget)
self.frame.setObjectName(u"frame")
- self.frame.setGeometry(QRect(10, 10, 611, 591))
+ self.frame.setGeometry(QRect(10, 10, 611, 521))
self.frame.setStyleSheet(u"QLabel {\n"
"color: rgb(223, 223, 223);\n"
"}\n"
@@ -375,7 +375,7 @@ def setupUi(self, EditBookmarksWindowUI):
self.frame_2 = QFrame(self.frame)
self.frame_2.setObjectName(u"frame_2")
- self.frame_2.setGeometry(QRect(20, 59, 571, 411))
+ self.frame_2.setGeometry(QRect(20, 59, 571, 425))
self.frame_2.setStyleSheet(u"QFrame {\n"
"background-color: rgb(51, 54, 63);\n"
"border-radius: 5px;\n"
@@ -427,7 +427,7 @@ def setupUi(self, EditBookmarksWindowUI):
__qtablewidgetitem11 = QTableWidgetItem()
self.tableWidget_BookmarksList.setItem(1, 2, __qtablewidgetitem11)
self.tableWidget_BookmarksList.setObjectName(u"tableWidget_BookmarksList")
- self.tableWidget_BookmarksList.setGeometry(QRect(10, 33, 551, 321))
+ self.tableWidget_BookmarksList.setGeometry(QRect(10, 33, 551, 331))
self.tableWidget_BookmarksList.setStyleSheet(u"QTableWidget { \n"
" background-color: rgb(51, 54, 63);\n"
" padding: 10px;\n"
@@ -507,7 +507,7 @@ def setupUi(self, EditBookmarksWindowUI):
self.tableWidget_BookmarksList.verticalHeader().setStretchLastSection(False)
self.horizontalLayoutWidget = QWidget(self.frame_2)
self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
- self.horizontalLayoutWidget.setGeometry(QRect(0, 360, 561, 41))
+ self.horizontalLayoutWidget.setGeometry(QRect(0, 370, 561, 41))
self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
@@ -670,34 +670,12 @@ def setupUi(self, EditBookmarksWindowUI):
self.horizontalLayout.addWidget(self.pushButton_reset)
- self.frame_3 = QFrame(self.frame)
- self.frame_3.setObjectName(u"frame_3")
- self.frame_3.setGeometry(QRect(20, 490, 571, 61))
- self.frame_3.setStyleSheet(u"QFrame {\n"
-"background-color:rgb(51, 54, 63);\n"
-"border-radius: 5px;\n"
-"}\n"
-"")
- self.frame_3.setFrameShape(QFrame.StyledPanel)
- self.frame_3.setFrameShadow(QFrame.Raised)
- self.label_7 = QLabel(self.frame_3)
- self.label_7.setObjectName(u"label_7")
- self.label_7.setGeometry(QRect(-10, 2, 571, 31))
- self.label_7.setFont(font1)
- self.label_7.setAlignment(Qt.AlignCenter)
- self.label_14 = QLabel(self.frame_3)
- self.label_14.setObjectName(u"label_14")
- self.label_14.setGeometry(QRect(30, 30, 227, 19))
- self.label_14.setFont(font2)
- self.label_icon_2 = QLabel(self.frame_3)
- self.label_icon_2.setObjectName(u"label_icon_2")
- self.label_icon_2.setGeometry(QRect(340, 20, 31, 41))
- self.label_icon_2.setFrameShape(QFrame.NoFrame)
- self.label_icon_2.setPixmap(QPixmap(os.path.dirname(__file__)+"/icons/cil-mouse.png"))
- self.label_icon_2.setScaledContents(False)
+ self.checkBox_for_fake_focus = QCheckBox(self.frame_2)
+ self.checkBox_for_fake_focus.setObjectName(u"checkBox_for_fake_focus")
+ self.checkBox_for_fake_focus.setGeometry(QRect(70, 10, 0, 0))
self.layoutWidget_2 = QWidget(self.frame)
self.layoutWidget_2.setObjectName(u"layoutWidget_2")
- self.layoutWidget_2.setGeometry(QRect(20, 554, 571, 36))
+ self.layoutWidget_2.setGeometry(QRect(20, 483, 571, 36))
self.horizontalLayout_3 = QHBoxLayout(self.layoutWidget_2)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
@@ -730,7 +708,19 @@ def setupUi(self, EditBookmarksWindowUI):
self.horizontalLayout_3.setStretch(0, 3)
self.horizontalLayout_3.setStretch(1, 28)
self.horizontalLayout_3.setStretch(2, 3)
+ self.frame_top_btns.raise_()
+ self.layoutWidget_2.raise_()
+ self.frame_2.raise_()
EditBookmarksWindowUI.setCentralWidget(self.centralwidget)
+ QWidget.setTabOrder(self.checkBox_for_fake_focus, self.pushButton_minimize)
+ QWidget.setTabOrder(self.pushButton_minimize, self.pushButton_shiftUp)
+ QWidget.setTabOrder(self.pushButton_shiftUp, self.pushButton_shiftDown)
+ QWidget.setTabOrder(self.pushButton_shiftDown, self.pushButton_AddBookmark)
+ QWidget.setTabOrder(self.pushButton_AddBookmark, self.pushButton_removeItem)
+ QWidget.setTabOrder(self.pushButton_removeItem, self.pushButton_createFromBackdrops)
+ QWidget.setTabOrder(self.pushButton_createFromBackdrops, self.pushButton_reset)
+ QWidget.setTabOrder(self.pushButton_reset, self.pushButton_close)
+ QWidget.setTabOrder(self.pushButton_close, self.tableWidget_BookmarksList)
self.retranslateUi(EditBookmarksWindowUI)
@@ -788,7 +778,7 @@ def retranslateUi(self, EditBookmarksWindowUI):
#endif // QT_CONFIG(tooltip)
self.pushButton_shiftDown.setText("")
#if QT_CONFIG(tooltip)
- self.pushButton_AddBookmark.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Set Selected Node to Selected Row(Index)", None))
+ self.pushButton_AddBookmark.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Assign Selected Node to Selected Bookmark", None))
#endif // QT_CONFIG(tooltip)
self.pushButton_AddBookmark.setText("")
#if QT_CONFIG(tooltip)
@@ -803,9 +793,7 @@ def retranslateUi(self, EditBookmarksWindowUI):
self.pushButton_reset.setToolTip(QCoreApplication.translate("EditBookmarksWindowUI", u"Remove (Set Empty) All Bookmarks", None))
#endif // QT_CONFIG(tooltip)
self.pushButton_reset.setText("")
- self.label_7.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Tips", None))
- self.label_14.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Middle Button : Edit", None))
- self.label_icon_2.setText("")
+ self.checkBox_for_fake_focus.setText("")
self.label_plugins_version.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
self.label_credit.setText(QCoreApplication.translate("EditBookmarksWindowUI", u"By Hossein Karamian", None))
# retranslateUi
diff --git a/Km_NodeGraphEN/Ui_Templates.py b/Km_NodeGraphEN/Ui_Templates.py
index e6ceb1e..1d2def9 100644
--- a/Km_NodeGraphEN/Ui_Templates.py
+++ b/Km_NodeGraphEN/Ui_Templates.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
################################################################################
-## Form generated from reading UI file 'panel_v02 - TemplatesmWAWNR.ui'
+## Form generated from reading UI file 'panel_v02 - TemplatesyHDgQf.ui'
##
## Created by: Qt User Interface Compiler version 5.15.0
##
@@ -442,6 +442,9 @@ def setupUi(self, TemplatesWindowUI):
icon3 = QIcon()
icon3.addFile(os.path.dirname(__file__)+"/icons/cil-library-add.png", QSize(), QIcon.Normal, QIcon.Off)
self.pushButton_load.setIcon(icon3)
+ self.checkBox_for_fake_focus = QCheckBox(self.frame_2)
+ self.checkBox_for_fake_focus.setObjectName(u"checkBox_for_fake_focus")
+ self.checkBox_for_fake_focus.setGeometry(QRect(20, 10, 0, 17))
self.layoutWidget = QWidget(self.frame)
self.layoutWidget.setObjectName(u"layoutWidget")
self.layoutWidget.setGeometry(QRect(20, 353, 841, 36))
@@ -551,6 +554,15 @@ def setupUi(self, TemplatesWindowUI):
self.frame_4.raise_()
self.frame_2.raise_()
TemplatesWindowUI.setCentralWidget(self.centralwidget)
+ QWidget.setTabOrder(self.checkBox_for_fake_focus, self.pushButton_remove)
+ QWidget.setTabOrder(self.pushButton_remove, self.listWidget_templateItems)
+ QWidget.setTabOrder(self.listWidget_templateItems, self.listWidget_templateList)
+ QWidget.setTabOrder(self.listWidget_templateList, self.pushButton_load)
+ QWidget.setTabOrder(self.pushButton_load, self.listWidget_newTemplateItems)
+ QWidget.setTabOrder(self.listWidget_newTemplateItems, self.lineEdit_templateName)
+ QWidget.setTabOrder(self.lineEdit_templateName, self.pushButton_add)
+ QWidget.setTabOrder(self.pushButton_add, self.pushButton_close)
+ QWidget.setTabOrder(self.pushButton_close, self.pushButton_minimize)
self.retranslateUi(TemplatesWindowUI)
@@ -605,6 +617,7 @@ def retranslateUi(self, TemplatesWindowUI):
self.listWidget_templateItems.setSortingEnabled(__sortingEnabled1)
self.pushButton_load.setText(QCoreApplication.translate("TemplatesWindowUI", u"Load", None))
+ self.checkBox_for_fake_focus.setText(QCoreApplication.translate("TemplatesWindowUI", u"CheckBox", None))
self.label_plugins_version.setText(QCoreApplication.translate("TemplatesWindowUI", u"Km NodeGraph Easy Navigate v2.0", None))
self.label_credit.setText(QCoreApplication.translate("TemplatesWindowUI", u"By Hossein Karamian", None))
self.label_18.setText(QCoreApplication.translate("TemplatesWindowUI", u"Add New Template", None))
diff --git a/Km_NodeGraphEN/menu.py b/Km_NodeGraphEN/menu.py
index c6b5b28..1150e2c 100644
--- a/Km_NodeGraphEN/menu.py
+++ b/Km_NodeGraphEN/menu.py
@@ -5,7 +5,7 @@
settings = model.Settings().Load()
menu = nuke.menu("Nuke")
Km_NGJ = menu.addMenu("KmTools")
-Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.ShowMainWindow()",settings["shortcut"])
+Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Show Panel","Km_NodeGraph_Easy_Navigate.ShowMainWindow()",settings["shortcut"],shortcutContext=2)
Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Settings | Help","Km_NodeGraph_Easy_Navigate.ShowSettings()","")
Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Edit Bookmarks","Km_NodeGraph_Easy_Navigate.ShowEditBookmarksWindow()","")
Km_NGJ.addCommand("Km NodeGraph Easy Navigate/Templates","Km_NodeGraph_Easy_Navigate.ShowTemplatesWindow()","")
\ No newline at end of file
diff --git a/Km_NodeGraphEN/settings.json b/Km_NodeGraphEN/settings.json
index 2448e7d..918c372 100644
--- a/Km_NodeGraphEN/settings.json
+++ b/Km_NodeGraphEN/settings.json
@@ -1 +1 @@
-{"zoomEffect": "Disable", "shakeEffect": "Disable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1.0", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "3", "bookmarksGridRows": "3", "bookmarksButtonWidth": "110", "bookmarksButtonHeight": "50"}
\ No newline at end of file
+{"zoomEffect": "Disable", "shakeEffect": "Enable", "mainWindowFadeInEffect": "Enable", "shortcut": "shift+e", "nodeGraphZoomScale": "1.0", "templateGlobalOverride": "Disable", "globalOverrideTemplateFileName": "1Up_project.json", "bookmarksGridColumns": "5", "bookmarksGridRows": "5", "bookmarksButtonWidth": "120", "bookmarksButtonHeight": "50"}
\ No newline at end of file
From 9ec236d78cc7bfde87fc2d0fa6ca25c2d960cc5d Mon Sep 17 00:00:00 2001
From: hkaramian <93508495+hkaramian@users.noreply.github.com>
Date: Mon, 3 Jan 2022 19:45:45 +0330
Subject: [PATCH 05/11] v2.0 dev
---
Dev-Files/Info/UserGuide.docx | Bin 0 -> 411130 bytes
Dev-Files/Info/UserGuide.pdf | Bin 0 -> 490135 bytes
Dev-Files/Info/icon.jpg | Bin 0 -> 114230 bytes
Dev-Files/Info/icon.png | Bin 0 -> 126795 bytes
Dev-Files/Info/icon.psd | Bin 0 -> 598485 bytes
Dev-Files/Info/icon2.png | Bin 0 -> 104073 bytes
Dev-Files/Info/k_logo.png | Bin 0 -> 19825 bytes
Dev-Files/Info/nuke.png | Bin 0 -> 157132 bytes
Dev-Files/Info/pics/0.jpg | Bin 0 -> 8770 bytes
Dev-Files/Info/pics/1.jpg | Bin 0 -> 25256 bytes
Dev-Files/Info/pics/2.jpg | Bin 0 -> 24418 bytes
Dev-Files/Info/poster.jpg | Bin 0 -> 25499 bytes
Dev-Files/Info/~$erGuide.docx | Bin 0 -> 162 bytes
Dev-Files/Info/~WRL3767.tmp | Bin 0 -> 676408 bytes
Km_NodeGraphEN/Km_NodeGraph_Easy_Navigate.py | 27 ++++++++++++++++--
Km_NodeGraphEN/UserGuide.pdf | Bin 409997 -> 490135 bytes
...py.json => settings - Default Values.json} | 0
Km_NodeGraphEN/settings.json | 2 +-
Km_NodeGraphEN/templates/1Up_project.json | 1 -
.../templates/CG_Multipass_Comp.json | 1 +
Km_NodeGraphEN/templates/Chromakey.json | 1 +
Km_NodeGraphEN/templates/current_proj.json | 1 -
.../templates/divar_window_shots.json | 1 -
Km_NodeGraphEN/templates/frm_proj.json | 1 -
Km_NodeGraphEN/templates/test_with_space.json | 1 -
25 files changed, 27 insertions(+), 9 deletions(-)
create mode 100644 Dev-Files/Info/UserGuide.docx
create mode 100644 Dev-Files/Info/UserGuide.pdf
create mode 100644 Dev-Files/Info/icon.jpg
create mode 100644 Dev-Files/Info/icon.png
create mode 100644 Dev-Files/Info/icon.psd
create mode 100644 Dev-Files/Info/icon2.png
create mode 100644 Dev-Files/Info/k_logo.png
create mode 100644 Dev-Files/Info/nuke.png
create mode 100644 Dev-Files/Info/pics/0.jpg
create mode 100644 Dev-Files/Info/pics/1.jpg
create mode 100644 Dev-Files/Info/pics/2.jpg
create mode 100644 Dev-Files/Info/poster.jpg
create mode 100644 Dev-Files/Info/~$erGuide.docx
create mode 100644 Dev-Files/Info/~WRL3767.tmp
rename Km_NodeGraphEN/{settings - Copy.json => settings - Default Values.json} (100%)
delete mode 100644 Km_NodeGraphEN/templates/1Up_project.json
create mode 100644 Km_NodeGraphEN/templates/CG_Multipass_Comp.json
create mode 100644 Km_NodeGraphEN/templates/Chromakey.json
delete mode 100644 Km_NodeGraphEN/templates/current_proj.json
delete mode 100644 Km_NodeGraphEN/templates/divar_window_shots.json
delete mode 100644 Km_NodeGraphEN/templates/frm_proj.json
delete mode 100644 Km_NodeGraphEN/templates/test_with_space.json
diff --git a/Dev-Files/Info/UserGuide.docx b/Dev-Files/Info/UserGuide.docx
new file mode 100644
index 0000000000000000000000000000000000000000..b7525170d6e9abde7bbc786b474d8fbc43f78a3d
GIT binary patch
literal 411130
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