Naresh(OpenERP) has proposed merging
lp:~openerp-dev/openobject-client/trunk-ORing_in_filter-nch into
lp:openobject-client.
Requested reviews:
Xavier (Open ERP) (xmo)
OpenERP sa GTK client R&D (openerp-dev-gtk)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-ORing_in_filter-nch/+merge/76517
ORing between series of Filters i.e <filter1> '|' <filter2>
Thanks
--
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-ORing_in_filter-nch/+merge/76517
Your team OpenERP sa GTK client R&D is requested to review the proposed merge
of lp:~openerp-dev/openobject-client/trunk-ORing_in_filter-nch into
lp:openobject-client.
=== modified file 'bin/widget_search/filter.py'
--- bin/widget_search/filter.py 2011-07-27 12:55:13 +0000
+++ bin/widget_search/filter.py 2011-09-22 06:51:29 +0000
@@ -44,7 +44,7 @@
self.butt.set_image_position(gtk.POS_TOP)
self.butt.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("grey"))
self.butt.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.color_parse("light grey"))
- help = attrs.get('help', False) or attrs.get('string', False)
+ help = attrs.get('help') or attrs.get('string')
if help:
self.butt.set_tooltip_markup(tools.to_xml(help))
self.domain = attrs.get('domain', "[]")
@@ -55,17 +55,17 @@
self.butt.connect('toggled', call[1])
self.screen_context = call[0].context
self.widget = self.butt
+ self.filter_group = False
def _value_get(self):
if not self.butt.get_active():
ctx = tools.expr_eval(self.context, {'context':self.screen_context})
group = ctx.get('group_by',False)
if group:
- return {'context': {'remove_group':True}, 'name':self.name}
+ return {'context': {'remove_group':True}}
return {}
return {'domain': tools.expr_eval(self.domain, {'context':self.screen_context}),
- 'context': tools.expr_eval(self.context, {'context':self.screen_context}),
- 'name':self.name }
+ 'context': tools.expr_eval(self.context, {'context':self.screen_context})}
def sig_exec(self, widget):
pass
=== modified file 'bin/widget_search/form.py'
--- bin/widget_search/form.py 2011-09-16 08:48:53 +0000
+++ bin/widget_search/form.py 2011-09-22 06:51:29 +0000
@@ -64,8 +64,6 @@
self.cont[-1] = (table, 1, y+1)
if new_table:
self.new(col=4)
-# table= gtk.Table(1, 8)
-# table.resize(y+1,self.col[-1])
def wid_add(self, widget, colspan=1, name=None, expand=False, xoptions=False, ypadding=0, help=False, rowspan=1):
self.count += 1
@@ -125,7 +123,6 @@
for f in common_fields:
del all_fields[f]
field_dict = all_fields
-
self.fields.update(field_dict)
self.name_lst1=[('field',(field_dict[x])) for x in field_dict]
self.parent = parent
@@ -154,19 +151,19 @@
def _psr_char(self, char):
pass
- def dummy_start(self,name,attrs):
- flag=False
+ def dummy_start(self, name, attrs):
+ flag = False
if name =='field' and 'name' in attrs:
- for i in range (0,len(self.name_lst)):
- if 'name' in self.name_lst[i][1]:
- if self.name_lst[i][1]['name']==attrs['name']:
- flag=True
- if 'select' in attrs:
- self.name_lst[i]=(name,attrs)
- if not flag:
- self.name_lst.append((name,attrs))
+ for i in range (0, len(self.name_lst)):
+ if 'name' in self.name_lst[i][1]:
+ if self.name_lst[i][1]['name'] == attrs['name']:
+ flag = True
+ if 'select' in attrs:
+ self.name_lst[i] = (name, attrs)
+ if not flag:
+ self.name_lst.append((name, attrs))
else:
- self.name_lst.append((name,attrs))
+ self.name_lst.append((name, attrs))
def parse_filter(self, xml_data, max_width, root_node, call=None):
psr = expat.ParserCreate()
@@ -182,10 +179,10 @@
attrs = tools.node_attributes(root_node)
container.new()
self.container = container
-
+ filter_group = False
for node in root_node:
attrs = tools.node_attributes(node)
- if attrs.get('invisible', False):
+ if attrs.get('invisible'):
visval = eval(attrs['invisible'], {'context':call[0].context})
if visval:
continue
@@ -209,9 +206,10 @@
if node is not None and len(node):
mywidget = gtk.HBox(homogeneous=False, spacing=0)
mywidget.pack_start(widget_act.widget,expand=True,fill=True)
+ child_filter_group = False
for node_child in node:
attrs_child = tools.node_attributes(node_child)
- if attrs_child.get('invisible', False):
+ if attrs_child.get('invisible'):
visval = eval(attrs_child['invisible'], {'context':call[0].context})
if visval:
continue
@@ -219,58 +217,66 @@
widget_child = widgets_type['filter'][0]('', self.parent, attrs_child, call)
mywidget.pack_start(widget_child.widget)
dict_widget[str(attrs['name']) + str(uuid.uuid1())] = (widget_child, mywidget, 1)
+ if not child_filter_group:
+ child_filter_group = uuid.uuid1()
+ widget_child.filter_group = child_filter_group
+
elif node_child.tag == 'separator':
+ child_filter_group = False
if attrs_child.get('orientation','vertical') == 'horizontal':
sep = gtk.HSeparator()
sep.set_size_request(30,5)
- mywidget.pack_start(sep,False,True,5)
+ mywidget.pack_start(sep, False, True, 5)
else:
sep = gtk.VSeparator()
sep.set_size_request(3,40)
- mywidget.pack_start(sep,False,False,5)
-# mywidget.pack_start(widget_act.widget,expand=False,fill=False)
+ mywidget.pack_start(sep, False, False, 5)
xoptions = gtk.SHRINK
- wid = container.wid_add(mywidget, 1,label, int(self.fields[str(attrs['name'])].get('expand',0)),xoptions=xoptions)
+ wid = container.wid_add(mywidget, 1,label, int(self.fields[str(attrs['name'])].get('expand',0)), xoptions=xoptions)
dict_widget[str(attrs['name'])] = (widget_act, wid, 1)
elif node.tag == 'filter':
name = str(attrs.get('string','filter'))
widget_act = filter.filter(name, self.parent, attrs, call)
- help = attrs.get('help', False) or name
+ help = attrs.get('help', name)
wid = container.wid_add(widget_act.butt, xoptions=gtk.SHRINK, help=help)
dict_widget[name + str(uuid.uuid1())] = (widget_act, widget_act, 1)
+ if not filter_group:
+ filter_group = uuid.uuid1()
+ widget_act.filter_group = filter_group
elif node.tag == 'separator':
+ filter_group = False
if attrs.get('orientation','vertical') == 'horizontal':
sep_box = gtk.VBox(homogeneous=False, spacing=0)
sep = gtk.HSeparator()
sep.set_size_request(30,5)
- sep_box.pack_start(gtk.Label(''),expand=False,fill=False)
- sep_box.pack_start(sep,False,True,5)
+ sep_box.pack_start(gtk.Label(''), expand=False, fill=False)
+ sep_box.pack_start(sep, False, True, 5)
else:
sep_box = gtk.HBox(homogeneous=False, spacing=0)
sep = gtk.VSeparator()
sep.set_size_request(3,45)
- sep_box.pack_start(sep,False,False,5)
- wid = container.wid_add(sep_box,xoptions=gtk.SHRINK)
+ sep_box.pack_start(sep, False, False, 5)
+ wid = container.wid_add(sep_box, xoptions=gtk.SHRINK)
wid.show()
elif node.tag=='newline':
container.newline(node.getparent() is not None and node.getparent().tag == 'group')
elif node.tag=='group':
- if attrs.get('invisible', False):
+ if attrs.get('invisible'):
continue
- if attrs.get('expand', False):
- attrs['expand'] = tools.expr_eval(attrs.get('expand',False),{'context':call[0].context})
- frame = gtk.Expander(attrs.get('string', None))
+ if attrs.get('expand'):
+ attrs['expand'] = tools.expr_eval(attrs.get('expand'),{'context':call[0].context})
+ frame = gtk.Expander(attrs.get('string'))
frame.set_expanded(bool(attrs['expand']))
else:
- frame = gtk.Frame(attrs.get('string', None))
- if not attrs.get('string', None):
+ frame = gtk.Frame(attrs.get('string'))
+ if not attrs.get('string'):
frame.set_shadow_type(gtk.SHADOW_NONE)
frame.attrs = attrs
frame.set_border_width(0)
- container.wid_add(frame, colspan=1, expand=int(attrs.get('expand',0)), ypadding=0)
+ container.wid_add(frame, colspan=1, expand=int(attrs.get('expand', 0)), ypadding=0)
container.new()
widget, widgets = self.parse_filter(xml_data, max_width, node, call= call)
dict_widget.update(widgets)
@@ -283,7 +289,7 @@
frame.add(tb)
else:
frame.add(widget)
- if not attrs.get('string', None):
+ if not attrs.get('string'):
container.get().set_border_width(0)
container.pop()
self.widget = container.pop()
@@ -436,26 +442,37 @@
def _value_get(self):
domain = []
context = {}
-
+ filter_group = {}
+
for x in self.widgets.values() + self.custom_widgets.values():
filters = x[0].value
- domain += filters.get('domain', [])
+ dom = filters.get('domain', [])
+ if isinstance(x[0], filter.filter) and dom:
+ filter_group.setdefault(x[0].filter_group, [])
+ if dom in filter_group[x[0].filter_group]:
+ continue
+ filter_group[x[0].filter_group].append(dom)
+ else:
+ domain += dom
ctx = filters.get('context', {})
- gp_name = filters.pop('name', False)
ctx_groupby = ctx.pop('group_by', False)
ctx_remove_group = ctx.pop('remove_group', False)
if ctx_groupby:
if not isinstance(ctx_groupby, list):
ctx_groupby = [ctx_groupby]
- self.groupby.setdefault(gp_name, [])
- if gp_name not in self.gp_filters:
- self.gp_filters.append(gp_name)
- self.groupby[gp_name] = ctx_groupby
+ self.groupby.setdefault(x[0].name, [])
+ if x[0].name not in self.gp_filters:
+ self.gp_filters.append(x[0].name)
+ self.groupby[x[0].name] = ctx_groupby
elif ctx_remove_group:
- if gp_name in self.gp_filters:
- self.gp_filters.remove(gp_name)
+ if x[0].name in self.gp_filters:
+ self.gp_filters.remove(x[0].name)
context.update(ctx)
ordered_gp = []
+ for group, domains in filter_group.iteritems():
+ domain += ( ['|'] * ( len(domains) - 1) )
+ for dom in domains:
+ domain += dom
for val in self.gp_filters:
ordered_gp += self.groupby[val]
if ordered_gp:
@@ -466,9 +483,7 @@
for (ref, value) in self.__dict__.items():
if isinstance(value, gtk.Object) and not isinstance(value, gtk.Window):
value.destroy()
-
self.parser.destroy()
-
del self.widgets
del self.focusable
del self.parent
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp