def get_settings(client_id, name="", cv=None, config_path=""): from dace.config import Config if cv is None: clientpath = "./client_configs/" + client_id + ".conf" if os.path.isfile(clientpath): Config.load(clientpath) else: Config.load() if cv is None: cv = Config.get() ret = {} for i, (cname, cval) in enumerate(sorted(cv.items())): cpath = tuple(list(config_path) + [cname]) try: meta = Config.get_metadata(*cpath) # A dict contains more elements if meta['type'] == 'dict': ret[cname] = { "value": get_settings(client_id, cname, cval, cpath), "meta": meta } continue # Other values can be included directly ret[cname] = {"value": cval, "meta": meta} except KeyError: print('WARNING: No metadata for configuration key', cpath) return ret
def render_config_subtree(self, cv, config_path, grid): # Add notebook to grid and render each child within columized = False notebook = Gtk.Notebook() grid.add(notebook) grid.set_hexpand(True) for i, (cname, cval) in enumerate(sorted(cv.items())): # Create current config "path" cpath = tuple(list(config_path) + [cname]) meta = Config.get_metadata(*cpath) if meta['type'] == 'dict': gtklabel = Gtk.Label() gtklabel.set_label(meta['title']) ngrid = Gtk.Grid() notebook.append_page(ngrid, gtklabel) self.render_config_subtree(cval, cpath, ngrid) continue if columized == False: grid.insert_column(0) grid.insert_column(1) columized = True self.render_config_element(cval, cpath, grid, i, meta)
def render_config_dialog(self): # Load metadata for configuration Config.load_schema() self.window = Gtk.Window() notebook = Gtk.Notebook() notebook.set_scrollable(True) self.window.add(notebook) # General (top-level) settings gtklabel = Gtk.Label() gtklabel.set_label('General') general_grid = Gtk.Grid() general_grid.set_hexpand(True) notebook.append_page(general_grid, gtklabel) columized = False for i, (cname, cval) in enumerate(sorted(Config.get().items())): meta = Config.get_metadata(cname) if meta['type'] == 'dict': gtklabel = Gtk.Label() gtklabel.set_label(meta['title']) grid = Gtk.Grid() grid.set_hexpand(True) notebook.append_page(grid, gtklabel) self.render_config_subtree(cval, (cname, ), grid) continue if columized == False: general_grid.insert_column(0) general_grid.insert_column(1) columized = True self.render_config_element(cval, (cname, ), general_grid, i, meta) self.window.show_all() self.window.connect("delete-event", self.win_close_callback, None)