From 7382b9566d08040dc832043d7a7367a1393b3fe3 Mon Sep 17 00:00:00 2001 From: "A.Bond" Date: Thu, 25 Mar 2021 21:31:05 +0600 Subject: [PATCH 1/5] Configure trigger key in preferences dialog --- InitGui.py | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/InitGui.py b/InitGui.py index 5b01e7a..015964b 100644 --- a/InitGui.py +++ b/InitGui.py @@ -2269,6 +2269,26 @@ def setDefaultPie(restore=False): group.SetInt("Radius", 100) group.SetInt("Button", 32) + def onTriggerSequenceChanged(seq): + seqAsString = seq.toString() + + if len(seqAsString) == 0: + return + + singleSequence = seqAsString.split(', ')[-1] + + keySequenceEdit.setKeySequence(singleSequence) + App.ParamGet("User parameter:BaseApp/PieMenu").SetString("triggerShortcut", singleSequence) + + if actionKey: + actionKey.setShortcut(keySequenceEdit.keySequence()) + + keySequenceEdit = QtGui.QKeySequenceEdit() + keySequenceEdit.setKeySequence(App.ParamGet("User parameter:BaseApp/PieMenu").GetString("triggerShortcut") or "TAB") + keySequenceEdit.keySequenceChanged.connect(onTriggerSequenceChanged) + + keySequenceLabel = QtGui.QLabel("Trigger shortcut") + def onControl(): global pieMenuDialog @@ -2285,6 +2305,11 @@ def onControl(): pieMenuTabLayout = QtGui.QVBoxLayout() pieMenuTab.setLayout(pieMenuTabLayout) + layoutKeySequenceEdit = QtGui.QHBoxLayout() + layoutKeySequenceEdit.addWidget(keySequenceLabel) + layoutKeySequenceEdit.addStretch(1) + layoutKeySequenceEdit.addWidget(keySequenceEdit) + layoutAddRemove = QtGui.QHBoxLayout() layoutAddRemove.addWidget(cBox) layoutAddRemove.addWidget(buttonAddPieMenu) @@ -2302,10 +2327,11 @@ def onControl(): layoutButton.addStretch(1) layoutButton.addWidget(spinButton) - pieMenuTabLayout.insertLayout(0, layoutAddRemove) - pieMenuTabLayout.insertSpacing(1, 24) - pieMenuTabLayout.insertLayout(2, layoutRadius) - pieMenuTabLayout.insertLayout(3, layoutButton) + pieMenuTabLayout.insertLayout(0, layoutKeySequenceEdit) + pieMenuTabLayout.insertLayout(1, layoutAddRemove) + pieMenuTabLayout.insertSpacing(2, 24) + pieMenuTabLayout.insertLayout(3, layoutRadius) + pieMenuTabLayout.insertLayout(4, layoutButton) pieMenuTabLayout.addStretch(0) contextTab = QtGui.QWidget() @@ -2385,6 +2411,7 @@ def addAccessoriesMenu(): mw = Gui.getMainWindow() + actionKey = None start = True for action in mw.findChildren(QtGui.QAction): @@ -2428,7 +2455,7 @@ def addAccessoriesMenu(): actionKey = QtGui.QAction(mw) actionKey.setText("Invoke pie menu") actionKey.setObjectName("PieMenuShortCut") - actionKey.setShortcut(QtGui.QKeySequence("TAB")) + actionKey.setShortcut(keySequenceEdit.keySequence()) actionKey.triggered.connect(PieMenuInstance.showAtMouse) mw.addAction(actionKey) From 37d5db871fc89a3c482adb5d77fe1873c72646ea Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 13 Dec 2023 14:58:45 -0600 Subject: [PATCH 2/5] Add `.gitignore` file --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ From 30054e142c346cb6df280b71a782bdc12693b225 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 13 Dec 2023 15:03:14 -0600 Subject: [PATCH 3/5] Read custom styles from text files - Previously the custom style of the elements was hardcoded in strings. - Now the style of each element is in a file on `./Resources/style` directory. - Now it's easier for users to change styles. - Also this commit removes spaces from some lines. --- InitGui.py | 148 ++++++++++-------------------- Resources/style/Button.qss | 22 +++++ Resources/style/Combo.qss | 5 + Resources/style/Container.qss | 1 + Resources/style/MenuClose.qss | 10 ++ Resources/style/QuickMenu.qss | 1 + Resources/style/QuickMenuItem.qss | 4 + 7 files changed, 94 insertions(+), 97 deletions(-) create mode 100644 Resources/style/Button.qss create mode 100644 Resources/style/Combo.qss create mode 100644 Resources/style/Container.qss create mode 100644 Resources/style/MenuClose.qss create mode 100644 Resources/style/QuickMenu.qss create mode 100644 Resources/style/QuickMenuItem.qss diff --git a/InitGui.py b/InitGui.py index 015964b..b41d925 100644 --- a/InitGui.py +++ b/InitGui.py @@ -37,13 +37,38 @@ def pieMenuStart(): from PySide import QtGui import PieMenuLocator as locator - path = locator.path() - respath = path + "/Resources/icons/" - # global status variables selectionTriggered = False contextPhase = False + path = locator.path() + respath = path + "/Resources/icons/" + stylePath = path + "/Resources/style/" + + with open(stylePath + "Button.qss", "r") as file: + styleButton = file.read() + with open(stylePath + "MenuClose.qss", "r") as file: + styleMenuClose = file.read() + with open(stylePath + "Container.qss", "r") as file: + styleContainer = file.read() + with open(stylePath + "Combo.qss", "r") as file: + styleCombo = file.read() + with open(stylePath + "QuickMenu.qss", "r") as file: + styleQuickMenu = file.read() + with open(stylePath + "QuickMenuItem.qss", "r") as file: + styleQuickMenuItem = file.read() + + iconClose = respath + "PieMenuClose.svg" + iconMenu = respath + "PieMenuQuickMenu.svg" + iconUp = respath + "PieMenuUp.svg" + iconDown = respath + "PieMenuDown.svg" + iconAdd = respath + "PieMenuAdd.svg" + iconRemove = respath + "PieMenuRemove.svg" + iconRename = respath + "PieMenuRename.svg" + iconCopy = respath + "PieMenuCopy.svg" + iconRemoveCommand = respath + "PieMenuRemoveCommand.svg" + + def remObsoleteParams(): """Remove obsolete parameters from older versions.""" paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") @@ -78,81 +103,13 @@ def addMenu(): addMenu() mw.workbenchActivated.connect(addMenu) - - + + def onPreferences(): """Open the preferences dialog.""" onControl() - styleButton = (""" - QToolButton { - background-color: lightGray; - border: 1px outset silver; - } - - QToolButton:disabled { - background-color: darkGray; - } - - QToolButton:hover { - background-color: lightBlue; - } - - QToolButton:checked { - background-color: lightGreen; - } - - QToolButton::menu-indicator { - subcontrol-origin: padding; - subcontrol-position: center center; - } - - """) - - styleMenuClose = (""" - QToolButton { - background-color: rgba(60,60,60,255); - color: silver; - border: 1px solid #1e1e1e; - } - - QToolButton::menu-indicator { - image: none; - } - - """) - - styleContainer = ("QMenu{background: transparent}") - - styleCombo = (""" - QComboBox { - background: transparent; - border: 1px solid transparent; - } - - """) - - styleQuickMenu = ("padding: 5px 10px 5px 10px") - - styleQuickMenuItem = (""" - QMenu::item { - padding: 5px 20px 5px 20px; - } - - """) - - iconClose = respath + "PieMenuClose.svg" - iconMenu = respath + "PieMenuQuickMenu.svg" - iconUp = respath + "PieMenuUp.svg" - iconDown = respath + "PieMenuDown.svg" - iconAdd = respath + "PieMenuAdd.svg" - iconRemove = respath + "PieMenuRemove.svg" - iconRename = respath + "PieMenuRename.svg" - iconCopy = respath + "PieMenuCopy.svg" - iconRemoveCommand = respath + "PieMenuRemoveCommand.svg" - - def radiusSize(buttonSize): radius = str(math.trunc(buttonSize / 2)) @@ -434,7 +391,7 @@ def onMenuToolbarGroup(sender): sender.triggered.connect(lambda sender: onToolbarGroup(sender)) def onToolbarGroup(sender): - + paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") if sender.text() == "Show": paramGet.SetBool("ToolBar", True) @@ -442,7 +399,7 @@ def onToolbarGroup(sender): newPieGroup = createPie(sender.data()) else: return - + workbenches = [] commands = [] @@ -630,12 +587,12 @@ def hide(self): self.menu.hide() def showAtMouse(self, notKeyTriggered=False): - + nonlocal selectionTriggered nonlocal contextPhase global lastPosX global lastPosY - + paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") enableContext = paramGet.GetBool("EnableContext") @@ -705,7 +662,7 @@ def showAtMouse(self, notKeyTriggered=False): else: lastPosX = pos.x() lastPosY = pos.y() - + for i in self.buttons: i.move(i.property("ButtonX") + (self.menuSize - i.size().width()) / 2, i.property("ButtonY") + (self.menuSize - i.size().height()) / 2) @@ -820,7 +777,7 @@ def obj(): def listTopo(): - + nonlocal selectionTriggered nonlocal contextPhase @@ -997,7 +954,7 @@ def actualizeWorkbenchActions(actions, toolList, actionMap): # after workbench activation actionMap has to be actualized Gui.activateWorkbench(cmdWb) return True - + return False @@ -1089,7 +1046,7 @@ def updateCommands(context=False): actionMapAll = getGuiActionMapAll() lastWorkbench = Gui.activeWorkbench() - + while actualizeWorkbenchActions(actions, toolList, actionMapAll): actionMapAll = getGuiActionMapAll() else: @@ -1357,9 +1314,6 @@ def splitIndexList(indexList): def createPie(text): - - - paramIndexGet = App.ParamGet("User parameter:BaseApp/PieMenu/Index") indexList = paramIndexGet.GetString("IndexList") @@ -1414,9 +1368,9 @@ def onButtonAddPieMenu(): text, ok = inputTextDialog("New menu") if not ok: return - + createPie(text) - + buttonAddPieMenu.clicked.connect(onButtonAddPieMenu) @@ -1490,8 +1444,8 @@ def onButtonRemovePieMenu(): buttonRenamePieMenu.setIcon(QtGui.QIcon(iconRename)) buttonRenamePieMenu.setMinimumHeight(30) buttonRenamePieMenu.setMinimumWidth(30) - - + + def onButtonRenamePieMenu(): text, ok = inputTextDialog("Rename menu") @@ -1529,7 +1483,7 @@ def onButtonRenamePieMenu(): cBoxUpdate() buttonRenamePieMenu.clicked.connect(onButtonRenamePieMenu) - + buttonCopyPieMenu = QtGui.QToolButton() buttonCopyPieMenu.setToolTip("Copy current pie menu") buttonCopyPieMenu.setIcon(QtGui.QIcon(iconCopy)) @@ -1552,7 +1506,7 @@ def getCurrentMenuIndex(currentMenuName): return "-1" def copyIndexParams(grpOrg, grpCopy): - + valButOrg = grpOrg.GetInt("Button") valRadOrg = grpOrg.GetInt("Radius") tbOrg = grpOrg.GetString("ToolList") @@ -1586,9 +1540,9 @@ def copyContextParams(grpOrg, grpCopy): grpCntCopy.SetString("ObjectSign", objSgnOrg) grpCntCopy.SetInt("ObjectValue", objValOrg) - + def onButtonCopyPieMenu(): - + text, ok = inputTextDialog("Copy menu") if not ok: return @@ -1641,7 +1595,7 @@ def onButtonCopyPieMenu(): paramIndexGet.SetString(indexCopy, text) cBoxUpdate() - + buttonCopyPieMenu.clicked.connect(onButtonCopyPieMenu) labelRadius = QtGui.QLabel("Pie size") @@ -1818,7 +1772,7 @@ def onToolListWidget(): buttonList() toolListWidget.itemChanged.connect(onToolListWidget) - + def buttonList2ToolList(buttonListWidget): @@ -1849,7 +1803,7 @@ def onButtonUp(): buttonListWidget.insertItem(currentIndex - 1, currentItem) buttonListWidget.setCurrentRow(currentIndex - 1) buttonList2ToolList(buttonListWidget) - + buttonUp.clicked.connect(onButtonUp) buttonDown = QtGui.QToolButton() @@ -2394,9 +2348,9 @@ def onControl(): def addAccessoriesMenu(): - + if mw.property("eventLoop"): - + startAM = False try: mw.mainWindowClosed diff --git a/Resources/style/Button.qss b/Resources/style/Button.qss new file mode 100644 index 0000000..9223856 --- /dev/null +++ b/Resources/style/Button.qss @@ -0,0 +1,22 @@ +QToolButton { + background-color: lightGray; + border: 1px outset silver; +} + +QToolButton:disabled { + background-color: darkGray; +} + +QToolButton:hover { + background-color: lightBlue; +} + +QToolButton:checked { + background-color: lightGreen; +} + +QToolButton::menu-indicator { + subcontrol-origin: padding; + subcontrol-position: center center; +} + diff --git a/Resources/style/Combo.qss b/Resources/style/Combo.qss new file mode 100644 index 0000000..383191c --- /dev/null +++ b/Resources/style/Combo.qss @@ -0,0 +1,5 @@ +QComboBox { + background: transparent; + border: 1px solid transparent; +} + diff --git a/Resources/style/Container.qss b/Resources/style/Container.qss new file mode 100644 index 0000000..fa428b4 --- /dev/null +++ b/Resources/style/Container.qss @@ -0,0 +1 @@ +QMenu{background: transparent} diff --git a/Resources/style/MenuClose.qss b/Resources/style/MenuClose.qss new file mode 100644 index 0000000..e0acfc7 --- /dev/null +++ b/Resources/style/MenuClose.qss @@ -0,0 +1,10 @@ +QToolButton { + background-color: rgba(60,60,60,255); + color: silver; + border: 1px solid #1e1e1e; +} + +QToolButton::menu-indicator { + image: none; +} + diff --git a/Resources/style/QuickMenu.qss b/Resources/style/QuickMenu.qss new file mode 100644 index 0000000..0290fa7 --- /dev/null +++ b/Resources/style/QuickMenu.qss @@ -0,0 +1 @@ +padding: 5px 10px 5px 10px diff --git a/Resources/style/QuickMenuItem.qss b/Resources/style/QuickMenuItem.qss new file mode 100644 index 0000000..40e6fbb --- /dev/null +++ b/Resources/style/QuickMenuItem.qss @@ -0,0 +1,4 @@ +QMenu::item { + padding: 5px 20px 5px 20px; +} + From e8782da0dbd6e4f4c86fdfa522fbcbd61d96af16 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 13 Dec 2023 15:50:41 -0600 Subject: [PATCH 4/5] Improve code, fix lint warnings - Add some docstrings - Remove extra colon/spaces - Use "not in" notation - Split long lines --- InitGui.py | 78 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/InitGui.py b/InitGui.py index b41d925..fd54168 100644 --- a/InitGui.py +++ b/InitGui.py @@ -28,6 +28,7 @@ PIE_MENU_VERSION = "1.2.7" def pieMenuStart(): + """Main function that starts the Pie Menu.""" import math import operator import platform @@ -111,6 +112,7 @@ def onPreferences(): def radiusSize(buttonSize): + """Calculates border radius for QToolButton based on the given buttonSize.""" radius = str(math.trunc(buttonSize / 2)) @@ -118,6 +120,7 @@ def radiusSize(buttonSize): def iconSize(buttonSize): + """Calculates the size of an icon based on the given buttonSize.""" icon = buttonSize / 3 * 2 @@ -125,13 +128,14 @@ def iconSize(buttonSize): def closeButton(buttonSize=32): + """Style the close button.""" icon = iconSize(buttonSize) radius = radiusSize(buttonSize) button = QtGui.QToolButton() - button.setProperty("ButtonX", 0) - button.setProperty("ButtonY", 0) + button.setProperty("ButtonX", 0) # +, right + button.setProperty("ButtonY", 0) # +, down button.setGeometry(0, 0, buttonSize, buttonSize) button.setIconSize(QtCore.QSize(icon, icon)) button.setIcon(QtGui.QIcon(iconClose)) @@ -148,6 +152,7 @@ def onButton(): def quickMenu(buttonSize=20): + """Style the quick menu button""" icon = iconSize(buttonSize) radius = radiusSize(buttonSize) @@ -157,8 +162,8 @@ def quickMenu(buttonSize=20): button = QtGui.QToolButton() button.setMenu(menu) - button.setProperty("ButtonX", 0) - button.setProperty("ButtonY", 32) + button.setProperty("ButtonX", 0) # +,right + button.setProperty("ButtonY", 32) # +, down button.setGeometry(0, 0, buttonSize, buttonSize) button.setStyleSheet(styleMenuClose + radius) button.setIconSize(QtCore.QSize(icon, icon)) @@ -215,6 +220,7 @@ def quickMenu(buttonSize=20): prefButtonWidgetAction.setDefaultWidget(prefButton) def setChecked(): + """Update the state of checkBoxes according to data on saved parameters.""" paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") if paramGet.GetString("TriggerMode") == "Hover": @@ -350,7 +356,8 @@ def onMenuToolBar(): if len(commands) != 0: menu = QtGui.QMenu(i.windowTitle()) - menu.aboutToShow.connect(lambda sender=menu: onMenuToolbarGroup(sender)) + menu.aboutToShow.connect(lambda sender=menu: \ + onMenuToolbarGroup(sender)) menuToolBar.addMenu(menu) else: pass @@ -368,7 +375,7 @@ def isActualPie(text): else: idMenu = entry if idMenu == text: - return True; + return True return False @@ -412,9 +419,9 @@ def onToolbarGroup(sender): getGuiToolButtonData(sender.data(), None, None, workbenches) toolbar_desc = ", ".join(workbenches) toolbar_desc = toolbar_desc + ': ' + sender.data() - paramGet.SetString("ToolBar", toolbar_desc) + paramGet.SetString("ToolBar", toolbar_desc) PieMenuInstance.hide() - PieMenuInstance.showAtMouse(notKeyTriggered=True) + PieMenuInstance.showAtMouse(notKeyTriggered=True) toolbarGroup.triggered.connect(onToolbarGroup) @@ -471,7 +478,8 @@ def __init__(self): self.menu = QtGui.QMenu(mw) self.menuSize = 0 self.menu.setStyleSheet(styleContainer) - self.menu.setWindowFlags(self.menu.windowFlags() | QtCore.Qt.FramelessWindowHint) + self.menu.setWindowFlags(self.menu.windowFlags() | + QtCore.Qt.FramelessWindowHint) self.menu.setAttribute(QtCore.Qt.WA_TranslucentBackground) if compositingManager: @@ -664,12 +672,15 @@ def showAtMouse(self, notKeyTriggered=False): lastPosY = pos.y() for i in self.buttons: - i.move(i.property("ButtonX") + (self.menuSize - i.size().width()) / 2, - i.property("ButtonY") + (self.menuSize - i.size().height()) / 2) + i.move(i.property("ButtonX") + + (self.menuSize - i.size().width()) / 2, + i.property("ButtonY") + + (self.menuSize - i.size().height()) / 2) i.setVisible(True) - self.menu.popup(QtCore.QPoint(pos.x() - self.menuSize / 2, pos.y() - self.menuSize / 2)) + self.menu.popup(QtCore.QPoint(pos.x() - self.menuSize / 2, pos.y() + - self.menuSize / 2)) sign = { @@ -688,6 +699,7 @@ def contextList(): contextAll.clear() + # Get current pieMenus using available index if indexList: indexList = indexList.split(".,.") @@ -914,7 +926,7 @@ def getActionData(action, actions, commands, workbenches): workbench = extractWorkbench(command) if workbenches is not None: - if not workbench in workbenches: + if workbench not in workbenches: workbenches.append(workbench) @@ -934,7 +946,7 @@ def actualizeWorkbenchActions(actions, toolList, actionMap): if i == "": pass elif i in actionMap: - if not actionMap[i] in actions: + if actionMap[i] not in actions: actions.append(actionMap[i]) else: cmd_parts = i.split("_") @@ -1058,6 +1070,15 @@ def updateCommands(context=False): def getGroup(mode=0): + """ + Obtain the parameter group. + + When: + mode = 0: read from comboBox at GUI + mode = 1: read from CurrentPie parameter + mode = 2: read from ContextPie parameter + If it doesn't exists return default PieMenu group + """ paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") paramIndexGet = App.ParamGet("User parameter:BaseApp/PieMenu/Index") indexList = paramIndexGet.GetString("IndexList") @@ -1075,6 +1096,7 @@ def getGroup(mode=0): else: text = cBox.currentText() + # Get list of available groups if indexList: indexList = indexList.split(".,.") @@ -1089,6 +1111,8 @@ def getGroup(mode=0): group = None + # Iterate over thr available groups on indexList + # to find the group stored on `text` var for i in indexList: a = str(i) try: @@ -1102,8 +1126,10 @@ def getGroup(mode=0): pass if group: + # group was found, good pass else: + # return the default PieMenu group if 0 in indexList: group = paramIndexGet.GetGroup("0") else: @@ -1213,7 +1239,7 @@ def cBoxUpdate(): pieList.append(paramIndexGet.GetString(a)) duplicates = [] - for i in pieList: + for i in pieList: if i == currentPie: pass else: @@ -1417,7 +1443,7 @@ def onButtonRemovePieMenu(): paramIndexGet.RemGroup(a) paramIndexGet.RemString(a) - # special case treatment + # special case treatment if pie == currentPie: currentPie = "Default" try: @@ -1425,7 +1451,7 @@ def onButtonRemovePieMenu(): except TypeError: paramGet.SetString("CurrentPie", currentPie) if pie == contextPie: - paramGet.RemString("ContextPie") + paramGet.RemString("ContextPie") else: pass @@ -1482,7 +1508,7 @@ def onButtonRenamePieMenu(): pass cBoxUpdate() - buttonRenamePieMenu.clicked.connect(onButtonRenamePieMenu) + buttonRenamePieMenu.clicked.connect(onButtonRenamePieMenu) buttonCopyPieMenu = QtGui.QToolButton() buttonCopyPieMenu.setToolTip("Copy current pie menu") @@ -1501,7 +1527,7 @@ def getCurrentMenuIndex(currentMenuName): a = str(i) indexName = paramIndexGet.GetString(a) if indexName == currentMenuName: - return a; + return a return "-1" @@ -2021,6 +2047,7 @@ def setDefaults(): vertexSign = groupContext.GetString("VertexSign") + # Make sure vertexSign has a valid value if vertexSign in sign: pass else: @@ -2195,7 +2222,7 @@ def setDefaultPie(restore=False): if 0 in indexList: if restore: group = paramIndexGet.GetGroup("0") - group.SetString("ToolList", ".,.".join(defaultTools)) + group.SetString("ToolList", ".,.".join(defaultTools)) else: pass else: @@ -2232,18 +2259,21 @@ def onTriggerSequenceChanged(seq): singleSequence = seqAsString.split(', ')[-1] keySequenceEdit.setKeySequence(singleSequence) - App.ParamGet("User parameter:BaseApp/PieMenu").SetString("triggerShortcut", singleSequence) + App.ParamGet("User parameter:BaseApp/PieMenu") \ + .SetString("triggerShortcut", singleSequence) if actionKey: actionKey.setShortcut(keySequenceEdit.keySequence()) + keySequenceLabel = QtGui.QLabel("Custom trigger shortcut") + keySequenceEdit = QtGui.QKeySequenceEdit() - keySequenceEdit.setKeySequence(App.ParamGet("User parameter:BaseApp/PieMenu").GetString("triggerShortcut") or "TAB") + keySequenceEdit.setKeySequence(App.ParamGet("User parameter:BaseApp/PieMenu") \ + .GetString("triggerShortcut") or "TAB") keySequenceEdit.keySequenceChanged.connect(onTriggerSequenceChanged) - keySequenceLabel = QtGui.QLabel("Trigger shortcut") - def onControl(): + """Initializes the preferences dialog.""" global pieMenuDialog From c5bd9f349dd860c9df563245256ed42f3032e523 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Fri, 15 Dec 2023 19:59:11 -0600 Subject: [PATCH 5/5] Integrate custom trigger shortcut with default TAB The integration made by A. Bond allows to change the trigger to any valid keyboard shortcut but the only way to restore to TAB was removing the parameter that contains the new shortcut. The reason? When you press TAB with the intention to make it the shortcut instead of being taken by the QKeySequenceEdit the GUI interpreted the TAB key press as a command to pass to next element. This commit adds a checkbox to let the user override the default TAB shortcut, after changing the shortcut you can came back to TAB uncheking the checkbox. Fix #3 --- InitGui.py | 58 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/InitGui.py b/InitGui.py index fd54168..c9af825 100644 --- a/InitGui.py +++ b/InitGui.py @@ -233,6 +233,11 @@ def setChecked(): else: pass + if paramGet.GetBool("EnableCustomTrigger"): + checkCustomShortcut.setChecked(True) + else: + checkCustomShortcut.setChecked(False) + setChecked() def onModeGroup(): @@ -1266,6 +1271,7 @@ def onPieChange(): toolList() setDefaults() setCheckContext() + setCheckCustomShortcut() cBox.currentIndexChanged.connect(onPieChange) @@ -2037,6 +2043,7 @@ def onResetButton(): group.RemGroup("Context") setDefaults() setCheckContext() + setCheckCustomShortcut() resetButton.clicked.connect(onResetButton) @@ -2260,16 +2267,42 @@ def onTriggerSequenceChanged(seq): keySequenceEdit.setKeySequence(singleSequence) App.ParamGet("User parameter:BaseApp/PieMenu") \ - .SetString("triggerShortcut", singleSequence) + .SetString("CustomTriggerShortcut", singleSequence) if actionKey: actionKey.setShortcut(keySequenceEdit.keySequence()) - keySequenceLabel = QtGui.QLabel("Custom trigger shortcut") + customShortcutLabel = QtGui.QLabel("Override 'TAB' shortcut") + checkCustomShortcut = QtGui.QCheckBox() + + def setCheckCustomShortcut(): + """Update editability of keySequenceEdit element.""" + paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") + + if paramGet.GetBool("EnableCustomTrigger"): + keySequenceEdit.setEnabled(True) + else: + keySequenceEdit.setEnabled(False) + def onCheckCustomShorcut(): + """Update PieMenu/EnableCustomTrigger value on checkBox change.""" + paramGet = App.ParamGet("User parameter:BaseApp/PieMenu") + + if checkCustomShortcut.isChecked(): + keySequenceEdit.setEnabled(True) + paramGet.SetBool("EnableCustomTrigger", 1) + else: + keySequenceEdit.setEnabled(False) + paramGet.SetBool("EnableCustomTrigger", 0) + # Removing the custom shortcut restores the TAB shortcut + paramGet.RemString("CustomTriggerShortcut") + + checkCustomShortcut.stateChanged.connect(onCheckCustomShorcut) + + keySequenceLabel = QtGui.QLabel("Custom trigger shortcut") keySequenceEdit = QtGui.QKeySequenceEdit() keySequenceEdit.setKeySequence(App.ParamGet("User parameter:BaseApp/PieMenu") \ - .GetString("triggerShortcut") or "TAB") + .GetString("CustomTriggerShortcut") or "TAB") keySequenceEdit.keySequenceChanged.connect(onTriggerSequenceChanged) def onControl(): @@ -2289,6 +2322,11 @@ def onControl(): pieMenuTabLayout = QtGui.QVBoxLayout() pieMenuTab.setLayout(pieMenuTabLayout) + layoutNewShortcut = QtGui.QHBoxLayout() + layoutNewShortcut.addWidget(customShortcutLabel) + layoutNewShortcut.addStretch(1) + layoutNewShortcut.addWidget(checkCustomShortcut) + layoutKeySequenceEdit = QtGui.QHBoxLayout() layoutKeySequenceEdit.addWidget(keySequenceLabel) layoutKeySequenceEdit.addStretch(1) @@ -2311,11 +2349,12 @@ def onControl(): layoutButton.addStretch(1) layoutButton.addWidget(spinButton) - pieMenuTabLayout.insertLayout(0, layoutKeySequenceEdit) - pieMenuTabLayout.insertLayout(1, layoutAddRemove) - pieMenuTabLayout.insertSpacing(2, 24) - pieMenuTabLayout.insertLayout(3, layoutRadius) - pieMenuTabLayout.insertLayout(4, layoutButton) + pieMenuTabLayout.insertLayout(0, layoutNewShortcut) + pieMenuTabLayout.insertLayout(1, layoutKeySequenceEdit) + pieMenuTabLayout.insertLayout(2, layoutAddRemove) + pieMenuTabLayout.insertSpacing(3, 24) + pieMenuTabLayout.insertLayout(4, layoutRadius) + pieMenuTabLayout.insertLayout(5, layoutButton) pieMenuTabLayout.addStretch(0) contextTab = QtGui.QWidget() @@ -2394,6 +2433,7 @@ def addAccessoriesMenu(): accessoriesMenu() + # Start of the application mw = Gui.getMainWindow() actionKey = None start = True @@ -2451,4 +2491,4 @@ def addAccessoriesMenu(): else: pass -pieMenuStart() \ No newline at end of file +pieMenuStart()