From 15e1aef38b2733da5f2e8756d1470b83aaa6b809 Mon Sep 17 00:00:00 2001 From: Simon Renblad Date: Wed, 24 Apr 2024 17:05:57 +0800 Subject: [PATCH] moninj: add _DoubleClickLineEdit --- artiq/dashboard/moninj.py | 43 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/artiq/dashboard/moninj.py b/artiq/dashboard/moninj.py index 7113139a9..8964448bf 100644 --- a/artiq/dashboard/moninj.py +++ b/artiq/dashboard/moninj.py @@ -27,6 +27,42 @@ class _CancellableLineEdit(QtWidgets.QLineEdit): QtWidgets.QLineEdit.keyPressEvent(self, event) +# Cancellable and editable with double click. +# This class should not be used for programmatically changing text. +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) + + class _TTLWidget(QtWidgets.QFrame): override_toggled = QtCore.pyqtSignal(bool) level_toggled = QtCore.pyqtSignal(bool) @@ -853,6 +889,7 @@ class _MonInjDock(QDockWidgetCloseDetect): self.name = name self.manager = manager grid = LayoutWidget() + self.setWidget(grid) self._channel_dialog = _AddChannelDialog(self, self.manager.channel_model) self._channel_dialog.accepted.connect(self.add_channels) @@ -863,13 +900,17 @@ class _MonInjDock(QDockWidgetCloseDetect): QtWidgets.QStyle.SP_FileDialogListView)) add_channel_btn.clicked.connect(self._channel_dialog.open) grid.addWidget(add_channel_btn, 0, 0) + newdock = QtWidgets.QToolButton() newdock.setToolTip("Create new moninj dock") newdock.setIcon(QtWidgets.QApplication.style().standardIcon( QtWidgets.QStyle.SP_FileDialogNewFolder)) newdock.clicked.connect(lambda: manager.create_new_dock()) grid.addWidget(newdock, 0, 1) - self.setWidget(grid) + + display_name_edit = _DoubleClickLineEdit(name) + grid.addWidget(display_name_edit, 0, 1) + scroll_area = QtWidgets.QScrollArea() grid.addWidget(scroll_area, 1, 0, 1, 10) self.flow = FlowLayout()