Implement new on_change behavior
This commit is contained in:
@@ -27,7 +27,7 @@ class CharField(object):
|
||||
if self.get_state_attrs(model).get('readonly', False):
|
||||
return
|
||||
if self.attrs.get('on_change', False):
|
||||
model.on_change(self.attrs['on_change'])
|
||||
model.on_change(self.name, self.attrs['on_change'])
|
||||
if self.attrs.get('change_default', False):
|
||||
model.cond_default(self.attrs['name'], self.get(model))
|
||||
|
||||
@@ -78,7 +78,7 @@ class CharField(object):
|
||||
def set_default(self, model, value):
|
||||
res = self.set(model, value)
|
||||
if self.attrs.get('on_change', False):
|
||||
model.on_change(self.attrs['on_change'])
|
||||
model.on_change(self.name, self.attrs['on_change'])
|
||||
return res
|
||||
|
||||
def get_default(self, model):
|
||||
|
||||
@@ -213,23 +213,15 @@ class ModelRecord(SignalEvent):
|
||||
val = eval(dom, ctx)
|
||||
return val
|
||||
|
||||
#XXX Shoud use changes of attributes (ro, ...)
|
||||
def on_change(self, callback):
|
||||
match = re.match('^(.*?)\((.*)\)$', callback)
|
||||
if not match:
|
||||
raise Exception, 'ERROR: Wrong on_change trigger: %s' % callback
|
||||
func_name = match.group(1)
|
||||
arg_names = [n.strip() for n in match.group(2).split(',')]
|
||||
args = [self.expr_eval(arg) for arg in arg_names]
|
||||
def on_change(self, field, attr):
|
||||
args = {}
|
||||
for arg in attr:
|
||||
args[arg] = self.expr_eval(arg)
|
||||
ids = self.id and [self.id] or []
|
||||
response = getattr(self.rpc, func_name)(ids, *args)
|
||||
if response:
|
||||
self.set(response.get('value', {}), modified=True)
|
||||
if 'domain' in response:
|
||||
for fieldname, value in response['domain'].items():
|
||||
if fieldname not in self.mgroup.mfields:
|
||||
continue
|
||||
self.mgroup.mfields[fieldname].attrs['domain'] = value
|
||||
res = getattr(self.rpc, 'on_change_' + field)(ids, args,
|
||||
rpc.session.context)
|
||||
if res:
|
||||
self.set(res, modified=True)
|
||||
self.signal('record-changed')
|
||||
|
||||
def cond_default(self, field_name, value):
|
||||
|
||||
@@ -477,6 +477,6 @@ class Screen(SignalEvent):
|
||||
self.models.clear()
|
||||
self.current_model = None
|
||||
|
||||
def on_change(self, callback):
|
||||
self.current_model.on_change(callback)
|
||||
def on_change(self, fieldname, attr):
|
||||
self.current_model.on_change(fieldname, attr)
|
||||
self.display()
|
||||
|
||||
@@ -8,7 +8,6 @@ class CheckBox(WidgetInterface):
|
||||
self.widget = gtk.CheckButton()
|
||||
self.widget.connect('focus-in-event', lambda x, y: self._focus_in())
|
||||
self.widget.connect('focus-out-event', lambda x, y: self._focus_out())
|
||||
self.widget.connect('toggled', lambda x: self.sig_changed())
|
||||
|
||||
def _readonly_set(self, value):
|
||||
super(CheckBox, self)._readonly_set(value)
|
||||
|
||||
@@ -191,9 +191,5 @@ class WidgetInterface(object):
|
||||
self.invisible_set(modelfield.get_state_attrs(model).\
|
||||
get('invisible', False))
|
||||
|
||||
def sig_changed(self):
|
||||
if self.attrs.get('on_change', False):
|
||||
self._view.view_form.screen.on_change(self.attrs['on_change'])
|
||||
|
||||
def set_value(self, model, model_field):
|
||||
pass
|
||||
|
||||
@@ -106,5 +106,4 @@ class Selection(WidgetInterface):
|
||||
|
||||
def sig_changed(self, *args):
|
||||
if self.changed:
|
||||
super(Selection, self).sig_changed()
|
||||
self._focus_out()
|
||||
|
||||
@@ -335,10 +335,6 @@ class ViewList(ParserView):
|
||||
sel.selected_foreach(_func_sel_get, models)
|
||||
return models
|
||||
|
||||
def on_change(self, callback):
|
||||
self.set_value()
|
||||
self.screen.on_change(callback)
|
||||
|
||||
def unset_editable(self):
|
||||
self.widget_tree.editable = False
|
||||
for col in self.widget_tree.get_columns():
|
||||
|
||||
@@ -32,15 +32,6 @@ class EditableTreeView(gtk.TreeView):
|
||||
except parser.UnsettableColumn:
|
||||
return
|
||||
|
||||
# And now the on_change stuff ... only 3 lines are enough.
|
||||
#callback = modelfield.attrs.get('on_change', '')
|
||||
#if callback:
|
||||
# current_model.on_change(callback)
|
||||
|
||||
# And finally the conditional default
|
||||
#if modelfield.attrs.get('change_default', False):
|
||||
# current_model.cond_default(fieldname, real_value)
|
||||
|
||||
def on_open_remote(self, current_model, fieldname, create, value):
|
||||
modelfield = current_model[fieldname]
|
||||
cell = self.cells[fieldname]
|
||||
|
||||
Reference in New Issue
Block a user