Reviewers: ,
Please review this at http://codereview.tryton.org/164001/
Affected files:
M tryton/gui/window/view_form/view/list_gtk/editabletree.py
M tryton/gui/window/view_form/view/list_gtk/parser.py
Index: tryton/gui/window/view_form/view/list_gtk/editabletree.py
===================================================================
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
@@ -20,7 +20,7 @@
self.editable = position
self.cells = {}
- def on_quit_cell(self, current_record, fieldname, value):
+ def on_quit_cell(self, current_record, fieldname, value,
callback=None):
field = current_record[fieldname]
if hasattr(field, 'editabletree_entry'):
del field.editabletree_entry
@@ -32,7 +32,7 @@
return
try:
- cell.value_from_text(current_record, value)
+ cell.value_from_text(current_record, value, callback=callback)
except parser.UnsettableColumn:
return
@@ -151,9 +151,11 @@
else:
txt = entry.get_active_text()
entry.disconnect(entry.editing_done_id)
- self.on_quit_cell(record, column.name, txt)
- entry.editing_done_id = entry.connect('editing_done',
- self.on_editing_done)
+ def callback():
+ entry.editing_done_id = entry.connect('editing_done',
+ self.on_editing_done)
+ self.set_cursor(path, column, True)
+ self.on_quit_cell(record, column.name, txt, callback=callback)
if event.keyval in self.leaving_record_events:
fields = self.cells.keys()
if not record.validate(fields):
Index: tryton/gui/window/view_form/view/list_gtk/parser.py
===================================================================
--- a/tryton/gui/window/view_form/view/list_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/list_gtk/parser.py
@@ -348,9 +348,11 @@
return ''
return record[self.field_name].get_client(record) or ''
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
field.set_client(record, text)
+ if callback:
+ callback()
class Int(Char):
@@ -359,9 +361,11 @@
attrs=attrs)
self.renderer = CellRendererInteger()
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
field.set_client(record, int(text))
+ if callback:
+ callback()
def get_textual_value(self, record):
return locale.format('%d',
@@ -405,7 +409,7 @@
date = datetime.date(*time.strptime(value, self.server_format)[:3])
return common.datetime_strftime(date, self.display_format)
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
date = False
try:
@@ -414,6 +418,8 @@
except ValueError:
date = False
field.set_client(record, date)
+ if callback:
+ callback()
class Datetime(Date):
@@ -434,7 +440,7 @@
date = common.timezoned_date(date)
return common.datetime_strftime(date, self.display_format)
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
date = False
try:
@@ -445,6 +451,8 @@
except ValueError:
date = False
field.set_client(record, date)
+ if callback:
+ callback()
class Float(Char):
@@ -467,13 +475,15 @@
return locale.format('%.'+str(digit)+'f',
record[self.field_name].get_client(record) or 0.0, True)
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
try:
value = locale.atof(text)
except ValueError:
value = 0.0
field.set_client(record, value)
+ if callback:
+ callback()
class FloatTime(Char):
@@ -489,16 +499,20 @@
val = record[self.field_name].get_client(record)
return common.float_time_to_text(val, self.conv)
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
field.set_client(record, common.text_to_float_time(text,
self.conv))
+ if callback:
+ callback()
class M2O(Char):
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record.group.fields[self.field_name]
if not text and not field.get_state_attrs(
record)['required']:
+ if callback:
+ callback()
return False
relation = record[self.field_name].attrs['relation']
@@ -511,20 +525,23 @@
dom = domain
args = ('model', relation, 'search', dom, 0, None, None,
context)
- def callback(value):
- field.set_client(record, value)
try:
ids = rpc.execute(*args)
except TrytonServerError, exception:
ids = common.process_exception(exception, *args)
if not ids:
- callback('???')
+ field.set_client(record, '???')
+ if callback:
+ callback()
return
if len(ids) != 1:
- self.search_remote(record, relation, ids, domain=domain,
- context=context)
+ if callback:
+ self.search_remote(record, relation, ids, domain=domain,
+ context=context, callback=callback)
return
- callback(ids[0])
+ field.set_client(record, ids[0])
+ if callback:
+ callback()
def open_remote(self, record, create=True, changed=False, text=None,
callback=None):
@@ -617,8 +634,9 @@
return '( ' + str(len(record[self.field_name].\
get_client(record))) + ' )'
- def value_from_text(self, record, text):
- pass
+ def value_from_text(self, record, text, callback=None):
+ if callback:
+ callback()
def open_remote(self, record, create=True, changed=False, text=None,
callback=None):
@@ -646,12 +664,16 @@
return '( ' + str(len(record[self.field_name].\
get_client(record))) + ' )'
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
if not text:
field.set_client(record, [])
+ if callback:
+ callback()
return
if not (text[0] != '('):
+ if callback:
+ callback()
return
relation = field.attrs['relation']
domain = field.domain_get(record)
@@ -669,11 +691,17 @@
ids = common.process_exception(exception, *args)
if ids is False:
field.set_client(record, [])
+ if callback:
+ callback()
return
- def callback(result):
+ if not callback:
+ return
+ def winsearch_callback(result):
field.set_client(record, result or [])
- WinSearch(relation, callback, sel_multi=True, ids=ids,
context=context,
- domain=domain)
+ if callback:
+ callback()
+ WinSearch(relation, winsearch_callback, sel_multi=True, ids=ids,
+ context=context, domain=domain)
return
def open_remote(self, record, create=True, changed=False, text=None,
@@ -750,9 +778,11 @@
value = value[0]
return dict(self.selection).get(value, '')
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
field.set_client(record, self._selection.get(text, False))
+ if callback:
+ callback()
def editing_started(self, cell, editable, path):
store = self.treeview.get_model()
@@ -828,8 +858,9 @@
else:
return name
- def value_from_text(self, record, text):
- pass
+ def value_from_text(self, record, text, callback=None):
+ if callback:
+ callback()
class ProgressBar(object):
@@ -866,9 +897,11 @@
def get_textual_value(self, record):
return record[self.field_name].get_client(record) or ''
- def value_from_text(self, record, text):
+ def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
field.set_client(record, float(text))
+ if callback:
+ callback()
class Button(object):
--
[email protected] mailing list