Reviewers: ,
Please review this at http://codereview.tryton.org/38007/
Affected files:
M tryton/gui/window/view_form/view/form_gtk/many2many.py
Index: tryton/gui/window/view_form/view/form_gtk/many2many.py
===================================================================
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py
@@ -20,48 +20,60 @@
attrs=attrs)
self.widget = gtk.VBox(homogeneous=False, spacing=5)
+ self._readonly = True
- hbox = gtk.HBox(homogeneous=False, spacing=3)
+ hbox = gtk.HBox(homogeneous=False, spacing=0)
+ hbox.set_border_width(2)
+
+ label = gtk.Label(attrs.get('string', ''))
+ label.set_alignment(0.0, 0.5)
+ hbox.pack_start(label, expand=True, fill=True)
+
+ hbox.pack_start(gtk.VSeparator(), expand=False, fill=True)
+
+ tooltips = common.Tooltips()
+
self.wid_text = gtk.Entry()
self.wid_text.set_property('width_chars', 13)
self.wid_text.connect('activate', self._sig_activate)
hbox.pack_start(self.wid_text, expand=True, fill=True)
- hbox.pack_start(gtk.VSeparator(), padding=2, expand=False,
fill=False)
+ self.but_add = gtk.Button()
+ tooltips.set_tip(self.but_add, _('Add'))
+ self.but_add.connect('clicked', self._sig_add)
+ img_add = gtk.Image()
+ img_add.set_from_stock('tryton-list-add',
+ gtk.ICON_SIZE_SMALL_TOOLBAR)
+ img_add.set_alignment(0.5, 0.5)
+ self.but_add.add(img_add)
+ self.but_add.set_relief(gtk.RELIEF_NONE)
+ hbox.pack_start(self.but_add, expand=False, fill=False)
- self.wid_but_add = gtk.Button()
- hbox_add = gtk.HBox()
- img_add = gtk.Image()
- img_add.set_from_stock('tryton-list-add', gtk.ICON_SIZE_BUTTON)
- hbox_add.pack_start(img_add)
- label_add = gtk.Label(_('Add'))
- hbox_add.pack_start(label_add)
- self.wid_but_add.add(hbox_add)
- self.wid_but_add.set_relief(gtk.RELIEF_HALF)
- self.wid_but_add.set_focus_on_click(True)
- self.wid_but_add.connect('clicked', self._sig_add)
- hbox.pack_start(self.wid_but_add, padding=3, expand=False,
fill=False)
- self.wid_but_remove = gtk.Button()
- hbox_remove = gtk.HBox()
+ self.but_remove = gtk.Button()
+ tooltips.set_tip(self.but_remove, _('Remove'))
+ self.but_remove.connect('clicked', self._sig_remove)
img_remove = gtk.Image()
- img_remove.set_from_stock('tryton-list-remove',
gtk.ICON_SIZE_BUTTON)
- hbox_remove.pack_start(img_remove)
- label_remove = gtk.Label(_('Remove'))
- hbox_remove.pack_start(label_remove)
- self.wid_but_remove.add(hbox_remove)
- self.wid_but_remove.set_relief(gtk.RELIEF_HALF)
- self.wid_but_remove.set_focus_on_click(True)
- self.wid_but_remove.connect('clicked', self._sig_remove)
- hbox.pack_start(self.wid_but_remove, expand=False, fill=False)
-
- self.widget.pack_start(hbox, expand=False, fill=False)
+ img_remove.set_from_stock('tryton-list-remove',
+ gtk.ICON_SIZE_SMALL_TOOLBAR)
+ img_remove.set_alignment(0.5, 0.5)
+ self.but_remove.add(img_remove)
+ self.but_remove.set_relief(gtk.RELIEF_NONE)
+ hbox.pack_start(self.but_remove, expand=False, fill=False)
hbox.set_focus_chain([self.wid_text])
+ tooltips.enable()
+
+ frame = gtk.Frame()
+ frame.add(hbox)
+ frame.set_shadow_type(gtk.SHADOW_OUT)
+ self.widget.pack_start(frame, expand=False, fill=True)
+
self.screen = Screen(attrs['relation'], self.window,
mode=['tree'], views_preload=attrs.get('views', {}),
row_activate=self._on_activate)
+ self.screen.signal_connect(self, 'record-message', self._sig_label)
if not isinstance(self.screen.window, gtk.Dialog):
self.screen.widget.set_size_request(0, 0)
@@ -154,11 +166,17 @@
win.destroy()
def _readonly_set(self, value):
- super(Many2Many, self)._readonly_set(value)
+ self._readonly = value
self.wid_text.set_editable(not value)
self.wid_text.set_sensitive(not value)
- self.wid_but_remove.set_sensitive(not value)
- self.wid_but_add.set_sensitive(not value)
+ self.but_remove.set_sensitive(not value)
+ self.but_add.set_sensitive(not value)
+
+ def _sig_label(self, screen, signal_data):
+ if signal_data[0] >= 1:
+ self.but_remove.set_sensitive(not self._readonly)
+ else:
+ self.but_remove.set_sensitive(False)
def display(self, record, field):
super(Many2Many, self).display(record, field)
--
[email protected] mailing list