Allow to have many times the same field in a form view

This commit is contained in:
Cédric Krier committed 2008-10-06 17:51:29 +02:00
1 parent e776a92bc3
commit 17ae9d30d8
2 files changed
+58 -34

No files matched your search

+35 -26
View File
@@ -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,