Add creatable attribute on tree and form views

issue10929
review370201002
This commit is contained in:
Cédric Krier committed 2021-12-16 22:26:04 +01:00
1 parent 216bc2755f
commit e30176822f
10 files changed
+30 -16

No files matched your search

+2
View File
@@ -1,3 +1,5 @@
* Manage creatable attribute of view
Version 6.2.0 - 2021-11-01
* Bug fixes (see mercurial logs for details)
* Support grouping attribute
+15 -14
View File
@@ -509,7 +509,8 @@ class Screen(SignalEvent):
def number_of_views(self):
return len(self.views) + len(self.view_to_load)
def switch_view(self, view_type=None, view_id=None, display=True):
def switch_view(
self, view_type=None, view_id=None, creatable=None, display=True):
if view_id is not None:
view_id = int(view_id)
if self.current_view:
@@ -528,13 +529,15 @@ class Screen(SignalEvent):
def found():
if not self.current_view:
return False
elif not view_type and view_id is None:
return False
elif view_id is not None:
return self.current_view.view_id == view_id
else:
return self.current_view.view_type == view_type
while not found():
result = True
if view_type is not None:
result &= self.current_view.view_type == view_type
if view_id is not None:
result &= self.current_view.view_id == view_id
if creatable is not None:
result &= self.current_view.creatable == creatable
return result
for i in range(len(self.views) + len(self.view_to_load)):
if len(self.view_to_load):
self.load_view_to_load()
self.__current_view = len(self.views) - 1
@@ -546,9 +549,7 @@ class Screen(SignalEvent):
else:
self.__current_view = ((self.__current_view + 1)
% len(self.views))
if not view_type and view_id is None:
break
if view_type and not view_id and not len(self.view_to_load):
if found():
break
self.screen_container.set(self.current_view.widget)
if display:
@@ -616,9 +617,9 @@ class Screen(SignalEvent):
previous_view = self.current_view
if self.current_view.view_type == 'calendar':
selected_date = self.current_view.get_selected_date()
if self.current_view and not self.current_view.editable:
self.switch_view('form', display=False)
if self.current_view.view_type != 'form':
if self.current_view and not self.current_view.creatable:
self.switch_view(creatable=True)
if not self.current_view.creatable:
return None
if self.current_record:
group = self.current_record.group
@@ -16,6 +16,7 @@ class View(object):
view_id = None
modified = None
editable = None
creatable = None
children_field = None
scroll = None
xml_parser = None
@@ -62,6 +62,7 @@ class CalendarXMLViewParser(XMLViewParser):
class ViewCalendar(View):
editable = False
creatable = False
view_type = 'calendar'
xml_parser = CalendarXMLViewParser
+2
View File
@@ -461,6 +461,8 @@ class ViewForm(View):
super().__init__(view_id, screen, xml)
self.creatable = bool(int(self.attributes.get('creatable', 1)))
def get_fields(self):
return list(self.widgets.keys())
@@ -371,7 +371,7 @@ class One2Many(Widget):
self.screen.group.set_sequence(
field=sequence, position=self.screen.new_position)
if self.screen.current_view.editable:
if self.screen.current_view.creatable:
self.screen.new()
self.screen.current_view.widget.set_sensitive(True)
update_sequence()
@@ -67,6 +67,7 @@ class GraphXMLViewParser(XMLViewParser):
class ViewGraph(View):
view_type = 'graph'
editable = False
creatable = False
xml_parser = GraphXMLViewParser
def __init__(self, view_id, screen, xml):
+5
View File
@@ -439,6 +439,7 @@ class ViewTree(View):
self.sum_box = Gtk.HBox()
self.treeview = None
self._editable = bool(int(xml.getAttribute('editable') or 0))
self._creatable = bool(int(xml.getAttribute('creatable') or 1))
if self._editable:
self.treeview = EditableTreeView(self)
grid_lines = Gtk.TreeViewGridLines.BOTH
@@ -630,6 +631,10 @@ class ViewTree(View):
def editable(self):
return self._editable and not self.screen.readonly
@property
def creatable(self):
return self.editable and self._creatable
def get_fields(self, visible_only=False):
return [col.name for col in self.treeview.get_columns()
if col.name and (not visible_only or col.get_visible())]
@@ -59,6 +59,7 @@ class ViewListForm(View):
def __init__(self, view_id, screen, xml):
super().__init__(view_id, screen, xml)
self.creatable = bool(int(self.attributes.get('creatable', 1)))
self.view_type = 'list-form'
self.form_xml = xml
@@ -118,7 +118,7 @@ class EditableTreeView(TreeView):
model = self.get_model()
limit = (self.view.screen.size_limit is not None
and (len(model) >= self.view.screen.size_limit >= 0))
if not access['create'] or limit:
if not self.view.creatable or not access['create'] or limit:
return
if self.view.screen.new_position == 0:
method = model.prepend