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