diff --git a/CHANGELOG b/CHANGELOG index 7d7a82ae13..7973bea351 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add icons on Many2One in editable tree * Use translated values when exporting Reference and Selection fields Version 4.6.0 - 2017-10-30 diff --git a/tryton/gui/window/view_form/view/list_gtk/widget.py b/tryton/gui/window/view_form/view/list_gtk/widget.py index 4df148f8fd..88548938b2 100644 --- a/tryton/gui/window/view_form/view/list_gtk/widget.py +++ b/tryton/gui/window/view_form/view/list_gtk/widget.py @@ -570,6 +570,40 @@ class M2O(GenericText): else: win.show() + def editing_started(self, cell, editable, path): + super(M2O, self).editing_started(cell, editable, path) + record, field = self._get_record_field(path) + + def changed(editable): + if field.get(record): + stock1, tooltip1 = 'tryton-open', _("Open the record ") + stock2, tooltip2 = 'tryton-clear', _("Clear the record ") + else: + stock1, tooltip1 = None, '' + stock2, tooltip2 = 'tryton-find', _("Search a record ") + for pos, stock, tooltip in [ + (gtk.ENTRY_ICON_PRIMARY, stock1, tooltip1), + (gtk.ENTRY_ICON_SECONDARY, stock2, tooltip2)]: + editable.set_icon_from_stock(pos, stock) + editable.set_icon_tooltip_text(pos, tooltip) + + def icon_press(editable, icon_pos, event): + value = field.get(record) + if icon_pos == gtk.ENTRY_ICON_SECONDARY and value: + field.set_client(record, (None, '')) + editable.set_text('') + elif value: + self.open_remote(record, create=False, changed=False) + else: + self.open_remote( + record, create=False, changed=True, + text=editable.get_text()) + + editable.connect('icon-press', icon_press) + editable.connect('changed', changed) + changed(editable) + return False + def open_remote(self, record, create=True, changed=False, text=None, callback=None): field = record.group.fields[self.attrs['name']]