diff --git a/artiq/gui/tools.py b/artiq/gui/tools.py index 2171ab915..957823780 100644 --- a/artiq/gui/tools.py +++ b/artiq/gui/tools.py @@ -4,6 +4,40 @@ import logging from PyQt5 import QtCore, QtWidgets +class DoubleClickLineEdit(QtWidgets.QLineEdit): + finished = QtCore.pyqtSignal() + + def __init__(self, init): + QtWidgets.QLineEdit.__init__(self, init) + self.setFrame(False) + self.setReadOnly(True) + self.returnPressed.connect(self._return_pressed) + self.editingFinished.connect(self._editing_finished) + self._text = init + + def mouseDoubleClickEvent(self, event): + if self.isReadOnly(): + self.setReadOnly(False) + self.setFrame(True) + QtWidgets.QLineEdit.mouseDoubleClickEvent(self, event) + + def _return_pressed(self): + self._text = self.text() + + def _editing_finished(self): + self.setReadOnly(True) + self.setFrame(False) + self.setText(self._text) + self.finished.emit() + + def keyPressEvent(self, event): + key = event.key() + if key == QtCore.Qt.Key_Escape and not self.isReadOnly(): + self.editingFinished.emit() + else: + QtWidgets.QLineEdit.keyPressEvent(self, event) + + def log_level_to_name(level): if level >= logging.CRITICAL: return "CRITICAL"