Allow to have many times the same field in a form view
This commit is contained in:
1 parent
e776a92bc3
commit
17ae9d30d8
2 files changed
+58
-34
No files matched your search
@@ -65,8 +65,9 @@ class ViewForm(ParserView):
|
||||
for button in self.buttons:
|
||||
button.form = self
|
||||
|
||||
self.widgets = dict([(name, ViewWidget(self, widget, name))
|
||||
for name, widget in children.items()])
|
||||
self.widgets = dict([(name, [ViewWidget(self, widget, name)
|
||||
for widget in widgets])
|
||||
for name, widgets in children.items()])
|
||||
|
||||
vbox = gtk.VBox()
|
||||
vp = gtk.Viewport()
|
||||
@@ -151,12 +152,13 @@ class ViewForm(ParserView):
|
||||
return value
|
||||
|
||||
def __getitem__(self, name):
|
||||
return self.widgets[name]
|
||||
return self.widgets[name][0]
|
||||
|
||||
def destroy(self):
|
||||
for widget in self.widgets.keys():
|
||||
self.widgets[widget].widget.destroy()
|
||||
del self.widgets[widget]
|
||||
for widget_name in self.widgets.keys():
|
||||
for widget in self.widgets[widget_name]:
|
||||
widget.widget.destroy()
|
||||
del self.widgets[widget_name]
|
||||
self.widget.destroy()
|
||||
del self.widget
|
||||
del self.widgets
|
||||
@@ -169,8 +171,9 @@ class ViewForm(ParserView):
|
||||
def set_value(self):
|
||||
model = self.screen.current_model
|
||||
if model:
|
||||
for widget in self.widgets.values():
|
||||
widget.set_value(model)
|
||||
for widgets in self.widgets.values():
|
||||
for widget in widgets:
|
||||
widget.set_value(model)
|
||||
|
||||
def sel_ids_get(self):
|
||||
if self.screen.current_model:
|
||||
@@ -184,14 +187,16 @@ class ViewForm(ParserView):
|
||||
|
||||
def reset(self):
|
||||
model = self.screen.current_model
|
||||
for name, widget in self.widgets.items():
|
||||
widget.reset(model)
|
||||
for name, widgets in self.widgets.items():
|
||||
for widget in widgets:
|
||||
widget.reset(model)
|
||||
|
||||
def signal_record_changed(self, *args):
|
||||
for widget in self.widgets.values():
|
||||
if hasattr(widget.widget, 'screen'):
|
||||
for view in widget.widget.screen.views:
|
||||
view.signal_record_changed(*args)
|
||||
for widgets in self.widgets.values():
|
||||
for widget in widgets:
|
||||
if hasattr(widget.widget, 'screen'):
|
||||
for view in widget.widget.screen.views:
|
||||
view.signal_record_changed(*args)
|
||||
|
||||
def display(self):
|
||||
model = self.screen.current_model
|
||||
@@ -199,8 +204,9 @@ class ViewForm(ParserView):
|
||||
# Force to set mfields in model
|
||||
for field in model.mgroup.fields:
|
||||
model[field].get(model, check_load=False)
|
||||
for widget in self.widgets.values():
|
||||
widget.display(model)
|
||||
for widgets in self.widgets.values():
|
||||
for widget in widgets:
|
||||
widget.display(model)
|
||||
for button in self.buttons:
|
||||
button.state_set(model)
|
||||
return True
|
||||
@@ -209,20 +215,23 @@ class ViewForm(ParserView):
|
||||
for notebook in self.notebooks:
|
||||
notebook.set_current_page(0)
|
||||
if self.cursor_widget in self.widgets:
|
||||
self.widgets[self.cursor_widget].widget.grab_focus()
|
||||
self.widgets[self.cursor_widget][0].widget.grab_focus()
|
||||
model = self.screen.current_model
|
||||
position = len(self.widgets)
|
||||
position = 0
|
||||
for widgets in self.widgets:
|
||||
position += len(widgets)
|
||||
focus_widget = None
|
||||
if model:
|
||||
for widget in self.widgets.values():
|
||||
modelfield = model.mgroup.mfields.get(widget.widget_name, None)
|
||||
if not modelfield:
|
||||
continue
|
||||
if not modelfield.get_state_attrs(model).get('valid', True):
|
||||
if widget.widget.position > position:
|
||||
for widgets in self.widgets.values():
|
||||
for widget in widgets:
|
||||
modelfield = model.mgroup.mfields.get(widget.widget_name, None)
|
||||
if not modelfield:
|
||||
continue
|
||||
position = widget.widget.position
|
||||
focus_widget = widget
|
||||
if not modelfield.get_state_attrs(model).get('valid', True):
|
||||
if widget.widget.position > position:
|
||||
continue
|
||||
position = widget.widget.position
|
||||
focus_widget = widget
|
||||
if focus_widget:
|
||||
for notebook in self.notebooks:
|
||||
for i in range(notebook.get_n_pages()):
|
||||
|
||||
@@ -431,7 +431,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
|
||||
elif node.localName == 'page':
|
||||
if attrs and 'angle' in attrs:
|
||||
@@ -447,7 +449,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
notebook.append_page(widget, label)
|
||||
|
||||
elif node.localName == 'field':
|
||||
@@ -473,7 +477,8 @@ class ParserForm(ParserInterface):
|
||||
model, fields[name])
|
||||
self.widget_id += 1
|
||||
widget_act.position = self.widget_id
|
||||
dict_widget[name] = widget_act
|
||||
dict_widget.setdefault(name, [])
|
||||
dict_widget[name].append(widget_act)
|
||||
size = int(attrs.get('colspan', WIDGETS_TYPE[ftype][1]))
|
||||
expand = WIDGETS_TYPE[ftype][2]
|
||||
if 'expand' in attrs:
|
||||
@@ -503,7 +508,9 @@ class ParserForm(ParserInterface):
|
||||
if not cursor_widget:
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
button_list += buttons
|
||||
text = ''
|
||||
if 'name' in attrs and attrs['name'] in fields:
|
||||
@@ -534,7 +541,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
if 'position' in attrs:
|
||||
hpaned.set_position(int(attrs['position']))
|
||||
elif node.localName == 'vpaned':
|
||||
@@ -548,7 +557,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
if 'position' in attrs:
|
||||
vpaned.set_position(int(attrs['position']))
|
||||
elif node.localName == 'child1':
|
||||
@@ -559,7 +570,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
paned.pack1(widget, resize=True, shrink=True)
|
||||
elif node.localName == 'child2':
|
||||
widget, widgets, buttons, on_write, notebook_list, cursor_widget2 = \
|
||||
@@ -569,7 +582,9 @@ class ParserForm(ParserInterface):
|
||||
cursor_widget = cursor_widget2
|
||||
notebook_list.extend(notebook_list2)
|
||||
button_list += buttons
|
||||
dict_widget.update(widgets)
|
||||
for widget_name, widgets in widgets.items():
|
||||
dict_widget.setdefault(widget_name, [])
|
||||
dict_widget[widget_name].extend(widgets)
|
||||
paned.pack2(widget, resize=True, shrink=True)
|
||||
for (button, src, name, widget) in container.trans_box:
|
||||
button.connect('clicked', self.translate, model, name,
|
||||
|
||||
Reference in new issue
Block a user