changeset 4192c90e4750 in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset&node=4192c90e4750
description:
Do not trigger on change when setting change values
Also unify the keyword argument to trigger modified record.
issue11325
review356361002
diffstat:
tryton/gui/window/view_form/model/field.py | 17 +++++++++--------
tryton/gui/window/view_form/model/group.py | 26 +++++++++++---------------
tryton/gui/window/view_form/model/record.py | 12 ++++++------
tryton/gui/window/view_form/screen/screen.py | 5 +++--
4 files changed, 29 insertions(+), 31 deletions(-)
diffs (213 lines):
diff -r 784f15644018 -r 4192c90e4750 tryton/gui/window/view_form/model/field.py
--- a/tryton/gui/window/view_form/model/field.py Mon Apr 25 18:34:07
2022 +0200
+++ b/tryton/gui/window/view_form/model/field.py Mon Apr 25 23:19:07
2022 +0200
@@ -674,19 +674,20 @@
if mode == 'list ids':
records_to_remove = [r for r in group if r.id not in value]
for record_to_remove in records_to_remove:
- group.remove(record_to_remove, remove=True, signal=False)
+ group.remove(record_to_remove, remove=True, modified=False)
group.load(value, modified=modified or default)
else:
for vals in value:
new_record = record.value[self.name].new(default=False)
if default:
# Don't validate as parent will validate
- new_record.set_default(vals, signal=False, validate=False)
- group.add(new_record, signal=False)
+ new_record.set_default(
+ vals, modified=False, validate=False)
+ group.add(new_record, modified=False)
else:
- new_record.set(vals, signal=False)
+ new_record.set(vals, modified=False)
group.append(new_record)
- # Trigger signal only once with the last record
+ # Trigger modified only once
group.record_modified()
def set(self, record, value, _default=False):
@@ -766,14 +767,14 @@
record2 = group.get(record_id)
if record2 is not None:
group.remove(
- record2, remove=False, signal=False,
+ record2, remove=False, modified=False,
force_remove=False)
if value and value.get('remove'):
for record_id in value['remove']:
record2 = group.get(record_id)
if record2 is not None:
group.remove(
- record2, remove=True, signal=False,
+ record2, remove=True, modified=False,
force_remove=False)
if value and (value.get('add') or value.get('update', [])):
@@ -796,7 +797,7 @@
new_record = group.get(id_)
if not new_record:
new_record = group.new(obj_id=id_, default=False)
- group.add(new_record, index, signal=False)
+ group.add(new_record, index, modified=False)
new_record.set_on_change(vals)
for vals in value.get('update', []):
diff -r 784f15644018 -r 4192c90e4750 tryton/gui/window/view_form/model/group.py
--- a/tryton/gui/window/view_form/model/group.py Mon Apr 25 18:34:07
2022 +0200
+++ b/tryton/gui/window/view_form/model/group.py Mon Apr 25 23:19:07
2022 +0200
@@ -308,7 +308,7 @@
def context(self, value):
self._context = value.copy()
- def add(self, record, position=-1, signal=True):
+ def add(self, record, position=-1, modified=True):
if record.group is not self:
record.group = self
if record not in self:
@@ -323,8 +323,8 @@
if record_del.id == record.id:
self.record_deleted.remove(record_del)
self.current_idx = position
- record.set_modified('id')
- if signal:
+ record.modified_fields.setdefault('id')
+ if modified:
# Set parent field to trigger on_change
if self.parent and self.parent_name in self.fields:
field = self.fields[self.parent_name]
@@ -384,16 +384,15 @@
record.default_get(rec_name=rec_name)
return record
- def unremove(self, record, signal=True):
+ def unremove(self, record, modified=True):
if record in self.record_removed:
self.record_removed.remove(record)
if record in self.record_deleted:
self.record_deleted.remove(record)
- if signal:
+ if modified:
self.record_modified()
- def remove(self, record, remove=False, modified=True, signal=True,
- force_remove=False):
+ def remove(self, record, remove=False, modified=True, force_remove=False):
idx = self.index(record)
if record.id >= 0:
if remove:
@@ -406,10 +405,7 @@
self.record_removed.remove(record)
if record not in self.record_deleted:
self.record_deleted.append(record)
- if record.parent:
- record.parent.set_modified('id')
- if modified:
- record.set_modified('id')
+ record.modified_fields.setdefault('id')
if record.id < 0 or force_remove:
self._remove(record)
@@ -418,7 +414,7 @@
else:
self.current_idx = None
- if signal:
+ if modified:
self.record_modified()
def prev(self):
@@ -463,8 +459,8 @@
except RPCException:
return False
for record in new:
- record.set_default(values, signal=False)
- # Trigger signal only once with the last record
+ record.set_default(values, modified=False)
+ # Trigger modified only once with the last record
self.record_modified()
def get(self, id):
@@ -483,7 +479,7 @@
self.parent.group.children.remove(self)
except ValueError:
pass
- # One2Many connect the group to itself to send signals to the parent
+ # One2Many connect the group to itself to send modified to the parent
# but as we are destroying the group, we do not need to notify the
# parent otherwise it will trigger unnecessary display.
self.screens.clear()
diff -r 784f15644018 -r 4192c90e4750 tryton/gui/window/view_form/model/record.py
--- a/tryton/gui/window/view_form/model/record.py Mon Apr 25 18:34:07
2022 +0200
+++ b/tryton/gui/window/view_form/model/record.py Mon Apr 25 23:19:07
2022 +0200
@@ -141,7 +141,7 @@
if record and not record.destroyed and value:
for key in record.modified_fields:
value.pop(key, None)
- record.set(value, signal=False)
+ record.set(value, modified=False)
if name != '*':
return self.group.fields[name]
@@ -424,7 +424,7 @@
else:
return self.group.local_context
- def set_default(self, val, signal=True, validate=True):
+ def set_default(self, val, modified=True, validate=True):
fieldnames = []
for fieldname, value in list(val.items()):
if fieldname in {'_write', '_delete', '_timestamp'}:
@@ -445,10 +445,10 @@
self.on_change_with(fieldnames)
if validate:
self.validate(softvalidation=True)
- if signal:
+ if modified:
self.set_modified()
- def set(self, val, signal=True, validate=True):
+ def set(self, val, modified=True, validate=True):
later = {}
fieldnames = []
for fieldname, value in val.items():
@@ -479,7 +479,7 @@
self._loaded.add(fieldname)
if validate:
self.validate(fieldnames, softvalidation=True)
- if signal:
+ if modified:
self.set_modified()
def set_on_change(self, values):
@@ -505,7 +505,7 @@
def reset(self, value):
self.cancel()
- self.set(value, signal=False)
+ self.set(value, modified=False)
if self.parent:
self.parent.on_change([self.group.child_name])
diff -r 784f15644018 -r 4192c90e4750
tryton/gui/window/view_form/screen/screen.py
--- a/tryton/gui/window/view_form/screen/screen.py Mon Apr 25 18:34:07
2022 +0200
+++ b/tryton/gui/window/view_form/screen/screen.py Mon Apr 25 23:19:07
2022 +0200
@@ -796,7 +796,8 @@
# set current model to None to prevent __select_changed
# to save the previous_model as it can be already deleted.
self.current_record = None
- record.group.remove(record, remove=remove, signal=False,
+ record.group.remove(
+ record, remove=remove, modified=False,
force_remove=force_remove)
# call only once
record.set_modified()
@@ -978,7 +979,7 @@
if set_cursor:
self.set_cursor(reset_view=False)
self.set_tree_state()
- # Force record_message signal
+ # Force record_message
self.current_record = self.current_record
def display_next(self):