From 2f4a83b97ab7d300cf662fa333605efaed853472 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Wed, 4 Feb 2015 16:13:56 +0800 Subject: [PATCH] gui: access to parameter DB from GUI files --- artiq/frontend/artiq_gui.py | 16 ++++---- artiq/gui/explib.py | 32 +++++++++++++++ artiq/gui/explorer.py | 12 +++++- examples/flopping_f_simulation_gui.glade | 50 ++++++++++++++++-------- examples/flopping_f_simulation_gui.py | 23 +++++------ 5 files changed, 96 insertions(+), 37 deletions(-) create mode 100644 artiq/gui/explib.py diff --git a/artiq/frontend/artiq_gui.py b/artiq/frontend/artiq_gui.py index e4e9c0a36..05dee0d96 100755 --- a/artiq/frontend/artiq_gui.py +++ b/artiq/frontend/artiq_gui.py @@ -68,13 +68,6 @@ def main(): atexit.register( lambda: loop.run_until_complete(parameters_win.sub_close())) - parameters_sub = Subscriber("parameters", - parameters_win.init_parameters_store) - loop.run_until_complete( - parameters_sub.connect(args.server, args.port_notify)) - atexit.register( - lambda: loop.run_until_complete(parameters_sub.close())) - def exit(*args): lmgr.save() Gtk.main_quit(*args) @@ -87,6 +80,15 @@ def main(): args.server, args.port_notify)) atexit.register( lambda: loop.run_until_complete(explorer_win.sub_close())) + + parameters_sub = Subscriber("parameters", + [parameters_win.init_parameters_store, + explorer_win.init_parameters_dict]) + loop.run_until_complete( + parameters_sub.connect(args.server, args.port_notify)) + atexit.register( + lambda: loop.run_until_complete(parameters_sub.close())) + scheduler_win.show_all() parameters_win.show_all() explorer_win.show_all() diff --git a/artiq/gui/explib.py b/artiq/gui/explib.py new file mode 100644 index 000000000..0a3a551f8 --- /dev/null +++ b/artiq/gui/explib.py @@ -0,0 +1,32 @@ +import asyncio + +from gi.repository import Gtk + + +class BaseControls: + def __init__(self, facilities): + self.facilities = facilities + + @asyncio.coroutine + def build(self): + self.finalize() + + def finalize(self): + pass + + +class GladeControls(BaseControls): + def __init__(self, facilities, glade_file, top_widget_name="top"): + BaseControls.__init__(self, facilities) + self.glade_file = glade_file + self.top_widget_name = top_widget_name + + @asyncio.coroutine + def build(self): + self.builder = Gtk.Builder() + data = yield from self.facilities.get_data(self.glade_file) + self.builder.add_from_string(data) + self.finalize() + + def get_top_widget(self): + return self.builder.get_object(self.top_widget_name) diff --git a/artiq/gui/explorer.py b/artiq/gui/explorer.py index 6cb7bf18a..eb2960057 100644 --- a/artiq/gui/explorer.py +++ b/artiq/gui/explorer.py @@ -1,4 +1,5 @@ import asyncio +import types from gi.repository import Gtk @@ -96,6 +97,10 @@ class ExplorerWindow(Window): def sub_close(self): yield from self.explist_subscriber.close() + def init_parameters_dict(self, init): + self.parameters = init + return init + def set_pane_contents(self, widget): self.pane_contents.destroy() self.pane_contents = widget @@ -123,8 +128,11 @@ class ExplorerWindow(Window): gui_mod_data = yield from self.repository.get_data(gui_file) gui_mod = dict() exec(gui_mod_data, gui_mod) - self.controls = gui_mod["Controls"]() - yield from self.controls.build(self.repository.get_data) + facilities = types.SimpleNamespace( + get_data=self.repository.get_data, + get_parameter=lambda p: self.parameters[p]) + self.controls = gui_mod["Controls"](facilities) + yield from self.controls.build() self.set_pane_contents(self.controls.get_top_widget()) def run(self, widget): diff --git a/examples/flopping_f_simulation_gui.glade b/examples/flopping_f_simulation_gui.glade index 5e3e7e724..8b763ff94 100644 --- a/examples/flopping_f_simulation_gui.glade +++ b/examples/flopping_f_simulation_gui.glade @@ -1,5 +1,5 @@ - + @@ -9,21 +9,14 @@ 1 10 - + True False - - - True - False - Simulated flopping frequency - - - False - True - 0 - - + center + center + vertical + 6 + 6 True @@ -33,9 +26,32 @@ 1500 - False - True - 1 + 1 + 0 + + + + + Get from parameter DB + True + True + True + + + 0 + 1 + 2 + + + + + True + False + Simulated flopping frequency: + + + 0 + 0 diff --git a/examples/flopping_f_simulation_gui.py b/examples/flopping_f_simulation_gui.py index bead9230a..9d13795f6 100644 --- a/examples/flopping_f_simulation_gui.py +++ b/examples/flopping_f_simulation_gui.py @@ -1,17 +1,18 @@ -import asyncio - -from gi.repository import Gtk +from artiq.gui.explib import GladeControls -class Controls: - @asyncio.coroutine - def build(self, get_data): - self.builder = Gtk.Builder() - data = yield from get_data("flopping_f_simulation_gui.glade") - self.builder.add_from_string(data) +class Controls(GladeControls): + def __init__(self, facilities): + GladeControls.__init__(self, facilities, + "flopping_f_simulation_gui.glade") - def get_top_widget(self): - return self.builder.get_object("top") + def finalize(self): + getparam = self.builder.get_object("getparam") + getparam.connect("clicked", self.getparam) + + def getparam(self, widget): + F0 = self.facilities.get_parameter("flopping_freq") + self.builder.get_object("F0").set_value(F0) def get_arguments(self): return {