Skip to content

Commit 489f69f

Browse files
committedFeb 14, 2016
gui: reliable detection of dock close
1 parent 3c12c13 commit 489f69f

File tree

4 files changed

+19
-27
lines changed

4 files changed

+19
-27
lines changed
 

‎artiq/gui/applets.py

+3-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from artiq.protocols.pipe_ipc import AsyncioParentComm
1010
from artiq.protocols import pyon
11+
from artiq.gui.tools import QDockWidgetCloseDetect
1112

1213

1314
logger = logging.getLogger(__name__)
@@ -84,11 +85,9 @@ async def stop(self):
8485
await asyncio.wait([self.server_task])
8586

8687

87-
class AppletDock(QtWidgets.QDockWidget):
88-
sigClosed = QtCore.pyqtSignal()
89-
88+
class AppletDock(QDockWidgetCloseDetect):
9089
def __init__(self, datasets_sub, uid, name, command):
91-
QtWidgets.QDockWidget.__init__(self, "Applet: " + name)
90+
QDockWidgetCloseDetect.__init__(self, "Applet: " + name)
9291
self.setObjectName("applet" + str(uid))
9392

9493
self.datasets_sub = datasets_sub
@@ -164,10 +163,6 @@ async def restart(self):
164163
await self.terminate()
165164
await self.start()
166165

167-
def closeEvent(self, event):
168-
QtWidgets.QDockWidget.closeEvent(self, event)
169-
self.sigClosed.emit()
170-
171166

172167
_templates = [
173168
("Big number", "{python} -m artiq.applets.big_number "

‎artiq/gui/experiments.py

+3-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from pyqtgraph import LayoutWidget
99

10-
from artiq.gui.tools import log_level_to_name
10+
from artiq.gui.tools import log_level_to_name, QDockWidgetCloseDetect
1111
from artiq.gui.entries import argty_to_entry
1212

1313

@@ -133,12 +133,10 @@ def restore_state(self, state):
133133
pass
134134

135135

136-
class _ExperimentDock(QtWidgets.QDockWidget):
137-
sigClosed = QtCore.pyqtSignal()
138-
136+
class _ExperimentDock(QDockWidgetCloseDetect):
139137
def __init__(self, manager, expurl):
140138
name = "Exp: " + expurl
141-
QtWidgets.QDockWidget.__init__(self, name)
139+
QDockWidgetCloseDetect.__init__(self, name)
142140
self.setObjectName(name)
143141

144142
self.layout = QtWidgets.QGridLayout()
@@ -297,10 +295,6 @@ async def _recompute_arguments_task(self):
297295
self.argeditor = _ArgumentEditor(self.manager, self, self.expurl)
298296
self.layout.addWidget(self.argeditor, 0, 0, 1, 5)
299297

300-
def closeEvent(self, event):
301-
QtWidgets.QDockWidget.closeEvent(self, event)
302-
self.sigClosed.emit()
303-
304298
def save_state(self):
305299
return self.argeditor.save_state()
306300

‎artiq/gui/log.py

+3-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from quamash import QtGui, QtCore, QtWidgets
88
from pyqtgraph import LayoutWidget
99

10-
from artiq.gui.tools import log_level_to_name
10+
from artiq.gui.tools import log_level_to_name, QDockWidgetCloseDetect
1111

1212

1313
def _make_wrappable(row, width=30):
@@ -140,11 +140,9 @@ def set_freetext(self, freetext):
140140
self.invalidateFilter()
141141

142142

143-
class _LogDock(QtWidgets.QDockWidget):
144-
sigClosed = QtCore.pyqtSignal()
145-
143+
class _LogDock(QDockWidgetCloseDetect):
146144
def __init__(self, manager, name, log_sub):
147-
QtWidgets.QDockWidget.__init__(self, "Log")
145+
QDockWidgetCloseDetect.__init__(self, "Log")
148146
self.setObjectName(name)
149147

150148
grid = LayoutWidget()
@@ -254,10 +252,6 @@ def set_model(self, model):
254252
self.table_model_filter.rowsInserted.connect(self.rows_inserted_after)
255253
self.table_model_filter.rowsRemoved.connect(self.rows_removed)
256254

257-
def closeEvent(self, event):
258-
QtWidgets.QDockWidget.closeEvent(self, event)
259-
self.sigClosed.emit()
260-
261255
def save_state(self):
262256
return {
263257
"min_level_idx": self.filter_level.currentIndex(),

‎artiq/gui/tools.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22

3-
from quamash import QtCore
3+
from PyQt5 import QtCore, QtWidgets, QtGui
44

55

66
def log_level_to_name(level):
@@ -27,3 +27,12 @@ def eventFilter(self, obj, event):
2727
def disable_scroll_wheel(widget):
2828
widget.setFocusPolicy(QtCore.Qt.StrongFocus)
2929
widget.installEventFilter(_WheelFilter(widget))
30+
31+
32+
class QDockWidgetCloseDetect(QtWidgets.QDockWidget):
33+
sigClosed = QtCore.pyqtSignal()
34+
35+
def event(self, event):
36+
if isinstance(event, QtGui.QCloseEvent):
37+
self.sigClosed.emit()
38+
return QtWidgets.QDockWidget.event(self, event)

0 commit comments

Comments
 (0)
Please sign in to comment.