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):

Reply via email to