multi defaults value addition cinematics

This commit is contained in:
gwen 2013-01-10 12:03:59 +01:00
parent e70054c4d4
commit f9d6f62a70
2 changed files with 37 additions and 8 deletions

View File

@ -70,11 +70,16 @@ class Config(object):
- settles various default values for options - settles various default values for options
""" """
self._validate_duplicates(self._cfgimpl_descr._children) self._validate_duplicates(self._cfgimpl_descr._children)
#max len for a master/slave group
max_len_child = 0
for child in self._cfgimpl_descr._children: for child in self._cfgimpl_descr._children:
if isinstance(child, Option): if isinstance(child, Option):
if child.is_multi(): if child.is_multi():
#force_append to load values without append value to
#child/master
childdef = Multi(copy(child.getdefault()), config=self, childdef = Multi(copy(child.getdefault()), config=self,
opt=child) opt=child, force_append=False)
max_len_child = max(max_len_child, len(childdef))
self._cfgimpl_values[child._name] = childdef self._cfgimpl_values[child._name] = childdef
self._cfgimpl_previous_values[child._name] = list(childdef) self._cfgimpl_previous_values[child._name] = list(childdef)
else: else:
@ -85,7 +90,25 @@ class Config(object):
elif isinstance(child, OptionDescription): elif isinstance(child, OptionDescription):
self._validate_duplicates(child._children) self._validate_duplicates(child._children)
self._cfgimpl_values[child._name] = Config(child, parent=self) self._cfgimpl_values[child._name] = Config(child, parent=self)
# self.override(overrides)
try:
master = self._cfgimpl_descr.get_master_name()
except TypeError:
pass
else:
#if master/slave group, add default_multi value if length of valu
#if inferior to group length
for child in self._cfgimpl_descr._children:
value = self._cfgimpl_values[child._name]
if value is None:
len_child = 0
value = Multi([], config=self, opt=child, force_append=False)
else:
len_child = len(value)
if len_child < max_len_child:
for num in range(len_child, max_len_child):
value._append_default()
def cfgimpl_update(self): def cfgimpl_update(self):
"""dynamically adds `Option()` or `OptionDescription()` """dynamically adds `Option()` or `OptionDescription()`

View File

@ -42,15 +42,17 @@ for act1, act2 in requires_actions:
class Multi(list): class Multi(list):
"""multi options values container """multi options values container
that support item notation for the values of multi options""" that support item notation for the values of multi options"""
def __init__(self, lst, config, opt): def __init__(self, lst, config, opt, force_append=True):
""" """
:lst: the Multi wraps a list value :param lst: the Multi wraps a list value
:param config: the parent config :param config: the parent config
:param opt: the option object that have this Multi value :param opt: the option object that have this Multi value
:param force_append: - True to append child value with master's one
- False to force lst value
""" """
self.config = config self.config = config
self.opt = opt self.opt = opt
if self.opt.is_master(config): if force_append and self.opt.is_master(config):
# we pass the list at the list type's init # we pass the list at the list type's init
# because a normal init cannot return anything # because a normal init cannot return anything
super(Multi, self).__init__(lst) super(Multi, self).__init__(lst)
@ -61,7 +63,8 @@ class Multi(list):
except Exception, err: except Exception, err:
print err print err
else: else:
self.config._valid_len(self.opt._name, lst) if force_append:
self.config._valid_len(self.opt._name, lst)
super(Multi, self).__init__(lst) super(Multi, self).__init__(lst)
def __setitem__(self, key, value): def __setitem__(self, key, value):
@ -90,10 +93,13 @@ class Multi(list):
else: else:
ret = value ret = value
else: else:
default_value = multi.opt.getdefault_multi() multi._append_default()
multi._setvalue(default_value)
return ret return ret
def _append_default(self):
default_value = self.opt.getdefault_multi()
self._setvalue(default_value)
def _setvalue(self, value, key=None, who=None): def _setvalue(self, value, key=None, who=None):
if value != None: if value != None:
if not self.opt._validate(value): if not self.opt._validate(value):