Remove domain constraint and use new domain evaluation

This commit is contained in:
Cédric Krier committed 2008-09-04 18:30:38 +02:00
1 parent 273ef7fd62
commit 9f9573ad00
5 files changed
+23 -32

No files matched your search

+1 -1
View File
@@ -383,7 +383,7 @@ class O2MField(CharField):
def set(self, model, value, modified=False):
from group import ModelRecordGroup
mod = ModelRecordGroup(self.attrs['relation'], {}, model.window,
parent=model)
parent=model, parent_name=self.attrs.get('relation_field', ''))
mod.signal_connect(mod, 'model-changed', self._model_changed)
model.value[self.name] = mod
#self.internal.signal_connect(self.internal, 'model-changed',
+6 -4
View File
@@ -71,11 +71,12 @@ class ModelList(list):
class ModelRecordGroup(SignalEvent):
def __init__(self, resource, fields, window, ids=None, parent=None, context=None,
readonly=False):
def __init__(self, resource, fields, window, ids=None, parent=None,
parent_name='', context=None, readonly=False):
super(ModelRecordGroup, self).__init__()
self.window = window
self.parent = parent
self.parent_name = parent_name
self._context = context or {}
self.resource = resource
self.rpc = RPCProxy(resource)
@@ -156,7 +157,7 @@ class ModelRecordGroup(SignalEvent):
newmods = []
for id in ids:
newmod = ModelRecord(self.resource, id, self.window,
parent=self.parent, group=self)
parent=self.parent, parent_name=self.parent_name, group=self)
self.models.append(newmod)
newmods.append(newmod)
newmod.signal_connect(self, 'record-changed', self._record_changed)
@@ -221,6 +222,7 @@ class ModelRecordGroup(SignalEvent):
self.models.insert(position, model)
self.current_idx = position
model.parent = self.parent
model.parent_name = self.parent_name
model.window = self.window
if modified:
model.modified = True
@@ -245,7 +247,7 @@ class ModelRecordGroup(SignalEvent):
def model_new(self, default=True, domain=None, context=None):
newmod = ModelRecord(self.resource, None, self.window, group=self,
parent=self.parent, new=True)
parent=self.parent, parent_name=self.parent_name, new=True)
newmod.signal_connect(self, 'record-changed', self._record_changed)
newmod.signal_connect(self, 'record-modified', self._record_modified)
if default:
+7 -4
View File
@@ -17,7 +17,7 @@ class EvalEnvironment(object):
self.check_load = check_load
def __getattr__(self, item):
if item == 'parent' and self.parent.parent:
if item == '_parent_' + self.parent.parent_name and self.parent.parent:
return EvalEnvironment(self.parent.parent)
return self.parent.get_eval(check_load=self.check_load)[item]
@@ -27,7 +27,8 @@ class ModelRecord(SignalEvent):
id = -1
def __init__(self, resource, obj_id, window, group=None, parent=None, new=False ):
def __init__(self, resource, obj_id, window, group=None, parent=None,
parent_name='', new=False):
global ID_COUNT
super(ModelRecord, self).__init__()
self.window = window
@@ -38,6 +39,7 @@ class ModelRecord(SignalEvent):
ModelRecord.id -= 1
self._loaded = False
self.parent = parent
self.parent_name = parent_name
self.mgroup = group
self.value = {}
self.state_attrs = {}
@@ -296,8 +298,9 @@ class ModelRecord(SignalEvent):
ctx['time'] = time
ctx['context'] = self.context_get()
ctx['active_id'] = self.id
if self.parent:
ctx['parent'] = EvalEnvironment(self.parent, check_load)
if self.parent and self.parent_name:
ctx['_parent_' + self.parent_name] = EvalEnvironment(self.parent,
check_load)
val = eval(dom, ctx)
return val
+6 -22
View File
@@ -16,9 +16,9 @@ class Screen(SignalEvent):
"Screen"
def __init__(self, model_name, window, view_ids=None, view_type=None,
parent=None, context=None, views_preload=None, tree_saves=True,
domain=None, create_new=False, row_activate=None, hastoolbar=False,
default_get=None, show_search=False, limit=None,
parent=None, parent_name='', context=None, views_preload=None,
tree_saves=True, domain=None, create_new=False, row_activate=None,
hastoolbar=False, default_get=None, show_search=False, limit=None,
readonly=False, form=None, exclude_field=None, sort=None,
search_value=None):
if view_ids is None:
@@ -58,9 +58,10 @@ class Screen(SignalEvent):
self.view_ids = view_ids
self.models = None
self.parent = parent
self.parent_name = parent_name
self.window = window
models = ModelRecordGroup(model_name, self.fields, self.window,
parent=self.parent, context=self.context,
parent=self.parent, parent_name=parent_name, context=self.context,
readonly=readonly)
self.models_set(models)
self.current_model = None
@@ -164,6 +165,7 @@ class Screen(SignalEvent):
self.models.signal_unconnect(self.models)
self.models = models
self.parent = models.parent
self.parent_name = models.parent_name
if len(models.models):
self.current_model = models.models[0]
else:
@@ -326,7 +328,6 @@ class Screen(SignalEvent):
else:
self.models.add_fields(fields, self.models, context=context)
self.set_domain()
self.fields = self.models.fields
parser = WidgetParse(parent=self.parent, window=self.window)
@@ -340,23 +341,6 @@ class Screen(SignalEvent):
self.screen_container.set(view.widget)
return view
def set_domain(self):
fields = self.models.fields
for dom in self.domain:
#XXX to improve for new domain structure
if not isinstance(dom, tuple):
continue
if dom[0] in fields:
field_dom = str(fields[dom[0]].setdefault('domain',[]))
if dom[1] == 'child_of':
fields[dom[0]]['domain'] = field_dom[:1] + \
str((dom[0], dom[1], dom[2])) + ',' + field_dom[1:]
else:
fields[dom[0]]['domain'] = field_dom[:1] + \
str(('id', dom[1], dom[2])) + ',' + field_dom[1:]
if dom[1] == '=':
fields[dom[0]]['readonly'] = True
def editable_get(self):
if hasattr(self.current_view, 'widget_tree'):
if hasattr(self.current_view.widget_tree, 'editable'):
@@ -200,6 +200,7 @@ class Dialog(object):
self.dia.show()
self.screen = Screen(model_name, self.dia, view_type=[], parent=parent,
parent_name=attrs.get('relation_field'),
exclude_field=attrs.get('relation_field', None), readonly=readonly,
domain=domain)
self.screen.models._context.update(model_ctx)
@@ -460,7 +461,8 @@ class One2Many(WidgetInterface):
self.screen = Screen(attrs['relation'], self._window,
view_type=attrs.get('mode','tree,form').split(','),
parent=self.parent, views_preload=attrs.get('views', {}),
parent=self.parent, parent_name=attrs.get('relation_field'),
views_preload=attrs.get('views', {}),
tree_saves=attrs.get('saves', False), create_new=True,
row_activate=self._on_activate,
default_get=attrs.get('default_get', {}),