From 142bc8fdf8c1734995ac2b028d9d451048d4ea9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 21 Mar 2011 17:57:09 +0100 Subject: [PATCH] Fix cleaning of removed/deleted records introduced with changeset 9ece47c60d69 It is not possible to use set with Record as we can not provide a constant hash because the id can change --- tryton/gui/window/view_form/model/group.py | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index 5454e608cf..79ace09a2d 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -155,25 +155,16 @@ class Group(SignalEvent, list): return list({}.fromkeys(res)) def load(self, ids, display=True, modified=False): - if not ids: - return True - # Work with sets to compute intersection and set difference - set_records = set(self.get(x) for x in ids) - for record in set_records & set(self.record_removed): - self.record_removed.remove(record) - for record in set_records & set(self.record_deleted): - self.record_deleted.remove(record) - - set_records -= set(x for x in self) - # return on the list form in order to preserver ordering - ids = [x for x in ids if self.get(x) in set_records] if not ids: return True if len(ids) > 1: self.lock_signal = True + new_records = [] for id in ids: + if self.get(id): + continue new_record = Record(self.model_name, id, self.window, parent=self.parent, parent_name=self.parent_name, group=self) self.append(new_record) @@ -182,6 +173,15 @@ class Group(SignalEvent, list): self._record_changed) new_record.signal_connect(self, 'record-modified', self._record_modified) + + # Remove previously removed or deleted records + for record in self.record_removed[:]: + if record.id in ids: + self.record_removed.remove(record) + for record in self.record_deleted[:]: + if record.id in ids: + self.record_deleted.remove(record) + if self.lock_signal: self.lock_signal = False self.signal('group-cleared')