Remove unavailable implementations from the impelementation list when an option is selected.
This commit is contained in:
@ -3,18 +3,18 @@
|
||||
|
||||
# View Screen has 3 parts
|
||||
# (Instrument Configuration), (Configuration Options), (Option Implementation)
|
||||
# Uses MVC implemented as InstConfigData<M>, InstConfigView<V>, ConfigEdit<C>
|
||||
# Uses MVC implemented as InstConfigData<M>, InstConfigView<V>, InstConfigManager<C>
|
||||
#
|
||||
# InstConfigData <>--- ConfigParser.SafeConfig
|
||||
# |--set_cfparse()
|
||||
|
||||
# ConfigEdit <>--- InstConfigData, PresentationData
|
||||
# InstConfigManager <>--- InstConfigData, PresentationData
|
||||
# |--set_cfdata(), set_presdata()
|
||||
# |--set_xyz_data() call self.cfgdata.set_xyz() methods
|
||||
#
|
||||
# urwid.Frame
|
||||
# ^
|
||||
# InstConfigView <>--- ConfigEdit, PresentationData
|
||||
# InstConfigView <>--- InstConfigManager, PresentationData
|
||||
# |--set_cfedit(), set_presdata()
|
||||
#
|
||||
# PresentationData
|
||||
@ -30,8 +30,6 @@ import copy
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
## TODO Configuration Editor
|
||||
## Configuration Viewer
|
||||
Palette = [
|
||||
('body', 'dark cyan', '', 'standout'),
|
||||
('focus', 'dark red', '', 'standout'),
|
||||
@ -69,7 +67,6 @@ class CheckBoxListWalker(urwid.SimpleListWalker):
|
||||
return
|
||||
|
||||
|
||||
# Selects listwalker to display for ImpListBox on focus
|
||||
class OptionListWalker(CheckBoxListWalker):
|
||||
def __init__(self, opt_dict, statechange_cb):
|
||||
urwid.register_signal(OptionListWalker, ['focus_change'])
|
||||
@ -212,9 +209,10 @@ class InstConfigData:
|
||||
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"
|
||||
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
|
||||
|
||||
@ -228,7 +226,7 @@ class InstConfigData:
|
||||
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.imp2opt_dict[s] = 'none'
|
||||
|
||||
|
||||
def read_config_file(self, config_filename):
|
||||
@ -274,7 +272,6 @@ class InstConfigData:
|
||||
cfile.write("%s = %s\n" % (option, self.file_parser.get(section, option)))
|
||||
|
||||
cfile.write("\n")
|
||||
#self.file_parser.write(cfile)
|
||||
|
||||
def cf_statechange(self, checkbox, new_state, udat=None):
|
||||
cfg_id = checkbox.get_label()
|
||||
@ -302,30 +299,18 @@ class InstConfigManager:
|
||||
cf_msg_index = 8
|
||||
options = []
|
||||
imp_lw_dict = {}
|
||||
def __init__(self, cfdat):
|
||||
self.cfdat = cfdat
|
||||
def __init__(self, cf_dat):
|
||||
self.cf_dat = cf_dat
|
||||
urwid.register_signal(InstConfigManager, ['focus_change'])
|
||||
for opt,dict in cfdat.opt_dict.iteritems():
|
||||
for opt,dict in cf_dat.opt_dict.iteritems():
|
||||
self.options.append((opt, dict['imptype']))
|
||||
# imp_items = []
|
||||
# for imp in cfdat.imp_dict[dict['imptype']]:
|
||||
# if imp == dict['selected_imp']:
|
||||
# imp_items.append((imp, True))
|
||||
# else:
|
||||
# imp_items.append((imp, False))
|
||||
|
||||
# imp_items.sort()
|
||||
# self.imp_lw_dict[opt] = RadioButtonListWalker(imp_items, on_state_change=self.imp_statechange, user_data=opt)
|
||||
|
||||
self.options.sort()
|
||||
# imp_items.sort()
|
||||
firstopt = self.options[0][0]
|
||||
self.imp_lw = self.__gen_imp_listwalker(firstopt)
|
||||
# self.imp_lw = RadioButtonListWalker([], on_state_change=self.imp_statechange, user_data=firstopt)
|
||||
self.option_lw = OptionListWalker(cfdat.opt_dict, self.opt_statechange)
|
||||
self.option_lw = OptionListWalker(cf_dat.opt_dict, self.opt_statechange)
|
||||
self.imp_lb = ImpListBox(self.imp_lw)
|
||||
urwid.connect_signal(self.option_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)
|
||||
@ -334,10 +319,24 @@ class InstConfigManager:
|
||||
self.opt_lb.set_focus(0)
|
||||
return
|
||||
|
||||
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
|
||||
|
||||
def __gen_imp_listwalker(self, opt):
|
||||
imp_items = []
|
||||
dict = self.cfdat.opt_dict[opt]
|
||||
for imp in self.cfdat.imp_dict[dict['imptype']]:
|
||||
dict = self.cf_dat.opt_dict[opt]
|
||||
for imp in self.cf_dat.imp_dict[dict['imptype']]:
|
||||
if self.__imp_unavailable(imp):
|
||||
continue
|
||||
if imp == dict['selected_imp']:
|
||||
imp_items.append((imp, True))
|
||||
else:
|
||||
@ -349,12 +348,12 @@ class InstConfigManager:
|
||||
|
||||
|
||||
def cf_statechange(self, button, new_state, udat=None):
|
||||
self.cfdat.cf_statechange(button, new_state, udat)
|
||||
self.cf_dat.cf_statechange(button, new_state, udat)
|
||||
b = button.get_label()
|
||||
cascade = self.cfdat.configuration_dict[b]['cascade_list']
|
||||
cascade = self.cf_dat.configuration_dict[b]['cascade_list']
|
||||
if new_state == True:
|
||||
for opt in self.cfdat.opt_dict.keys():
|
||||
if self.cfdat.opt_dict[opt]['permanent'] == False:
|
||||
for opt in self.cf_dat.opt_dict.keys():
|
||||
if self.cf_dat.opt_dict[opt]['permanent'] == False:
|
||||
self.option_lw.button_dict[opt].set_state(False)
|
||||
for opt,imp in cascade:
|
||||
self.option_lw.button_dict[opt].set_state(True)
|
||||
@ -368,11 +367,23 @@ class InstConfigManager:
|
||||
return
|
||||
|
||||
def opt_statechange(self, button, new_state, udat=None):
|
||||
self.cfdat.opt_statechange(button, new_state, udat)
|
||||
opt = button.get_label()
|
||||
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'
|
||||
else:
|
||||
self.cf_dat.imp2opt_dict[imp] = opt
|
||||
|
||||
self.cf_dat.opt_statechange(button, new_state, udat)
|
||||
return
|
||||
|
||||
def imp_statechange(self, button, new_state, udat=None):
|
||||
self.cfdat.imp_statechange(button, new_state, udat)
|
||||
def imp_statechange(self, button, new_state, opt):
|
||||
if new_state == True:
|
||||
imp = button.get_label()
|
||||
self.cf_dat.imp2opt_dict[imp] = opt
|
||||
|
||||
self.cf_dat.imp_statechange(button, new_state, opt)
|
||||
return
|
||||
|
||||
def update_imp_lb(self, pos):
|
||||
|
Reference in New Issue
Block a user