@@ -143,6 +143,7 @@ def new(self):
143
143
QtCore .Qt .ItemIsEnabled )
144
144
checkbox .setCheckState (QtCore .Qt .Unchecked )
145
145
self .table .setItem (row , 0 , checkbox )
146
+ return row
146
147
147
148
def restart (self ):
148
149
selection = self .table .selectedRanges ()
@@ -161,6 +162,27 @@ def delete(self):
161
162
self .manager .delete (token )
162
163
self .table .deleteRow (row )
163
164
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
+
164
186
165
187
class AppletManagerRPC :
166
188
def __init__ (self , parent ):
@@ -176,6 +198,7 @@ def __init__(self, dock_area):
176
198
self .main_dock = AppletsDock (self )
177
199
self .rpc = AppletManagerRPC (self )
178
200
self .applet_docks = dict ()
201
+ self .workaround_pyqtgraph_bug = False
179
202
180
203
def embed (self , token , win_id ):
181
204
if token not in self .applet_docks :
@@ -189,7 +212,12 @@ def create(self, name, command):
189
212
- self .applet_docks .keys ()))
190
213
dock = AppletDock (token , name , command )
191
214
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 )
193
221
asyncio .ensure_future (dock .start ())
194
222
dock .sigClosed .connect (partial (self .on_dock_closed , token ))
195
223
return token
@@ -217,7 +245,9 @@ async def stop(self):
217
245
await dock .terminate ()
218
246
219
247
def save_state (self ):
220
- return dict ()
248
+ return self . main_dock . save_state ()
221
249
222
250
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