changeset a518b393ae7a in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset&node=a518b393ae7a
description:
Support create/delete attribute in view
issue10840
review377341002
diffstat:
tryton/gui/window/view_form/view/form_gtk/dictionary.py | 2 +-
tryton/gui/window/view_form/view/form_gtk/many2many.py | 21 +++++-
tryton/gui/window/view_form/view/form_gtk/many2one.py | 5 +-
tryton/gui/window/view_form/view/form_gtk/one2many.py | 59 ++++++++++------
tryton/gui/window/view_form/view/list_gtk/widget.py | 7 +-
5 files changed, 63 insertions(+), 31 deletions(-)
diffs (246 lines):
diff -r 81f7ed3823ca -r a518b393ae7a
tryton/gui/window/view_form/view/form_gtk/dictionary.py
--- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py Fri Oct 08
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py Mon Oct 11
22:53:02 2021 +0200
@@ -517,7 +517,7 @@
def _set_button_sensitive(self):
self.but_add.set_sensitive(bool(
not self._readonly
- and self.attrs.get('create', True)))
+ and int(self.attrs.get('create', 1))))
for button in self.buttons.values():
button.set_sensitive(bool(
not self._readonly
diff -r 81f7ed3823ca -r a518b393ae7a
tryton/gui/window/view_form/view/form_gtk/many2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py Fri Oct 08
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py Mon Oct 11
22:53:02 2021 +0200
@@ -52,8 +52,8 @@
if int(self.attrs.get('completion', 1)):
self.wid_completion = get_completion(
- create=self.attrs.get('create', True)
- and common.MODELACCESS[self.attrs['relation']]['create'])
+ search=self.read_access,
+ create=self.create_access)
self.wid_completion.connect('match-selected',
self._completion_match_selected)
self.wid_completion.connect('action-activated',
@@ -135,6 +135,21 @@
self.wid_text.disconnect_by_func(self._focus_out)
self.screen.destroy()
+ def get_access(self, type_):
+ model = self.attrs['relation']
+ if model:
+ return common.MODELACCESS[model][type_]
+ else:
+ return True
+
+ @property
+ def read_access(self):
+ return self.get_access('read')
+
+ @property
+ def create_access(self):
+ return int(self.attrs.get('create', 1)) and self.get_access('create')
+
def _sig_add(self, *args):
if not self.focus_out:
return
@@ -160,7 +175,7 @@
context=context, domain=domain, order=order,
view_ids=self.attrs.get('view_ids', '').split(','),
views_preload=self.attrs.get('views', {}),
- new=self.attrs.get('create', True),
+ new=self.create_access,
title=self.attrs.get('string'))
win.screen.search_filter(quote(value))
if len(win.screen.group) == 1:
diff -r 81f7ed3823ca -r a518b393ae7a
tryton/gui/window/view_form/view/form_gtk/many2one.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py Fri Oct 08
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py Mon Oct 11
22:53:02 2021 +0200
@@ -74,7 +74,7 @@
@property
def create_access(self):
- return self.attrs.get('create', True) and self.get_access('create')
+ return int(self.attrs.get('create', 1)) and self.get_access('create')
@property
def modified(self):
@@ -163,8 +163,7 @@
breadcrumb=breadcrumb)
def sig_new(self, *args):
- model = self.get_model()
- if not model or not common.MODELACCESS[model]['create']:
+ if not self.create_access:
return
self.focus_out = False
screen = self.get_screen(search=True)
diff -r 81f7ed3823ca -r a518b393ae7a
tryton/gui/window/view_form/view/form_gtk/one2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py Fri Oct 08
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py Mon Oct 11
22:53:02 2021 +0200
@@ -85,10 +85,9 @@
hbox.pack_start(self.wid_text, expand=True, fill=True, padding=0)
if int(self.attrs.get('completion', 1)):
- access = common.MODELACCESS[attrs['relation']]
self.wid_completion = get_completion(
- search=access['read'] and access['write'],
- create=attrs.get('create', True) and access['create'])
+ search=self.read_access,
+ create=self.create_access)
self.wid_completion.connect('match-selected',
self._completion_match_selected)
self.wid_completion.connect('action-activated',
@@ -183,6 +182,29 @@
but_switch.props.sensitive = self.screen.number_of_views > 1
+ def get_access(self, type_):
+ model = self.attrs['relation']
+ if model:
+ return common.MODELACCESS[model][type_]
+ else:
+ return True
+
+ @property
+ def read_access(self):
+ return self.get_access('read')
+
+ @property
+ def create_access(self):
+ return int(self.attrs.get('create', 1)) and self.get_access('create')
+
+ @property
+ def write_access(self):
+ return self.get_access('write')
+
+ @property
+ def delete_access(self):
+ return int(self.attrs.get('delete', 1)) and self.get_access('delete')
+
def on_keypress(self, widget, event):
if ((event.keyval == Gdk.KEY_F3)
and self.but_new.get_property('sensitive')):
@@ -259,7 +281,6 @@
self.title, self._readonly, self._required)
def _set_button_sensitive(self):
- access = common.MODELACCESS[self.screen.model_name]
if self.record and self.field:
field_size = self.record.expr_eval(self.attrs.get('size'))
o2m_size = len(self.field.get_eval(self.record))
@@ -277,22 +298,20 @@
self.but_new.set_sensitive(bool(
not self._readonly
- and self.attrs.get('create', True)
- and not size_limit
- and access['create']))
+ and self.create_access
+ and not size_limit))
self.but_del.set_sensitive(bool(
not self._readonly
- and self.attrs.get('delete', True)
+ and self.delete_access
and deletable
- and self._position
- and access['delete']))
+ and self._position))
self.but_undel.set_sensitive(bool(
not self._readonly
and not size_limit
and self._position))
self.but_open.set_sensitive(bool(
self._position
- and access['read']))
+ and self.read_access))
self.but_next.set_sensitive(bool(
self._position
and not last))
@@ -303,13 +322,13 @@
self.but_add.set_sensitive(bool(
not self._readonly
and not size_limit
- and access['write']
- and access['read']))
+ and self.write_access
+ and self.read_access))
self.but_remove.set_sensitive(bool(
not self._readonly
and self._position
- and access['write']
- and access['read']))
+ and self.write_access
+ and self.read_access))
self.wid_text.set_sensitive(self.but_add.get_sensitive())
self.wid_text.set_editable(self.but_add.get_sensitive())
@@ -333,7 +352,7 @@
return sequence
def _sig_new(self, *args):
- if not common.MODELACCESS[self.screen.model_name]['create']:
+ if not self.create_access:
return
if not self._validate():
return
@@ -434,14 +453,13 @@
self.screen.display_prev()
def _sig_remove(self, widget, remove=False):
- access = common.MODELACCESS[self.screen.model_name]
writable = not self.screen.readonly
deletable = self.screen.deletable
if remove:
- if not access['write'] or not writable or not access['read']:
+ if not self.write_access or not writable or not self.read_access:
return
else:
- if not access['delete'] or not deletable:
+ if not self.delete_access or not deletable:
return
self.screen.remove(remove=remove)
@@ -451,8 +469,7 @@
def _sig_add(self, *args):
if not self.focus_out:
return
- access = common.MODELACCESS[self.screen.model_name]
- if not access['write'] or not access['read']:
+ if not self.write_access or not self.read_access:
return
self.view.set_value()
domain = self.field.domain_get(self.record)
diff -r 81f7ed3823ca -r a518b393ae7a
tryton/gui/window/view_form/view/list_gtk/widget.py
--- a/tryton/gui/window/view_form/view/list_gtk/widget.py Fri Oct 08
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/list_gtk/widget.py Mon Oct 11
22:53:02 2021 +0200
@@ -835,7 +835,8 @@
access = common.MODELACCESS[model]
if (create
- and not (self.attrs.get('create', True) and access['create'])):
+ and not (int(self.attrs.get('create', 1))
+ and access['create'])):
return
elif not access['read']:
return
@@ -877,7 +878,7 @@
context = field.get_search_context(record)
order = field.get_search_order(record)
access = common.MODELACCESS[model]
- create_access = self.attrs.get('create', True) and access['create']
+ create_access = int(self.attrs.get('create', 1)) and access['create']
def search_callback(found):
value = None
@@ -903,7 +904,7 @@
access = common.MODELACCESS[model]
completion = get_completion(
search=access['read'],
- create=self.attrs.get('create', True) and access['create'])
+ create=int(self.attrs.get('create', 1)) and access['create'])
completion.connect('match-selected', self._completion_match_selected,
record, field, model)
completion.connect('action-activated',