forked from M-Labs/artiq
1
0
Fork 0

moninj: add _DoubleClickLineEdit

This commit is contained in:
Simon Renblad 2024-04-24 17:05:57 +08:00
parent c4e775aa49
commit 15e1aef38b
1 changed files with 42 additions and 1 deletions

View File

@ -27,6 +27,42 @@ class _CancellableLineEdit(QtWidgets.QLineEdit):
QtWidgets.QLineEdit.keyPressEvent(self, event) 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): class _TTLWidget(QtWidgets.QFrame):
override_toggled = QtCore.pyqtSignal(bool) override_toggled = QtCore.pyqtSignal(bool)
level_toggled = QtCore.pyqtSignal(bool) level_toggled = QtCore.pyqtSignal(bool)
@ -853,6 +889,7 @@ class _MonInjDock(QDockWidgetCloseDetect):
self.name = name self.name = name
self.manager = manager self.manager = manager
grid = LayoutWidget() grid = LayoutWidget()
self.setWidget(grid)
self._channel_dialog = _AddChannelDialog(self, self.manager.channel_model) self._channel_dialog = _AddChannelDialog(self, self.manager.channel_model)
self._channel_dialog.accepted.connect(self.add_channels) self._channel_dialog.accepted.connect(self.add_channels)
@ -863,13 +900,17 @@ class _MonInjDock(QDockWidgetCloseDetect):
QtWidgets.QStyle.SP_FileDialogListView)) QtWidgets.QStyle.SP_FileDialogListView))
add_channel_btn.clicked.connect(self._channel_dialog.open) add_channel_btn.clicked.connect(self._channel_dialog.open)
grid.addWidget(add_channel_btn, 0, 0) grid.addWidget(add_channel_btn, 0, 0)
newdock = QtWidgets.QToolButton() newdock = QtWidgets.QToolButton()
newdock.setToolTip("Create new moninj dock") newdock.setToolTip("Create new moninj dock")
newdock.setIcon(QtWidgets.QApplication.style().standardIcon( newdock.setIcon(QtWidgets.QApplication.style().standardIcon(
QtWidgets.QStyle.SP_FileDialogNewFolder)) QtWidgets.QStyle.SP_FileDialogNewFolder))
newdock.clicked.connect(lambda: manager.create_new_dock()) newdock.clicked.connect(lambda: manager.create_new_dock())
grid.addWidget(newdock, 0, 1) grid.addWidget(newdock, 0, 1)
self.setWidget(grid)
display_name_edit = _DoubleClickLineEdit(name)
grid.addWidget(display_name_edit, 0, 1)
scroll_area = QtWidgets.QScrollArea() scroll_area = QtWidgets.QScrollArea()
grid.addWidget(scroll_area, 1, 0, 1, 10) grid.addWidget(scroll_area, 1, 0, 1, 10)
self.flow = FlowLayout() self.flow = FlowLayout()