From c620f17344a50d3ec3032047046ca41d5370a2ce Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 4 Feb 2023 18:53:53 +0100 Subject: [PATCH] added addEntrybox --- grum/menus/menubase.py | 46 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/grum/menus/menubase.py b/grum/menus/menubase.py index 0642c86..f84298a 100644 --- a/grum/menus/menubase.py +++ b/grum/menus/menubase.py @@ -1,5 +1,5 @@ -from PyQt5.QtGui import QKeySequence -from PyQt5.QtWidgets import QAction, QActionGroup +from PyQt5.QtGui import QKeySequence, QIntValidator +from PyQt5.QtWidgets import QAction, QActionGroup, QWidgetAction, QLineEdit class MenuBase: @@ -31,6 +31,48 @@ class MenuBase: self.checkboxes[name] = action return action + + def addEntrybox(self, name, placeholder=None, state=False, triggered=None): + cb = self.addCheckbox(name, state=state) + + edit = QLineEdit(self.qmenu) + edit.setValidator(QIntValidator()) #TODO: make optional + edit.setEnabled(state) + if placeholder: + edit.setPlaceholderText(placeholder) + edit.setContentsMargins(8, 5, 8, 5) # mimic margins of other actions TODO: this probably depends on the theme + + @cb.toggled.connect + def propagate_state_and_keep_menu_open_and_focus_edit(checked): + edit.setEnabled(checked) + if checked: + self.qmenu.show() + self.qmenu.setActiveAction(cb) + edit.setFocus() + + @edit.returnPressed.connect + def close_menu(): + self.qmenu.close() + + if triggered: + @cb.triggered.connect + def confirm_disabled(checked): + if not checked: + triggered(None) + + if triggered: + @edit.returnPressed.connect + def confirm_value(): + value = edit.text() + value = int(value) + triggered(value) + + action = QWidgetAction(self.qmenu) + action.setDefaultWidget(edit) + self.qmenu.addAction(action) + return action + + def addSeparator(self): self.qmenu.addSeparator()