added addEntrybox
This commit is contained in:
@ -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()
|
||||
|
||||
|
Reference in New Issue
Block a user