Manage create/delete field access

review389003
This commit is contained in:
Cédric Krier committed 2012-06-28 14:49:00 +02:00
1 parent 802b7786f4
commit 3ea38bbc2b
6 files changed
+33 -18

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
* Manage create/delete field access
* Add dynamic size limit on the One2Many, Many2Many and Char
* Search only on fields in XML view
* Cache action keyword
@@ -150,7 +150,8 @@ class Many2Many(WidgetInterface):
WinSearch(self.attrs['relation'], callback, sel_multi=True,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
views_preload=self.attrs.get('views', {}),
new=self.attrs.get('create', True))
else:
callback([(i, None) for i in ids])
@@ -76,7 +76,8 @@ class Many2One(WidgetInterface):
def _readonly_set(self, value):
self._readonly = value
self.wid_text.set_editable(not value)
self.but_new.set_sensitive(not value)
self.but_new.set_sensitive(not value
and self.attrs.get('create', True))
if value:
self.widget.set_focus_chain([])
else:
@@ -160,7 +161,8 @@ class Many2One(WidgetInterface):
WinSearch(model, callback, sel_multi=False,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
views_preload=self.attrs.get('views', {}),
new=self.but_new.get_property('sensitive'))
return
self.focus_out = True
self.display(self.record, self.field)
@@ -249,7 +251,8 @@ class Many2One(WidgetInterface):
WinSearch(model, callback, sel_multi=False,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
views_preload=self.attrs.get('views', {}),
new=self.but_new.get_property('sensitive'))
return
self.focus_out = True
self.display(self.record, self.field)
@@ -258,10 +261,13 @@ class Many2One(WidgetInterface):
def sig_key_press(self, widget, event, *args):
editable = self.wid_text.get_editable()
if event.keyval == gtk.keysyms.F3 and editable:
if (event.keyval == gtk.keysyms.F3
and editable
and self.but_new.get_property('sensitive')):
self.sig_new(widget, event)
return True
elif event.keyval == gtk.keysyms.F2:
elif (event.keyval == gtk.keysyms.F2
and self.but_open.get_property('sensitive')):
self.sig_edit(widget)
return True
elif (event.keyval in (gtk.keysyms.Tab, gtk.keysyms.Return)
@@ -297,7 +303,7 @@ class Many2One(WidgetInterface):
model = self.get_model()
if model:
access = common.MODELACCESS[model]
if not access['create']:
if not access['create'] or not self.attrs.get('create', True):
self.but_new.set_sensitive(False)
if not access['read']:
self.but_open.set_sensitive(False)
@@ -187,8 +187,9 @@ class One2Many(WidgetInterface):
and widget == self.screen.widget:
self._sig_edit(widget)
return False
if event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete) \
and widget == self.screen.widget:
if (event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete)
and widget == self.screen.widget
and self.but_del.get_property('sensitive')):
self._sig_remove(widget)
return False
if event.keyval == gtk.keysyms.Insert and widget == self.screen.widget:
@@ -220,8 +221,10 @@ class One2Many(WidgetInterface):
def _readonly_set(self, value):
self._readonly = value
self.but_new.set_sensitive(not value)
self.but_del.set_sensitive(not value)
self.but_new.set_sensitive(not value
and self.attrs.get('create', True))
self.but_del.set_sensitive(not value
and self.attrs.get('delete', True))
self.but_undel.set_sensitive(not value)
if self.attrs.get('add_remove'):
self.wid_text.set_sensitive(not value)
@@ -351,7 +354,8 @@ class One2Many(WidgetInterface):
WinSearch(self.attrs['relation'], callback, sel_multi=True,
ids=ids, context=context, domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}))
views_preload=self.attrs.get('views', {}),
new=self.but_new.get_property('sensitive'))
else:
callback([(i, None) for i in ids])
@@ -369,7 +373,8 @@ class One2Many(WidgetInterface):
if signal_data[0] >= 1:
name = str(signal_data[0])
self.but_open.set_sensitive(True)
self.but_del.set_sensitive(not self._readonly)
self.but_del.set_sensitive(not self._readonly
and self.attrs.get('delete', True))
if self.attrs.get('add_remove'):
self.but_remove.set_sensitive(not self._readonly)
self.but_add.set_sensitive(not self._readonly
@@ -401,7 +406,7 @@ class One2Many(WidgetInterface):
super(One2Many, self).display(record, field)
access = common.MODELACCESS[self.screen.model_name]
if not access['create']:
if not access['create'] or not self.attrs.get('create', True):
self.but_new.set_sensitive(False)
if not access['write'] or not access['read']:
if hasattr(self, 'but_add'):
@@ -410,7 +415,7 @@ class One2Many(WidgetInterface):
self.but_remove.set_sensitive(False)
if not access['read']:
self.but_open.set_sensitive(False)
if not access['delete']:
if not access['delete'] or not self.attrs.get('delete', True):
self.but_del.set_sensitive(False)
if field is None:
@@ -439,7 +439,7 @@ class ParserForm(ParserInterface):
for attr_name in ('relation', 'domain', 'selection',
'relation_field', 'string', 'views', 'invisible',
'add_remove', 'sort', 'context', 'size', 'filename',
'autocomplete', 'translate'):
'autocomplete', 'translate', 'create', 'delete'):
if attr_name in fields[name].attrs and \
not attr_name in attrs:
attrs[attr_name] = fields[name].attrs[attr_name]
+4 -2
View File
@@ -14,7 +14,7 @@ _ = gettext.gettext
class WinSearch(NoModal):
def __init__(self, model, callback, sel_multi=True, ids=None, context=None,
domain=None, view_ids=None, views_preload=None):
domain=None, view_ids=None, views_preload=None, new=True):
NoModal.__init__(self)
if views_preload is None:
views_preload = {}
@@ -39,7 +39,9 @@ class WinSearch(NoModal):
self.but_ok = self.win.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
self.but_ok.add_accelerator('clicked', self.accel_group,
gtk.keysyms.Return, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.but_new = self.win.add_button(gtk.STOCK_NEW, gtk.RESPONSE_ACCEPT)
if new and common.MODELACCESS[model]['create']:
self.but_new = self.win.add_button(gtk.STOCK_NEW,
gtk.RESPONSE_ACCEPT)
hbox = gtk.HBox()
hbox.show()