diff --git a/site_ansto/instrument/util/config_edit.py b/site_ansto/instrument/util/config_edit.py index a23df917..ba31b523 100755 --- a/site_ansto/instrument/util/config_edit.py +++ b/site_ansto/instrument/util/config_edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# vim: tabstop=8 softtabstop=2 shiftwidth=2 nocin si et ft=python +# vim: tabstop=8 softtabstop=4 shiftwidth=4 nocin si et ft=python # View Screen has 3 parts # (Instrument Configuration), (Configuration Options), (Option Implementation) @@ -30,277 +30,277 @@ import copy from collections import defaultdict Palette = [ - ('body', 'dark cyan', '', 'standout'), - ('focus', 'dark red', '', 'standout'), - ('head', 'light red', 'black'), + ('body', 'dark cyan', '', 'standout'), + ('focus', 'dark red', '', 'standout'), + ('head', 'light red', 'black'), ] class RadioButtonListWalker(urwid.SimpleListWalker): - def __init__(self, item_states, on_state_change=None, user_data=None): - radio_grp = [] - mapped_rb_list = [] - self.button_dict = {} - for item,stateval in item_states: - rb = urwid.RadioButton(radio_grp, item, state=stateval, on_state_change=on_state_change, user_data=user_data) - self.button_dict[item] = rb - mapped_rb = urwid.AttrMap(rb, 'body', 'focus') - mapped_rb_list.append(mapped_rb) + def __init__(self, item_states, on_state_change=None, user_data=None): + radio_grp = [] + mapped_rb_list = [] + self.button_dict = {} + for item,stateval in item_states: + rb = urwid.RadioButton(radio_grp, item, state=stateval, on_state_change=on_state_change, user_data=user_data) + self.button_dict[item] = rb + mapped_rb = urwid.AttrMap(rb, 'body', 'focus') + mapped_rb_list.append(mapped_rb) - super(RadioButtonListWalker, self).__init__(mapped_rb_list) - return + super(RadioButtonListWalker, self).__init__(mapped_rb_list) + return class CheckBoxListWalker(urwid.SimpleListWalker): - def __init__(self, item_states, on_state_change = None, user_data = None): - mapped_cb_list = [] - self.button_dict = {} - for item,stateval in item_states: - cb = urwid.CheckBox(item, state = stateval, on_state_change = on_state_change, user_data = user_data) - self.button_dict[item] = cb - mapped_cb = urwid.AttrMap(cb, 'body', 'focus') - mapped_cb_list.append(mapped_cb) + def __init__(self, item_states, on_state_change = None, user_data = None): + mapped_cb_list = [] + self.button_dict = {} + for item,stateval in item_states: + cb = urwid.CheckBox(item, state = stateval, on_state_change = on_state_change, user_data = user_data) + self.button_dict[item] = cb + mapped_cb = urwid.AttrMap(cb, 'body', 'focus') + mapped_cb_list.append(mapped_cb) - super(CheckBoxListWalker, self).__init__(mapped_cb_list) - return + super(CheckBoxListWalker, self).__init__(mapped_cb_list) + return class OptionListWalker(CheckBoxListWalker): - def __init__(self, opt_dict, statechange_cb): - urwid.register_signal(OptionListWalker, ['focus_change']) - item_states = [(i,d['enabled']) for i,d in opt_dict.iteritems()] - item_states.sort() + def __init__(self, opt_dict, statechange_cb): + urwid.register_signal(OptionListWalker, ['focus_change']) + item_states = [(i,d['enabled']) for i,d in opt_dict.iteritems()] + item_states.sort() - super(OptionListWalker, self).__init__(item_states, statechange_cb) - return + super(OptionListWalker, self).__init__(item_states, statechange_cb) + return - def set_focus(self, pos): - dbg.msg(0, 'OptionListWalker:set_focus({0}) -> emit focus_change'.format(pos)) - urwid.emit_signal(self, 'focus_change', pos) - return super(OptionListWalker, self).set_focus(pos) + def set_focus(self, pos): + dbg.msg(0, 'OptionListWalker:set_focus({0}) -> emit focus_change'.format(pos)) + urwid.emit_signal(self, 'focus_change', pos) + return super(OptionListWalker, self).set_focus(pos) # ClosedListBox implements a ListBox which prevents selection outside of the # list using the 'up' or 'down' keys class ClosedListBox(urwid.ListBox): - def keypress(self, size, key): - """Prevents navigating outside of a ClosedListBox with the up and down arrow keys""" - pos = self.get_focus()[1] - ll = len(self.body) - if (pos <= 0 and key == 'up') or (pos >= ll-1 and key == 'down'): - return - else: - return super(ClosedListBox, self).keypress(size, key) + def keypress(self, size, key): + """Prevents navigating outside of a ClosedListBox with the up and down arrow keys""" + pos = self.get_focus()[1] + ll = len(self.body) + if (pos <= 0 and key == 'up') or (pos >= ll-1 and key == 'down'): + return + else: + return super(ClosedListBox, self).keypress(size, key) # List of Checkboxes class OptionListBox(ClosedListBox): - def __init__(self, listwalker): - super(OptionListBox, self).__init__(listwalker) - return + def __init__(self, listwalker): + super(OptionListBox, self).__init__(listwalker) + return # List of RadioButtons class ImpListBox(ClosedListBox): - def __init__(self, listwalker): - super(ImpListBox, self).__init__(listwalker) - return + def __init__(self, listwalker): + super(ImpListBox, self).__init__(listwalker) + return - def use_listwalker(self, liswalker): - self.body.contents[:] = liswalker - return + def use_listwalker(self, liswalker): + self.body.contents[:] = liswalker + return class InstConfigData: - msg_index = 4 - # configuration_dict: dict of instrument configurations as defined below, - # {configname: {'enabled':T/F, 'cascade_list':[(option, dflt_imp)]} } - configuration_dict = defaultdict(dict) + msg_index = 4 + # configuration_dict: dict of instrument configurations as defined below, + # {configname: {'enabled':T/F, 'cascade_list':[(option, dflt_imp)]} } + configuration_dict = defaultdict(dict) - # imp_dict: dict of implementations indexed by optype, - # {optype: [impname] } - imp_dict = defaultdict(list) + # imp_dict: dict of implementations indexed by optype, + # {optype: [impname] } + imp_dict = defaultdict(list) - # opt_dict: dict of configuration options as defined below, - # {optname:{'enabled': T/F/Always, 'imptype':optype, 'selected_imp':dflt}} - opt_dict = defaultdict(dict) + # opt_dict: dict of configuration options as defined below, + # {optname:{'enabled': T/F/Always, 'imptype':optype, 'selected_imp':dflt}} + opt_dict = defaultdict(dict) - # imp2opt_dict: Maps each implementation to an option or None, - # {imp: opt/None} - imp2opt_dict = {} + # imp2opt_dict: Maps each implementation to an option or None, + # {imp: opt/None} + imp2opt_dict = {} - # optypelist: list of (opt, optype) tuples - # [(opt, optype)] - optypelist = [] + # optypelist: list of (opt, optype) tuples + # [(opt, optype)] + optypelist = [] - def __get_configurations(self): - for s in self.file_parser.sections(): - cascade_list = [] - if self.file_parser.has_option(s, 'cascade'): - enabled = self.file_parser.get(s, 'enabled') - for cascade_str in self.file_parser.get(s,'cascade').split(','): - cascade_list.append(tuple(cascade_str.split(':'))) - if enabled.lower() in ['true','always']: - stateval = True - else: - stateval = False + def __get_configurations(self): + for s in self.file_parser.sections(): + cascade_list = [] + if self.file_parser.has_option(s, 'cascade'): + enabled = self.file_parser.get(s, 'enabled') + for cascade_str in self.file_parser.get(s,'cascade').split(','): + cascade_list.append(tuple(cascade_str.split(':'))) + if enabled.lower() in ['true','always']: + stateval = True + else: + stateval = False - self.configuration_dict[s]['enabled'] = stateval - self.configuration_dict[s]['cascade_list'] = cascade_list + self.configuration_dict[s]['enabled'] = stateval + self.configuration_dict[s]['cascade_list'] = cascade_list - def __get_options(self): - for s in self.file_parser.sections(): - if self.file_parser.has_option(s, 'implementation'): - selected_imp = self.file_parser.get(s, 'implementation') - imptype = self.file_parser.get(s, 'optype') - enabled = self.file_parser.get(s, 'enabled').lower() - if enabled == 'always': - stateval = True - permanent = True - elif enabled == 'true': - stateval = True - permanent = False - else: - stateval = False - permanent = False + def __get_options(self): + for s in self.file_parser.sections(): + if self.file_parser.has_option(s, 'implementation'): + selected_imp = self.file_parser.get(s, 'implementation') + imptype = self.file_parser.get(s, 'optype') + enabled = self.file_parser.get(s, 'enabled').lower() + if enabled == 'always': + stateval = True + permanent = True + elif enabled == 'true': + stateval = True + permanent = False + else: + stateval = False + permanent = False - if self.file_parser.has_option(s, 'id'): - id = self.file_parser.get(s, 'id') - self.opt_dict[s]['id'] = id + if self.file_parser.has_option(s, 'id'): + id = self.file_parser.get(s, 'id') + self.opt_dict[s]['id'] = id - self.opt_dict[s]['enabled'] = stateval - self.opt_dict[s]['permanent'] = permanent - self.opt_dict[s]['imptype'] = imptype - if selected_imp in self.imp2opt_dict: - self.opt_dict[s]['selected_imp'] = 'none' - else: - self.opt_dict[s]['selected_imp'] = selected_imp - if selected_imp != 'none': - print 'Add imp2opt_dict[{0}] = {1}'.format(selected_imp,s) - self.imp2opt_dict[selected_imp] = s + self.opt_dict[s]['enabled'] = stateval + self.opt_dict[s]['permanent'] = permanent + self.opt_dict[s]['imptype'] = imptype + if selected_imp in self.imp2opt_dict: + self.opt_dict[s]['selected_imp'] = 'none' + else: + self.opt_dict[s]['selected_imp'] = selected_imp + if selected_imp != 'none': + print 'Add imp2opt_dict[{0}] = {1}'.format(selected_imp,s) + self.imp2opt_dict[selected_imp] = s - def __get_implementations(self): - for s in self.file_parser.sections(): - if self.file_parser.has_option(s, 'imptype'): - key = self.file_parser.get(s, 'imptype') - if 'none' not in self.imp_dict[key]: - self.imp_dict[key].append('none') + def __get_implementations(self): + for s in self.file_parser.sections(): + if self.file_parser.has_option(s, 'imptype'): + key = self.file_parser.get(s, 'imptype') + if 'none' not in self.imp_dict[key]: + self.imp_dict[key].append('none') - self.imp_dict[key].append(s) - if s not in self.imp2opt_dict: - print 'Add imp2opt_dict[{0}] = none'.format(s) - self.imp2opt_dict[s] = 'none' + self.imp_dict[key].append(s) + if s not in self.imp2opt_dict: + print 'Add imp2opt_dict[{0}] = none'.format(s) + self.imp2opt_dict[s] = 'none' - def read_config_file(self, config_filename): - self.config_filename = config_filename - self.file_parser = ConfigParser.SafeConfigParser() - self.file_parser.read(config_filename) - self.__get_options() - self.__get_implementations() - self.__get_configurations() - for opt,dict in self.opt_dict.iteritems(): - self.optypelist.append((opt, dict['imptype'])) + def read_config_file(self, config_filename): + self.config_filename = config_filename + self.file_parser = ConfigParser.SafeConfigParser() + self.file_parser.read(config_filename) + self.__get_options() + self.__get_implementations() + self.__get_configurations() + for opt,dict in self.opt_dict.iteritems(): + self.optypelist.append((opt, dict['imptype'])) - def backup_files(self): - for idx in range(8, 0, -1): - if os.path.exists(self.config_filename + "." + str(idx)): - os.rename(self.config_filename + "." + str(idx), - self.config_filename + "." + str(idx + 1)) + def backup_files(self): + for idx in range(8, 0, -1): + if os.path.exists(self.config_filename + "." + str(idx)): + os.rename(self.config_filename + "." + str(idx), + self.config_filename + "." + str(idx + 1)) - if os.path.exists(self.config_filename): - shutil.copy(self.config_filename, self.config_filename + ".1") + if os.path.exists(self.config_filename): + shutil.copy(self.config_filename, self.config_filename + ".1") - def write_config_file(self): - for item,dict in self.opt_dict.iteritems(): - if 'permanent' in dict and dict['permanent'] == True: - enabled = 'Always' - else: - enabled = dict['enabled'].__str__() + def write_config_file(self): + for item,dict in self.opt_dict.iteritems(): + if 'permanent' in dict and dict['permanent'] == True: + enabled = 'Always' + else: + enabled = dict['enabled'].__str__() - self.file_parser.set(item, 'enabled', enabled) - self.file_parser.set(item, 'implementation', dict['selected_imp']) - self.file_parser.set(item, 'optype', dict['imptype']) + self.file_parser.set(item, 'enabled', enabled) + self.file_parser.set(item, 'implementation', dict['selected_imp']) + self.file_parser.set(item, 'optype', dict['imptype']) - for item,dict in self.configuration_dict.iteritems(): - enabled = dict['enabled'].__str__() - self.file_parser.set(item, 'enabled', enabled) + for item,dict in self.configuration_dict.iteritems(): + enabled = dict['enabled'].__str__() + self.file_parser.set(item, 'enabled', enabled) - for imp,opt in self.imp2opt_dict.iteritems(): - if imp != 'none' and opt != 'none' and 'id' in self.opt_dict[opt]: - self.file_parser.set(imp, 'id', self.opt_dict[opt]['id']) + for imp,opt in self.imp2opt_dict.iteritems(): + if imp != 'none' and opt != 'none' and 'id' in self.opt_dict[opt]: + self.file_parser.set(imp, 'id', self.opt_dict[opt]['id']) - with open(self.config_filename,'w') as cfile: - for section in sorted(self.file_parser.sections()): - cfile.write("[%s]\n" % section) - for option in sorted(self.file_parser.options(section)): - cfile.write("%s = %s\n" % (option, self.file_parser.get(section, option))) + with open(self.config_filename,'w') as cfile: + for section in sorted(self.file_parser.sections()): + cfile.write("[%s]\n" % section) + for option in sorted(self.file_parser.options(section)): + cfile.write("%s = %s\n" % (option, self.file_parser.get(section, option))) - cfile.write("\n") + cfile.write("\n") - def set_imp(self, opt, new_imp): - old_imp =self.opt_dict[opt]['selected_imp'] - self.imp2opt_dict[old_imp] = 'none' - self.opt_dict[opt]['selected_imp'] = new_imp - self.imp2opt_dict[new_imp] = opt + def set_imp(self, opt, new_imp): + old_imp =self.opt_dict[opt]['selected_imp'] + self.imp2opt_dict[old_imp] = 'none' + self.opt_dict[opt]['selected_imp'] = new_imp + self.imp2opt_dict[new_imp] = opt - def get_optypelist (self): - return self.optypelist + def get_optypelist (self): + return self.optypelist - def iter_implementations(self, opt): - dict = self.opt_dict[opt] - for imp in self.imp_dict[dict['imptype']]: - yield imp + def iter_implementations(self, opt): + dict = self.opt_dict[opt] + for imp in self.imp_dict[dict['imptype']]: + yield imp - def cf_statechange(self, cfg_id, new_state, udat=None): - self.configuration_dict[cfg_id]['enabled'] = new_state + def cf_statechange(self, cfg_id, new_state, udat=None): + self.configuration_dict[cfg_id]['enabled'] = new_state - def opt_statechange(self, opt, new_state, udat=None): - dbg.msg(3, 'InstConfigData:opt_statechange({0},{1},{2})'.format(opt, new_state, udat)) - self.opt_dict[opt]['enabled'] = new_state + def opt_statechange(self, opt, new_state, udat=None): + dbg.msg(3, 'InstConfigData:opt_statechange({0},{1},{2})'.format(opt, new_state, udat)) + self.opt_dict[opt]['enabled'] = new_state - def imp_statechange(self, selected_imp, new_state, opt): - dbg.msg(self.msg_index, 'InstConfigData:imp_statechange({0},{1},{2})'.format(selected_imp, new_state, opt)) - self.msg_index = (self.msg_index - 3) % 2 + 4 - if new_state == True: - self.opt_dict[opt]['selected_imp'] = selected_imp + def imp_statechange(self, selected_imp, new_state, opt): + dbg.msg(self.msg_index, 'InstConfigData:imp_statechange({0},{1},{2})'.format(selected_imp, new_state, opt)) + self.msg_index = (self.msg_index - 3) % 2 + 4 + if new_state == True: + self.opt_dict[opt]['selected_imp'] = selected_imp class InstConfigView(urwid.Pile): - def __init__(self, cf_dat, cf_man, dbmsg): - self.cf_dat = cf_dat - self.cf_man = cf_man - option_ListBoxes = [ - self.cf_man.config_lb, - self.cf_man.opt_lb, - self.cf_man.imp_lb, - dbmsg] + def __init__(self, cf_dat, cf_man, dbmsg): + self.cf_dat = cf_dat + self.cf_man = cf_man + option_ListBoxes = [ + self.cf_man.config_lb, + self.cf_man.opt_lb, + self.cf_man.imp_lb, + dbmsg] - super(InstConfigView, self).__init__(option_ListBoxes) - return + super(InstConfigView, self).__init__(option_ListBoxes) + return - def keyinput(self, key): - if key == 'meta q': - raise urwid.ExitMainLoop() - elif key == 'w': - self.cf_dat.backup_files() - self.cf_dat.write_config_file() - elif key in ['right', 'tab']: - if self.get_focus() == self.cf_man.config_lb: - self.set_focus(self.cf_man.opt_lb) - elif self.get_focus() == self.cf_man.opt_lb: - self.set_focus(self.cf_man.imp_lb) - else: - self.set_focus(self.cf_man.config_lb) - elif key in ['left', 'shift tab']: - if self.get_focus() == self.cf_man.config_lb: - self.set_focus(self.cf_man.imp_lb) - elif self.get_focus() == self.cf_man.opt_lb: - self.set_focus(self.cf_man.config_lb) - else: - self.set_focus(self.cf_man.opt_lb) + def keyinput(self, key): + if key == 'meta q': + raise urwid.ExitMainLoop() + elif key == 'w': + self.cf_dat.backup_files() + self.cf_dat.write_config_file() + elif key in ['right', 'tab']: + if self.get_focus() == self.cf_man.config_lb: + self.set_focus(self.cf_man.opt_lb) + elif self.get_focus() == self.cf_man.opt_lb: + self.set_focus(self.cf_man.imp_lb) + else: + self.set_focus(self.cf_man.config_lb) + elif key in ['left', 'shift tab']: + if self.get_focus() == self.cf_man.config_lb: + self.set_focus(self.cf_man.imp_lb) + elif self.get_focus() == self.cf_man.opt_lb: + self.set_focus(self.cf_man.config_lb) + else: + self.set_focus(self.cf_man.opt_lb) # Contains OptionListWalker dict indexed by option @@ -309,164 +309,164 @@ class InstConfigView(urwid.Pile): # Tracks selected implementation for each option # and sets selection on ImpListBox class InstConfigManager: - cf_msg_index = 8 - imp_lw_dict = {} - def __init__(self, cf_dat): - self.cf_dat = cf_dat - urwid.register_signal(InstConfigManager, ['focus_change']) - self.opt_optype_list = self.cf_dat.get_optypelist() - - self.opt_optype_list.sort() - firstopt = self.opt_optype_list[0][0] - self.imp_lw = self.__gen_imp_listwalker(firstopt) - self.opt_lw = OptionListWalker(cf_dat.opt_dict, self.opt_statechange) - for label, button in self.opt_lw.button_dict.iteritems(): - button.set_label('{0}:{1}'.format(label, self.cf_dat.opt_dict[label]['selected_imp'])) + cf_msg_index = 8 + imp_lw_dict = {} + def __init__(self, cf_dat): + self.cf_dat = cf_dat + urwid.register_signal(InstConfigManager, ['focus_change']) + self.opt_optype_list = self.cf_dat.get_optypelist() + + self.opt_optype_list.sort() + firstopt = self.opt_optype_list[0][0] + self.imp_lw = self.__gen_imp_listwalker(firstopt) + self.opt_lw = OptionListWalker(cf_dat.opt_dict, self.opt_statechange) + for label, button in self.opt_lw.button_dict.iteritems(): + button.set_label('{0}:{1}'.format(label, self.cf_dat.opt_dict[label]['selected_imp'])) - self.imp_lb = ImpListBox(self.imp_lw) - urwid.connect_signal(self.opt_lw, 'focus_change', self.update_imp_lb) - item_states = [(i,d['enabled']) for i,d in cf_dat.configuration_dict.iteritems()] - item_states.sort() - self.cfg_lw = RadioButtonListWalker(item_states, on_state_change = self.cf_statechange) - self.config_lb = OptionListBox(self.cfg_lw) - self.opt_lb = OptionListBox(self.opt_lw) - self.opt_lb.set_focus(0) - return + self.imp_lb = ImpListBox(self.imp_lw) + urwid.connect_signal(self.opt_lw, 'focus_change', self.update_imp_lb) + item_states = [(i,d['enabled']) for i,d in cf_dat.configuration_dict.iteritems()] + item_states.sort() + self.cfg_lw = RadioButtonListWalker(item_states, on_state_change = self.cf_statechange) + self.config_lb = OptionListBox(self.cfg_lw) + self.opt_lb = OptionListBox(self.opt_lw) + self.opt_lb.set_focus(0) + return - def __imp_unavailable(self, imp): - if imp == 'none': - return False + def __imp_unavailable(self, imp): + if imp == 'none': + return False - ckopt = self.cf_dat.imp2opt_dict[imp] - if ckopt == 'none': - return False - elif self.cf_dat.opt_dict[ckopt]['enabled']: - return True - else: - return False + ckopt = self.cf_dat.imp2opt_dict[imp] + if ckopt == 'none': + return False + elif self.cf_dat.opt_dict[ckopt]['enabled']: + return True + else: + return False - def __gen_imp_listwalker(self, opt): - imp_items = [] - for imp in self.cf_dat.iter_implementations(opt): - if self.__imp_unavailable(imp): - continue - if imp == self.cf_dat.opt_dict[opt]['selected_imp']: - imp_items.append((imp, True)) - else: - imp_items.append((imp, False)) + def __gen_imp_listwalker(self, opt): + imp_items = [] + for imp in self.cf_dat.iter_implementations(opt): + if self.__imp_unavailable(imp): + continue + if imp == self.cf_dat.opt_dict[opt]['selected_imp']: + imp_items.append((imp, True)) + else: + imp_items.append((imp, False)) - imp_items = imp_items[:1] + sorted(imp_items[1:]) + imp_items = imp_items[:1] + sorted(imp_items[1:]) - rb_lw = RadioButtonListWalker(imp_items, on_state_change=self.imp_statechange, user_data=opt) - return rb_lw + rb_lw = RadioButtonListWalker(imp_items, on_state_change=self.imp_statechange, user_data=opt) + return rb_lw - def cf_statechange(self, button, new_state, udat=None): - cfg_id = button.get_label() - self.cf_dat.cf_statechange(cfg_id, new_state, udat) - cascade = self.cf_dat.configuration_dict[cfg_id]['cascade_list'] - if new_state == True: - for opt in self.cf_dat.opt_dict.keys(): - self.opt_lw.button_dict[opt].set_state(False) + def cf_statechange(self, button, new_state, udat=None): + cfg_id = button.get_label() + self.cf_dat.cf_statechange(cfg_id, new_state, udat) + cascade = self.cf_dat.configuration_dict[cfg_id]['cascade_list'] + if new_state == True: + for opt in self.cf_dat.opt_dict.keys(): + self.opt_lw.button_dict[opt].set_state(False) - for opt,imp in cascade: - self.cf_dat.set_imp(opt, imp) - self.opt_lw.button_dict[opt].set_state(True) - imp_lw = self.__gen_imp_listwalker(opt) + for opt,imp in cascade: + self.cf_dat.set_imp(opt, imp) + self.opt_lw.button_dict[opt].set_state(True) + imp_lw = self.__gen_imp_listwalker(opt) - for opt in self.cf_dat.opt_dict.keys(): - if self.cf_dat.opt_dict[opt]['permanent'] == True: - self.opt_lw.button_dict[opt].set_state(True) + for opt in self.cf_dat.opt_dict.keys(): + if self.cf_dat.opt_dict[opt]['permanent'] == True: + self.opt_lw.button_dict[opt].set_state(True) - dbg.msg(self.cf_msg_index, 'InstConfigManager:cf_statechange({0},{1},{2}), cascade = {3}'.format(cfg_id, new_state, udat, cascade)) - self.cf_msg_index = (self.cf_msg_index - 7) % 2 + 8 - return + dbg.msg(self.cf_msg_index, 'InstConfigManager:cf_statechange({0},{1},{2}), cascade = {3}'.format(cfg_id, new_state, udat, cascade)) + self.cf_msg_index = (self.cf_msg_index - 7) % 2 + 8 + return - def opt_statechange(self, button, new_state, udat=None): - opt = button.get_label().split(':')[0] - imp = self.cf_dat.opt_dict[opt]['selected_imp'] - if new_state == True: - if self.__imp_unavailable(imp): - self.cf_dat.opt_dict[opt]['selected_imp'] = 'none' - imp_none_button = self.imp_lw.button_dict['none'] - imp_none_button.set_state(True) - opt_button = self.opt_lw.button_dict[opt] - opt_button.set_label('{0}:none'.format(opt)) - else: - opt_button = self.opt_lw.button_dict[opt] - opt_button.set_label('{0}:{1}'.format(opt,imp)) - self.cf_dat.set_imp(opt, imp) + def opt_statechange(self, button, new_state, udat=None): + opt = button.get_label().split(':')[0] + imp = self.cf_dat.opt_dict[opt]['selected_imp'] + if new_state == True: + if self.__imp_unavailable(imp): + self.cf_dat.opt_dict[opt]['selected_imp'] = 'none' + imp_none_button = self.imp_lw.button_dict['none'] + imp_none_button.set_state(True) + opt_button = self.opt_lw.button_dict[opt] + opt_button.set_label('{0}:none'.format(opt)) + else: + opt_button = self.opt_lw.button_dict[opt] + opt_button.set_label('{0}:{1}'.format(opt,imp)) + self.cf_dat.set_imp(opt, imp) - self.cf_dat.opt_statechange(opt, new_state, udat) + self.cf_dat.opt_statechange(opt, new_state, udat) - def imp_statechange(self, button, new_state, opt): - if new_state == True: - imp = button.get_label() - self.cf_dat.set_imp(opt, imp) - opt_button = self.opt_lw.button_dict[opt] - opt_button.set_label('{0}:{1}'.format(opt, imp)) + def imp_statechange(self, button, new_state, opt): + if new_state == True: + imp = button.get_label() + self.cf_dat.set_imp(opt, imp) + opt_button = self.opt_lw.button_dict[opt] + opt_button.set_label('{0}:{1}'.format(opt, imp)) - self.cf_dat.imp_statechange(imp, new_state, opt) - return + self.cf_dat.imp_statechange(imp, new_state, opt) + return - def update_imp_lb(self, pos): - optname = self.opt_optype_list[pos][0] - optype = self.opt_optype_list[pos][1] - mstr = 'InstConfigManager:update_imp_lb({0}) -> select {1}'.format(pos, optype) - dbg.msg(1, mstr) - self.imp_lw = self.__gen_imp_listwalker(optname) - self.imp_lb.use_listwalker(self.imp_lw) - return + def update_imp_lb(self, pos): + optname = self.opt_optype_list[pos][0] + optype = self.opt_optype_list[pos][1] + mstr = 'InstConfigManager:update_imp_lb({0}) -> select {1}'.format(pos, optype) + dbg.msg(1, mstr) + self.imp_lw = self.__gen_imp_listwalker(optname) + self.imp_lb.use_listwalker(self.imp_lw) + return import pdb class DEBUG: - msgTextDict = {} - msglist = [] - msg_ids = [ 'm0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9' ] - def __init__(self, enabled=False): - self.enabled = enabled - if enabled: - for msgID in self.msg_ids: - msgText = urwid.Text(u'Space for message {0}'.format(msgID)) - self.msgTextDict[msgID] = msgText - self.msglist.append(urwid.AttrMap(msgText, 'body', 'focus')) + msgTextDict = {} + msglist = [] + msg_ids = [ 'm0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9' ] + def __init__(self, enabled=False): + self.enabled = enabled + if enabled: + for msgID in self.msg_ids: + msgText = urwid.Text(u'Space for message {0}'.format(msgID)) + self.msgTextDict[msgID] = msgText + self.msglist.append(urwid.AttrMap(msgText, 'body', 'focus')) - mlw = urwid.SimpleListWalker(self.msglist) - self.mlb = urwid.ListBox(mlw) + mlw = urwid.SimpleListWalker(self.msglist) + self.mlb = urwid.ListBox(mlw) - def msg(self, index, msg): - if self.enabled: - mid = self.msg_ids[index] - self.msgTextDict[mid].set_text(msg) + def msg(self, index, msg): + if self.enabled: + mid = self.msg_ids[index] + self.msgTextDict[mid].set_text(msg) dbg = DEBUG(enabled=True) def main(config_ini): - global cf_dat, cf_man, cf_viewer + global cf_dat, cf_man, cf_viewer - # Make configuration data - cf_dat = InstConfigData() - cf_dat.read_config_file(config_ini) + # Make configuration data + cf_dat = InstConfigData() + cf_dat.read_config_file(config_ini) - # Make configuration editor - cf_man = InstConfigManager(cf_dat) + # Make configuration editor + cf_man = InstConfigManager(cf_dat) - # Make configuration viewer - cf_viewer = InstConfigView(cf_dat, cf_man, dbg.mlb) - urwid.MainLoop(cf_viewer, Palette, unhandled_input=cf_viewer.keyinput).run() - return + # Make configuration viewer + cf_viewer = InstConfigView(cf_dat, cf_man, dbg.mlb) + urwid.MainLoop(cf_viewer, Palette, unhandled_input=cf_viewer.keyinput).run() + return if '__main__' == __name__: - default_ini = "/usr/local/sics/sics_config.ini" - parser = argparse.ArgumentParser(description = """ - Edit a configuration (*.ini) file using python urwid widget library. - Options can be enabled or disabled with mouse or spacebar. - Navigate with arrow keys. - Press W to save. - Press Alt-Q to quit. - The default configuration filename is %s. - """ % default_ini) - parser.add_argument("-v", "--verbose", action="store_true", help="give more info in the footer") - parser.add_argument("path", nargs="?", default = default_ini, help="name of file to edit [%s]" % default_ini) - args = parser.parse_args() - default_ini = os.path.abspath(args.path) - main(default_ini) + default_ini = "/usr/local/sics/sics_config.ini" + parser = argparse.ArgumentParser(description = """ + Edit a configuration (*.ini) file using python urwid widget library. + Options can be enabled or disabled with mouse or spacebar. + Navigate with arrow keys. + Press W to save. + Press Alt-Q to quit. + The default configuration filename is %s. + """ % default_ini) + parser.add_argument("-v", "--verbose", action="store_true", help="give more info in the footer") + parser.add_argument("path", nargs="?", default = default_ini, help="name of file to edit [%s]" % default_ini) + args = parser.parse_args() + default_ini = os.path.abspath(args.path) + main(default_ini)