vial/src/main/python/any_keycode_dialog.py

59 lines
1.9 KiB
Python
Raw Normal View History

# SPDX-License-Identifier: GPL-2.0-or-later
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLineEdit, QLabel
2021-03-14 17:56:09 -04:00
from keycodes import Keycode
from util import tr
class AnyKeycodeDialog(QDialog):
def __init__(self, initial):
super().__init__()
self.setWindowTitle(tr("AnyKeycodeDialog", "Enter an arbitrary keycode"))
self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
self.buttons.accepted.connect(self.accept)
self.buttons.rejected.connect(self.reject)
self.lbl_computed = QLabel()
self.txt_entry = QLineEdit()
self.txt_entry.textChanged.connect(self.on_change)
self.layout = QVBoxLayout()
self.layout.addWidget(self.txt_entry)
self.layout.addWidget(self.lbl_computed)
self.layout.addWidget(self.buttons)
self.setLayout(self.layout)
self.value = initial
ser = Keycode.serialize(initial)
if isinstance(ser, int):
ser = hex(ser)
self.txt_entry.setText(ser)
self.txt_entry.selectAll()
self.on_change()
def on_change(self):
text = self.txt_entry.text()
value = err = None
try:
value = Keycode.deserialize(text, reraise=True)
except Exception as e:
err = str(e)
if not text:
self.value = -1
self.lbl_computed.setText(tr("AnyKeycodeDialog", "Enter an expression"))
elif err:
self.value = -1
self.lbl_computed.setText(tr("AnyKeycodeDialog", "Invalid input: {}").format(err))
elif isinstance(value, int):
self.value = value
self.lbl_computed.setText(tr("AnyKeycodeDialog", "Computed value: 0x{:X}").format(value))
else:
self.value = -1
self.lbl_computed.setText(tr("AnyKeycodeDialog", "Invalid input"))
self.buttons.button(QDialogButtonBox.Ok).setEnabled(0 <= self.value < 2 ** 16)