Do not trigger on change when setting change values
Also unify the keyword argument to trigger modified record. issue11325 review356361002
This commit is contained in:
1 parent
ea7a6beced
commit
d43f4a842e
4 files changed
+29
-31
No files matched your search
@@ -674,19 +674,20 @@ class O2MField(Field):
|
||||
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 @@ class O2MField(Field):
|
||||
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 @@ class O2MField(Field):
|
||||
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', []):
|
||||
|
||||
@@ -308,7 +308,7 @@ class Group(list):
|
||||
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 @@ class Group(list):
|
||||
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 @@ class Group(list):
|
||||
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 @@ class Group(list):
|
||||
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 @@ class Group(list):
|
||||
else:
|
||||
self.current_idx = None
|
||||
|
||||
if signal:
|
||||
if modified:
|
||||
self.record_modified()
|
||||
|
||||
def prev(self):
|
||||
@@ -463,8 +459,8 @@ class Group(list):
|
||||
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 @@ class Group(list):
|
||||
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()
|
||||
|
||||
@@ -141,7 +141,7 @@ class Record:
|
||||
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 @@ class Record:
|
||||
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 @@ class Record:
|
||||
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 @@ class Record:
|
||||
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 @@ class Record:
|
||||
|
||||
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])
|
||||
|
||||
@@ -796,7 +796,8 @@ class Screen:
|
||||
# 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 @@ class Screen:
|
||||
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):
|
||||
|
||||
Reference in new issue
Block a user