forked from M-Labs/artiq
gui/experiments: save/restore state
This commit is contained in:
parent
2904b31e7e
commit
afa8148b2b
|
@ -99,6 +99,7 @@ def main():
|
||||||
sub_clients["explist"],
|
sub_clients["explist"],
|
||||||
sub_clients["schedule"],
|
sub_clients["schedule"],
|
||||||
rpc_clients["schedule"])
|
rpc_clients["schedule"])
|
||||||
|
smgr.register(expmgr)
|
||||||
d_explorer = explorer.ExplorerDock(win, status_bar, expmgr,
|
d_explorer = explorer.ExplorerDock(win, status_bar, expmgr,
|
||||||
sub_clients["explist"],
|
sub_clients["explist"],
|
||||||
rpc_clients["schedule"],
|
rpc_clients["schedule"],
|
||||||
|
|
|
@ -13,6 +13,8 @@ from artiq.gui.scan import ScanController
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: disable mouse wheel on entry widget like QDoubleSpinBox and QComboBox
|
||||||
|
# (interferes with QTreeWidget scrolling)
|
||||||
class _StringEntry(QtGui.QLineEdit):
|
class _StringEntry(QtGui.QLineEdit):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
QtGui.QLineEdit.__init__(self)
|
QtGui.QLineEdit.__init__(self)
|
||||||
|
@ -219,6 +221,12 @@ class _ExperimentDock(dockarea.Dock):
|
||||||
def submit_clicked(self):
|
def submit_clicked(self):
|
||||||
self.manager.submit(self.expname)
|
self.manager.submit(self.expname)
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
return self.argeditor.save_state()
|
||||||
|
|
||||||
|
def restore_state(self, state):
|
||||||
|
self.argeditor.restore_state(state)
|
||||||
|
|
||||||
|
|
||||||
class ExperimentManager:
|
class ExperimentManager:
|
||||||
def __init__(self, status_bar, dock_area,
|
def __init__(self, status_bar, dock_area,
|
||||||
|
@ -287,12 +295,13 @@ class ExperimentManager:
|
||||||
|
|
||||||
def open_experiment(self, expname):
|
def open_experiment(self, expname):
|
||||||
if expname in self.open_experiments:
|
if expname in self.open_experiments:
|
||||||
return
|
return self.open_experiments[expname]
|
||||||
dock = _ExperimentDock(self, expname)
|
dock = _ExperimentDock(self, expname)
|
||||||
self.open_experiments[expname] = dock
|
self.open_experiments[expname] = dock
|
||||||
self.dock_area.addDock(dock)
|
self.dock_area.addDock(dock)
|
||||||
self.dock_area.floatDock(dock)
|
self.dock_area.floatDock(dock)
|
||||||
dock.sigClosed.connect(partial(self.on_dock_closed, expname))
|
dock.sigClosed.connect(partial(self.on_dock_closed, expname))
|
||||||
|
return dock
|
||||||
|
|
||||||
def on_dock_closed(self, expname):
|
def on_dock_closed(self, expname):
|
||||||
del self.open_experiments[expname]
|
del self.open_experiments[expname]
|
||||||
|
@ -347,8 +356,21 @@ class ExperimentManager:
|
||||||
asyncio.ensure_future(self._request_term_multiple(rids))
|
asyncio.ensure_future(self._request_term_multiple(rids))
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
return dict()
|
docks = {expname: dock.save_state()
|
||||||
|
for expname, dock in self.open_experiments.items()}
|
||||||
|
return {
|
||||||
|
"scheduling": self.submission_scheduling,
|
||||||
|
"options": self.submission_options,
|
||||||
|
"arguments": self.submission_arguments,
|
||||||
|
"docks": docks
|
||||||
|
}
|
||||||
|
|
||||||
def restore_state(self):
|
def restore_state(self, state):
|
||||||
if self.open_experiments:
|
if self.open_experiments:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
self.submission_scheduling = state["scheduling"]
|
||||||
|
self.submission_options = state["options"]
|
||||||
|
self.submission_arguments = state["arguments"]
|
||||||
|
for expname, dock_state in state["docks"].items():
|
||||||
|
dock = self.open_experiment(expname)
|
||||||
|
dock.restore_state(dock_state)
|
||||||
|
|
Loading…
Reference in New Issue