openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #00158
[Merge] lp:~openerp-dev/openobject-client/ir_filter_rga into lp:openobject-client
RGA(OpenERP) has proposed merging lp:~openerp-dev/openobject-client/ir_filter_rga into lp:openobject-client.
Requested reviews:
OpenERP sa GTK client R&D (openerp-dev-gtk)
hello,
In order to make ir.filter more user-friendly the filter name should be specified already in the dialog box if the user tries to save a (active)filter and another filter is already active/selected
--
https://code.launchpad.net/~openerp-dev/openobject-client/ir_filter_rga/+merge/38220
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client/ir_filter_rga.
=== modified file 'bin/widget/screen/screen.py'
--- bin/widget/screen/screen.py 2010-10-12 06:12:38 +0000
+++ bin/widget/screen/screen.py 2010-10-12 13:24:45 +0000
@@ -309,6 +309,9 @@
def execute_action(self, combo):
flag = combo.get_active_text()
+ combo_model = combo.get_model()
+ active_id = combo.get_active()
+ action_name = active_id != -1 and flag not in ['mf','blk','sh', 'sf'] and combo_model[active_id][2]
# 'mf' Section manages Filters
def clear_domain_ctx():
for key in self.old_ctx.keys():
@@ -334,6 +337,7 @@
value = obj._exec_action(act, {}, ctx)
if flag in ['blk','mf']:
+ self.screen_container.last_active_filter = False
clear_domain_ctx()
self.search_filter()
combo.set_active(0)
@@ -344,10 +348,19 @@
widget = glade2.get_widget('action_name')
win = glade2.get_widget('dia_get_action')
win.set_icon(common.OPENERP_ICON)
+ lbl = glade2.get_widget('label157')
if flag == 'sh':
win.set_title('Shortcut Entry')
- lbl = glade2.get_widget('label157')
- lbl.set_text('Enter Shortcut Name:')
+ lbl.set_text('Shortcut Name:')
+ else:
+ win.set_size_request(300, 165)
+ text_entry = glade2.get_widget('action_name')
+ lbl.set_text('Filter Name:')
+ table = glade2.get_widget('table8')
+ info_lbl = gtk.Label('(Any existing filter with the \nsame name will be replaced)')
+ table.attach(info_lbl,1,2,2,3, gtk.FILL, gtk.EXPAND)
+ if self.screen_container.last_active_filter:
+ text_entry.set_text(self.screen_container.last_active_filter)
win.show_all()
response = win.run()
# grab a safe copy of the entered text before destroy() to avoid GTK bug https://bugzilla.gnome.org/show_bug.cgi?id=613241
@@ -355,22 +368,35 @@
win.destroy()
combo.set_active(0)
if response == gtk.RESPONSE_OK and action_name:
+ filter_domain = self.filter_widget and self.filter_widget.value.get('domain',[])
+ filter_context = self.filter_widget and self.filter_widget.value.get('context',{})
values = {'name':action_name,
'model_id':self.name,
- 'domain':str(self.filter_widget and self.filter_widget.value.get('domain',[])),
- 'context':str(self.filter_widget and self.filter_widget.value.get('context',{})),
'user_id':rpc.session.uid
}
if flag == 'sf':
- action_id = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'create', values, self.context)
- self.screen_container.fill_filter_combo(self.name)
+ domain, context = self.screen_container.get_filter(action_name)
+ for dom in eval(domain):
+ if dom not in filter_domain:
+ filter_domain.append(dom)
+ groupby_list = eval(context).get('group_by',[]) + filter_context.get('group_by',[])
+ filter_context.update(eval(context))
+ filter_context.update({'group_by':groupby_list})
+ values.update({'domain':str(filter_domain),
+ 'context':str(filter_context),
+ })
+ action_id = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'create_or_replace', values, self.context)
+ self.screen_container.fill_filter_combo(self.name, action_name)
if flag == 'sh':
values.update({'res_model':self.name,
- 'search_view_id':self.search_view['view_id'],
- 'default_user_ids': [[6, 0, [rpc.session.uid]]]})
+ 'domain':str(filter_domain),
+ 'context':str(filter_context),
+ 'search_view_id':self.search_view['view_id'],
+ 'default_user_ids': [[6, 0, [rpc.session.uid]]]})
rpc.session.rpc_exec_auth_try('/object', 'execute', 'ir.ui.menu', 'create_shortcut', values, self.context)
else:
try:
+ self.screen_container.last_active_filter = action_name
filter_domain = flag and tools.expr_eval(flag)
clear_domain_ctx()
if combo.get_active() >= 0:
=== modified file 'bin/widget/view/list.py'
--- bin/widget/view/list.py 2010-10-12 10:14:15 +0000
+++ bin/widget/view/list.py 2010-10-12 13:24:45 +0000
@@ -122,7 +122,7 @@
if self.loaded:
return
self.loaded = True
- gb = self.context.get('group_by', False)
+ gb = self.context.get('group_by', [])
no_leaf = self.context.get('group_by_no_leaf', False)
if gb or no_leaf:
records = rpc.session.rpc_exec_auth('/object', 'execute', self.mgroup.resource, 'read_group',
=== modified file 'bin/widget/view/screen_container.py'
--- bin/widget/view/screen_container.py 2010-10-12 06:12:38 +0000
+++ bin/widget/view/screen_container.py 2010-10-12 13:24:45 +0000
@@ -36,6 +36,7 @@
self.vp = gtk.Viewport()
self.vp.set_shadow_type(gtk.SHADOW_NONE)
self.vbox = gtk.VBox()
+ self.last_active_filter = False
self.vbox.pack_end(self.sw)
self.filter_vbox = None
self.button = None
@@ -44,27 +45,47 @@
self.help_frame = False
self.help = {}
self.win_search = win_search
+ self.domain = []
+ self.context = {}
+ self.handler_id = None
def widget_get(self):
return self.vbox
- def fill_filter_combo(self, model):
+ def fill_filter_combo(self, model, action_name = False):
+ self.action_combo.handler_block(self.handler_id)
self.action_list.clear()
+ self.action_combo.handler_unblock(self.handler_id)
+ active = False
my_acts = rpc.session.rpc_exec_auth('/object', 'execute', 'ir.filters', 'get_filters', model)
filters_list=[['blk','','-- Filters --']]
sorted_filters = [[act.get('domain',act['id']),act['context'],act['name']] for act in my_acts]
sorted_filters.sort(lambda x, y: cmp(x[2], y[2]))
filters_list += sorted_filters
filters_list += [['blk','','--Actions--'],['sh','','Save as a Shortcut'],['sf','','Save as a Filter'],['mf','','Manage Filters']]
- for lim in filters_list:
- self.action_list.append(lim)
- self.action_combo.set_active(0)
+ for index, action in enumerate(filters_list):
+ if action[-1] == action_name:
+ active = index
+ self.action_list.append(action)
+ if active:
+ self.action_combo.set_active(active)
+ else:
+ self.action_combo.set_active(0)
+
def fill_limit_combo(self):
self.limit_combo.clear()
for lim in [[100,'100'],[200,'200'],[500,'500'],[None,'Unlimited']]:
self.limit_combo.append(lim)
self.combo.set_active(0)
+
+
+ def get_filter(self, filter_name):
+ def fnct(filterstore, path, iter, filter_name):
+ if filterstore.get(iter, 2)[0].lower() == filter_name.lower():
+ self.domain, self.context = filterstore.get(iter, 0, 1)
+ self.action_list.foreach(fnct, filter_name)
+ return str(self.domain),str(self.context)
def add_filter(self, widget, fnct, clear_fnct, next_fnct, prev_fnct, execute_action=None, add_custom=None, model=None, limit=100):
self.filter_vbox = gtk.VBox(spacing=1)
@@ -108,10 +129,11 @@
cell = gtk.CellRendererText()
self.action_combo.pack_start(cell, True)
self.action_combo.add_attribute(cell, 'text', 2)
-
+
+ self.handler_id = self.action_combo.connect('changed', execute_action)
self.fill_filter_combo(model)
self.action_combo.set_active(0)
- self.action_combo.connect('changed', execute_action)
+
#Custom Filter Button
img2 = gtk.Image()
Follow ups