Skip to content

Commit f25b544

Browse files
committedFeb 8, 2016
applets: properly name docks to support state save/restore
1 parent 8844fba commit f25b544

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed
 

Diff for: ‎artiq/gui/applets.py

+20-10
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ async def stop(self):
5454

5555

5656
class AppletDock(dockarea.Dock):
57-
def __init__(self, name, command):
58-
dockarea.Dock.__init__(self, "applet" + str(id(self)), # TODO
57+
def __init__(self, uid, name, command):
58+
dockarea.Dock.__init__(self, "applet" + str(uid),
5959
label="Applet: " + name,
6060
closable=True)
6161
self.setMinimumSize(QtCore.QSize(500, 400))
@@ -125,6 +125,7 @@ class AppletsDock(dockarea.Dock):
125125
def __init__(self, dock_area):
126126
self.dock_area = dock_area
127127
self.dock_to_checkbox = dict()
128+
self.applet_uids = set()
128129
self.workaround_pyqtgraph_bug = False
129130

130131
dockarea.Dock.__init__(self, "Applets")
@@ -168,8 +169,8 @@ def __init__(self, dock_area):
168169

169170
self.table.cellChanged.connect(self.cell_changed)
170171

171-
def create(self, name, command):
172-
dock = AppletDock(name, command)
172+
def create(self, uid, name, command):
173+
dock = AppletDock(uid, name, command)
173174
# If a dock is floated and then dock state is restored, pyqtgraph
174175
# leaves a "phantom" window open.
175176
if self.workaround_pyqtgraph_bug:
@@ -192,17 +193,17 @@ def cell_changed(self, row, column):
192193
name = ""
193194
else:
194195
name = name.text()
195-
dock = self.create(name, command)
196+
dock = self.create(item.applet_uid, name, command)
196197
item.applet_dock = dock
197198
self.dock_to_checkbox[dock] = item
198199
else:
199-
dock = getattr(item, "applet_dock", None)
200+
dock = item.applet_dock
200201
if dock is not None:
201202
# This calls self.on_dock_closed
202203
dock.close()
203204
elif column == 1 or column == 2:
204205
new_value = self.table.item(row, column).text()
205-
dock = getattr(self.table.item(row, 0), "applet_dock", None)
206+
dock = self.table.item(row, 0).applet_dock
206207
if dock is not None:
207208
if column == 1:
208209
dock.rename(new_value)
@@ -217,13 +218,19 @@ def on_dock_closed(self, dock):
217218
checkbox_item.setCheckState(QtCore.Qt.Unchecked)
218219

219220
def new(self):
221+
uid = next(iter(set(range(len(self.applet_uids) + 1))
222+
- self.applet_uids))
223+
self.applet_uids.add(uid)
224+
220225
row = self.table.rowCount()
221226
self.table.insertRow(row)
222227
checkbox = QtWidgets.QTableWidgetItem()
223228
checkbox.setFlags(QtCore.Qt.ItemIsSelectable |
224229
QtCore.Qt.ItemIsUserCheckable |
225230
QtCore.Qt.ItemIsEnabled)
226231
checkbox.setCheckState(QtCore.Qt.Unchecked)
232+
checkbox.applet_uid = uid
233+
checkbox.applet_dock = None
227234
self.table.setItem(row, 0, checkbox)
228235
self.table.setItem(row, 1, QtWidgets.QTableWidgetItem())
229236
self.table.setItem(row, 2, QtWidgets.QTableWidgetItem())
@@ -237,23 +244,26 @@ def restart(self):
237244
selection = self.table.selectedRanges()
238245
if selection:
239246
row = selection[0].topRow()
240-
dock = getattr(self.table.item(row, 0), "applet_dock", None)
247+
dock = self.table.item(row, 0).applet_dock
241248
if dock is not None:
242249
asyncio.ensure_future(dock.restart())
243250

244251
def delete(self):
245252
selection = self.table.selectedRanges()
246253
if selection:
247254
row = selection[0].topRow()
248-
dock = getattr(self.table.item(row, 0), "applet_dock", None)
255+
item = self.table.item(row, 0)
256+
dock = item.applet_dock
249257
if dock is not None:
250258
# This calls self.on_dock_closed
251259
dock.close()
260+
self.applet_uids.remove(item.applet_uid)
252261
self.table.removeRow(row)
253262

263+
254264
async def stop(self):
255265
for row in range(self.table.rowCount()):
256-
dock = getattr(self.table.item(row, 0), "applet_dock", None)
266+
dock = self.table.item(row, 0).applet_dock
257267
if dock is not None:
258268
await dock.terminate()
259269

0 commit comments

Comments
 (0)
Please sign in to comment.