Skip to content

Commit 2199ead

Browse files
committedJan 9, 2016
gui/applets: save/restore state
1 parent 1ea73be commit 2199ead

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed
 

Diff for: ‎artiq/gui/applets.py

+33-3
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ def new(self):
143143
QtCore.Qt.ItemIsEnabled)
144144
checkbox.setCheckState(QtCore.Qt.Unchecked)
145145
self.table.setItem(row, 0, checkbox)
146+
return row
146147

147148
def restart(self):
148149
selection = self.table.selectedRanges()
@@ -161,6 +162,27 @@ def delete(self):
161162
self.manager.delete(token)
162163
self.table.deleteRow(row)
163164

165+
def save_state(self):
166+
state = []
167+
for row in range(self.table.rowCount()):
168+
enabled = self.table.item(row, 0).checkState() == QtCore.Qt.Checked
169+
name = self.table.item(row, 1).text()
170+
command = self.table.item(row, 2).text()
171+
state.append((enabled, name, command))
172+
return state
173+
174+
def restore_state(self, state):
175+
for enabled, name, command in state:
176+
row = self.new()
177+
item = QtWidgets.QTableWidgetItem()
178+
item.setText(name)
179+
self.table.setItem(row, 1, item)
180+
item = QtWidgets.QTableWidgetItem()
181+
item.setText(command)
182+
self.table.setItem(row, 2, item)
183+
if enabled:
184+
self.table.item(row, 0).setCheckState(QtCore.Qt.Checked)
185+
164186

165187
class AppletManagerRPC:
166188
def __init__(self, parent):
@@ -176,6 +198,7 @@ def __init__(self, dock_area):
176198
self.main_dock = AppletsDock(self)
177199
self.rpc = AppletManagerRPC(self)
178200
self.applet_docks = dict()
201+
self.workaround_pyqtgraph_bug = False
179202

180203
def embed(self, token, win_id):
181204
if token not in self.applet_docks:
@@ -189,7 +212,12 @@ def create(self, name, command):
189212
- self.applet_docks.keys()))
190213
dock = AppletDock(token, name, command)
191214
self.applet_docks[token] = dock
192-
self.dock_area.floatDock(dock)
215+
# If a dock is floated and then dock state is restored, pyqtgraph
216+
# leaves a "phantom" window open.
217+
if self.workaround_pyqtgraph_bug:
218+
self.dock_area.addDock(dock)
219+
else:
220+
self.dock_area.floatDock(dock)
193221
asyncio.ensure_future(dock.start())
194222
dock.sigClosed.connect(partial(self.on_dock_closed, token))
195223
return token
@@ -217,7 +245,9 @@ async def stop(self):
217245
await dock.terminate()
218246

219247
def save_state(self):
220-
return dict()
248+
return self.main_dock.save_state()
221249

222250
def restore_state(self, state):
223-
pass
251+
self.workaround_pyqtgraph_bug = True
252+
self.main_dock.restore_state(state)
253+
self.workaround_pyqtgraph_bug = False

0 commit comments

Comments
 (0)
Please sign in to comment.