changeset 90eb14f40b6e in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset;node=90eb14f40b6e
description:
Rely on editing property of renderer to set value
In Python3, the 'remove-widget' is not trigger when the selected row is
changed. This makes the attribute editabletree_entry not reliable.
Instead we
should use the editing property of the renderer and manage the editable
reference on the widget (which is a cleaner separation concept). This
allows
also to remove duplicate code in set_value by calling on_editing_done.
issue7936
review46711002
diffstat:
tryton/gui/window/view_form/view/list_gtk/editabletree.py | 25 ++------------
tryton/gui/window/view_form/view/list_gtk/widget.py | 5 +++
2 files changed, 9 insertions(+), 21 deletions(-)
diffs (66 lines):
diff -r 33bddb1a5ad0 -r 90eb14f40b6e
tryton/gui/window/view_form/view/list_gtk/editabletree.py
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py Wed Jan 30
10:04:52 2019 +0100
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.py Wed Jan 30
10:10:00 2019 +0100
@@ -115,21 +115,12 @@
def set_value(self):
path, column = self.get_cursor()
- model = self.get_model()
if not path or not column or not column.name:
return True
- record = model.get_value(model.get_iter(path), 0)
- field = record[column.name]
- if hasattr(field, 'editabletree_entry'):
- entry = field.editabletree_entry
- if isinstance(entry, (Date, Time)):
- entry.activate()
- txt = entry.props.value
- elif isinstance(entry, gtk.Entry):
- txt = entry.get_text()
- else:
- txt = entry.get_active_text()
- self.on_quit_cell(record, column, txt)
+ for renderer in column.get_cell_renderers():
+ if renderer.props.editing:
+ widget = self.view.get_column_widget(column)
+ self.on_editing_done(widget.editable)
return True
def on_keypressed(self, entry, event):
@@ -235,14 +226,6 @@
field = record[column.name]
if isinstance(entry, gtk.Entry):
entry.set_max_length(int(field.attrs.get('size', 0)))
- # store in the record the entry widget to get the value in
- # set_value
- field.editabletree_entry = entry
-
- def remove_widget(widget):
- if hasattr(field, 'editabletree_entry'):
- del field.editabletree_entry
- entry.connect('remove-widget', remove_widget)
record.modified_fields.setdefault(column.name)
return False
diff -r 33bddb1a5ad0 -r 90eb14f40b6e
tryton/gui/window/view_form/view/list_gtk/widget.py
--- a/tryton/gui/window/view_form/view/list_gtk/widget.py Wed Jan 30
10:04:52 2019 +0100
+++ b/tryton/gui/window/view_form/view/list_gtk/widget.py Wed Jan 30
10:10:00 2019 +0100
@@ -170,6 +170,7 @@
class GenericText(Cell):
align = 0
+ editable = None
def __init__(self, view, attrs, renderer=None):
super(GenericText, self).__init__()
@@ -259,6 +260,10 @@
callback()
def editing_started(self, cell, editable, path):
+ def remove(editable):
+ self.editable = None
+ self.editable = editable
+ editable.connect('remove-widget', remove)
return False
def _get_record_field(self, path):