diff --git a/site_ansto/instrument/util/config_edit.py b/site_ansto/instrument/util/config_edit.py old mode 100644 new mode 100755 index 331917c3..872cfe12 --- a/site_ansto/instrument/util/config_edit.py +++ b/site_ansto/instrument/util/config_edit.py @@ -1,18 +1,20 @@ #!/usr/bin/env python -# vim: tabstop=8 softtabstop=2 shiftwidth=2 nocindent smartindent +# vim: tabstop=8 softtabstop=2 shiftwidth=2 nocin si et ft=python import os import sys -import urwid -import ConfigParser def main(config_filename): + import urwid + import ConfigParser + config = ConfigParser.SafeConfigParser() config.read(config_filename) #print config_filename #config.write(sys.stdout) - text_header = (u"SICS Config Editor! w/W/F12 Saves & Exits\n" - u"UP / DOWN / PAGE UP / PAGE DOWN scroll. q/Q/F8 Exits.") + text_header = ( + u"SICS Config Editor! w/W/F12 Saves & Exits\n" + u"UP / DOWN / PAGE UP / PAGE DOWN scroll. q/Q/F8 Exits.") def checkbox_change(check_box, new_state, user_data): config.set(user_data, 'enabled', str(new_state)) @@ -20,10 +22,16 @@ def main(config_filename): check_box.get_label(), str(new_state), str(user_data)) frame.footer = urwid.AttrWrap(urwid.Text( line), 'header') + if 'cascade' in config.options(user_data): + cascade_list = config.get(user_data, 'cascade').split(",") + for cb in cb_list: + lbl = cb.get_label().split(":")[0] + if lbl in cascade_list: + cb.set_state(new_state) text_cb_list = list(config.sections()) cb_list = [] - for txt in text_cb_list: + for txt in sorted(text_cb_list): state = False if 'enabled' in config.options(txt): if config.get(txt, 'enabled').lower() in ['1', 'yes', 'true']: @@ -31,28 +39,42 @@ def main(config_filename): config.set(txt, 'enabled', str(state)) cb_text = "" cb_text += txt - if 'name' in config.options(txt): - cb_text += ": (" + config.get(txt, 'name') + ")" - cb = urwid.AttrWrap( - urwid.CheckBox(cb_text, + if 'desc' in config.options(txt): + cb_text += ": (" + config.get(txt, 'desc').strip("\"") + ")" + cb = urwid.CheckBox(cb_text, state=state, on_state_change=checkbox_change, - user_data=txt), - 'buttn', 'buttnf') + user_data=txt) cb_list.append(cb) def fcc(focus): frame.footer = urwid.AttrWrap(urwid.Text( [u"Focus: " + str(focus)]), 'header') - sflw = urwid.SimpleFocusListWalker(cb_list) - sflw.set_focus_changed_callback(fcc) - listbox = urwid.ListBox(sflw) + + blank = urwid.Divider() + listbox_content = [ + blank, + urwid.Padding(urwid.GridFlow( + [urwid.AttrWrap(cb, 'buttn', 'buttnf') for cb in cb_list], + 60, 1, 0, 'left'), + left=4, right=3, min_width=60), + blank, + blank + ] + + if False: + listbox = urwid.Pile(cb_list) + else: + if "SimpleFocusListWalker" in dir(urwid): + sflw = urwid.SimpleFocusListWalker(listbox_content) + sflw.set_focus_changed_callback(fcc) + else: + sflw = urwid.SimpleListWalker(listbox_content) header = urwid.AttrWrap(urwid.Text(text_header), 'header') - frame = urwid.Frame( - urwid.AttrWrap(urwid.Padding(listbox, left=2, right=2), 'body'), - header=header) + listbox = urwid.ListBox(sflw) + frame = urwid.Frame(urwid.AttrWrap(listbox, 'body'), header=header) palette = [ ('body', 'black', 'light gray', 'standout'), @@ -78,15 +100,31 @@ def main(config_filename): with open(config_filename, "wb") as configfile: config.write(configfile) raise urwid.ExitMainLoop() + elif key in ['e', 'E', 'f4']: + f = sflw.get_focus() + frame.footer = urwid.AttrWrap(urwid.Text([u"EditE: " + str(dir(f[0]))]), 'header') elif key in ['q', 'Q', 'f8']: raise urwid.ExitMainLoop() +# elif key in ['b', 'B']: +# l = sflw[1].base_widget +# f = l.focus_cell +# b = l.cells.index(f) +# l.cells.insert(b + 1, urwid.AttrWrap(urwid.Edit(edit_text=u"Hello"), 'header')) +# l.set_focus(b + 1) +# frame.footer = urwid.AttrWrap(urwid.Text([u"EditB: " + str(b)]), 'header') else: - frame.footer = urwid.AttrWrap(urwid.Text( - [u"Press: " + str(key)]), 'header') + frame.footer = urwid.AttrWrap(urwid.Text([u"Press: " + str(key)]), 'header') urwid.MainLoop(frame, palette, unhandled_input=unhandled).run() if '__main__'==__name__: - main("my_config_parser.ini") + import argparse + + default_ini = "my_config_parser.ini" + parser = argparse.ArgumentParser(description = "Edit a configuration (*.ini) file using python urwin") + parser.add_argument("path", nargs="?", default = default_ini, help="name of file to edit") + args = parser.parse_args() + default_ini = os.path.abspath(args.path) + main(default_ini)