From 1571bfabd757fc0a2c65b62c29ad166235d43a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:24:13 +0100 Subject: [PATCH 1/6] Improve size of nested views --- tryton/gui/window/view_form/view/form.py | 13 ++++++++----- .../window/view_form/view/form_gtk/many2many.py | 2 ++ .../window/view_form/view/form_gtk/one2many.py | 2 ++ tryton/gui/window/view_form/view/list.py | 17 +++++++++++++---- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py index 74ccb77a9d..6c89d77d8b 100644 --- a/tryton/gui/window/view_form/view/form.py +++ b/tryton/gui/window/view_form/view/form.py @@ -35,13 +35,16 @@ class ViewForm(ParserView): scroll = gtk.ScrolledWindow() scroll.add(vp) scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.viewport = gtk.Viewport() - self.viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN) - self.viewport.add(scroll) + scroll.set_placement(gtk.CORNER_TOP_LEFT) + viewport = gtk.Viewport() + viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN) + viewport.add(scroll) width, height = self.widget.size_request() + if isinstance(self.screen.window, gtk.Dialog): + vbox.set_size_request(width or -1, height or -1) + vbox.pack_start(viewport, expand=True, fill=True) + self.widget = vbox - self.widget.set_size_request(width, height) - self.widget.pack_start(self.viewport, expand=True, fill=True) if toolbar and not CONFIG['client.modepda']: hbox = gtk.HBox(homogeneous=False) diff --git a/tryton/gui/window/view_form/view/form_gtk/many2many.py b/tryton/gui/window/view_form/view/form_gtk/many2many.py index e28dd1581b..12298ae648 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py @@ -64,6 +64,8 @@ class Many2Many(WidgetInterface): view_type=['tree'], views_preload=attrs.get('views', {}), row_activate=self._on_activate) + if not isinstance(self.screen.window, gtk.Dialog): + self.screen.widget.set_size_request(0, 0) self.widget.pack_start(self.screen.widget, expand=True, fill=True) self.screen.widget.connect('key_press_event', self.on_keypress) diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py index 23c03f77fb..1233258257 100644 --- a/tryton/gui/window/view_form/view/form_gtk/one2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py @@ -166,6 +166,8 @@ class One2Many(WidgetInterface): self.screen.signal_connect(self, 'record-message', self._sig_label) menuitem_title.get_child().set_text(attrs.get('string', '')) + if not isinstance(self.screen.window, gtk.Dialog): + self.screen.widget.set_size_request(0, 0) self.widget.pack_start(self.screen.widget, expand=True, fill=True) self.screen.widget.connect('key_press_event', self.on_keypress) diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py index 03b5455a46..c72ac8a057 100644 --- a/tryton/gui/window/view_form/view/list.py +++ b/tryton/gui/window/view_form/view/list.py @@ -150,16 +150,25 @@ class ViewList(ParserView): buttons, toolbar, notebooks, cursor_widget) self.store = None self.view_type = 'tree' - self.widget = gtk.VBox() - self.widget_tree = widget + + vbox = gtk.VBox() scroll = gtk.ScrolledWindow() - scroll.add(self.widget_tree) + scroll.add(self.widget) scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll.set_placement(gtk.CORNER_TOP_LEFT) viewport = gtk.Viewport() viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN) viewport.add(scroll) - self.widget.pack_start(viewport, expand=True, fill=True) + width, height = self.widget.size_request() + self.widget_tree = self.widget + + if isinstance(self.screen.window, gtk.Dialog): + vbox.set_size_request(width or -1, height or -1) + vbox.pack_start(viewport, expand=True, fill=True) + self.widget_tree.screen = screen + + self.widget = vbox self.reload = False self.children = children From 42752f94f51c8c1e39ab50d1ddb3bef0db9cf477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:26:12 +0100 Subject: [PATCH 2/6] Remove "CRITICAL **: pygtk_generic_tree_model_unref_node: assertion `VALID_ITER(iter, tree_model)'" --- tryton/gui/window/view_form/model/group.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index c18cb2a615..82671bdfc5 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -80,9 +80,13 @@ class Group(SignalEvent, list): self.signal('group-list-changed', ('record-removed', idx)) def clear(self): + if not self.lock_signal: + for record in self: + self.signal('group-list-changed', ('record-removed', 0)) del self[:] if not self.lock_signal: self.signal('group-list-changed', ('group-cleared',)) + self.__id2record = {} self.record_removed = [] self.record_deleted = [] From e6eefd3f2ba73b0574d02523704e33b8947eda0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:26:52 +0100 Subject: [PATCH 3/6] Remove "GtkWarning: gtk_misc_set_alignment: assertion `GTK_IS_MISC (misc)' failed" --- tryton/gui/window/tree.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/tryton/gui/window/tree.py b/tryton/gui/window/tree.py index 424c24172b..58851f629d 100644 --- a/tryton/gui/window/tree.py +++ b/tryton/gui/window/tree.py @@ -190,20 +190,8 @@ class Tree(SignalEvent): ids.index(y['id']))) radiotb = None for res in results: - radiotb = gtk.RadioToolButton(group=radiotb) - radiotb.set_label_widget(gtk.Label(res['name'])) - - icon = gtk.Image() - try: - icon.set_from_stock(res[icon_name], - gtk.ICON_SIZE_BUTTON) - except Exception: - pass - - hbox = gtk.HBox(spacing=6) - hbox.pack_start(icon) - hbox.pack_start(gtk.Label(res['name'])) - radiotb.set_icon_widget(hbox) + radiotb = gtk.RadioToolButton(radiotb, res[icon_name]) + radiotb.set_label(res['name']) radiotb.show_all() radiotb.set_data('id', res['id']) radiotb.connect('clicked', self.menu_main_clicked) From f2eb3814659c7287be2005a09982a7916dcba90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:28:56 +0100 Subject: [PATCH 4/6] Add initial value to reduce --- tryton/gui/window/view_form/model/record.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py index b57056457c..26d9944fd7 100644 --- a/tryton/gui/window/view_form/model/record.py +++ b/tryton/gui/window/view_form/model/record.py @@ -44,7 +44,8 @@ class Record(SignalEvent): loading = reduce( lambda x, y: 'eager' if x == y == 'eager' else 'lazy', (field.attrs.get('loading', 'eager') - for field in self.group.fields.itervalues())) + for field in self.group.fields.itervalues()), + []) else: loading = self.group.fields[name].attrs.get('loading', 'eager') if self in self.group and loading == 'eager': From a7d9eb38b2ddc7b062d5de5c55912d239dff0701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:45:31 +0100 Subject: [PATCH 5/6] Remove unused traceback module --- tryton/gui/window/view_form/model/record.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py index 26d9944fd7..b605500948 100644 --- a/tryton/gui/window/view_form/model/record.py +++ b/tryton/gui/window/view_form/model/record.py @@ -39,7 +39,6 @@ class Record(SignalEvent): def __getitem__(self, name): if name not in self._loaded and self.id > 0: ids = [self.id] - import traceback if name == '*': loading = reduce( lambda x, y: 'eager' if x == y == 'eager' else 'lazy', From fbb9a9fa6b0c1c84cf96e49a149d25c8b22f5925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 28 Jan 2011 10:52:53 +0100 Subject: [PATCH 6/6] Destroy the dialog after reading value of the widget for issue1837 And call present on the parent window --- tryton/gui/window/form.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py index a635a50bec..0ed7ffee24 100644 --- a/tryton/gui/window/form.py +++ b/tryton/gui/window/form.py @@ -192,9 +192,10 @@ class Form(SignalEvent): win.show_all() response = win.run() - win.destroy() if response == gtk.RESPONSE_OK: self.screen.display(locale.atoi(entry.get_text()), set_cursor=True) + win.destroy() + self.window.present() def destroy(self): self.screen.signal_unconnect(self)