Reviewers: ,


Please review this at http://codereview.tryton.org/262001/

Affected files:
  M tryton/gui/window/view_form/model/field.py
  M tryton/gui/window/view_form/model/group.py
  M tryton/gui/window/view_form/model/record.py
  M tryton/gui/window/view_form/screen/screen.py


Index: tryton/gui/window/view_form/model/field.py
===================================================================
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -546,8 +546,8 @@
         group = record.value.get(self.name)
         fields = {}
         if group is not None:
-            group.signal_unconnect(group)
-            fields = group.fields
+            fields = group.fields.copy()
+            group.destroy()
         elif record.model_name == self.attrs['relation']:
             fields = record.group.fields
         parent_name = self.attrs.get('relation_field', '')
@@ -582,8 +582,8 @@
         group = record.value.get(self.name)
         fields = {}
         if group is not None:
-            group.signal_unconnect(group)
-            fields = group.fields
+            fields = group.fields.copy()
+            group.destroy()
         elif record.model_name == self.attrs['relation']:
             fields = record.group.fields
         if fields:
@@ -733,8 +733,8 @@
         group = record.value.get(self.name)
         fields = {}
         if group is not None:
-            group.signal_unconnect(group)
-            fields = group.fields
+            fields = group.fields.copy()
+            group.destroy()
         elif record.model_name == self.attrs['relation']:
             fields = record.group.fields
         parent_name = self.attrs.get('relation_field', '')
Index: tryton/gui/window/view_form/model/group.py
===================================================================
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -109,7 +109,7 @@
         if not self.lock_signal:
             for record in self[:]:
self.signal('group-list-changed', ('record-removed', record))
-                self.pop(0)
+                self.pop(0).destroy()
         if not self.lock_signal:
             self.signal('group-list-changed', ('group-cleared',))
         self.__id2record = {}
@@ -399,14 +399,9 @@
         del self.__id2record[old_id]

     def destroy(self):
+        self.clear()
         super(Group, self).destroy()
         self.parent = None
-        self.fields = {}
-        self.record_deleted, self.record_removed = [], []
-        self.__id2record = None
-        for record in self:
-            record.destroy()
-        self[:] = []

     def get_by_path(self, path):
         'return record by path'
Index: tryton/gui/window/view_form/model/record.py
===================================================================
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -586,11 +586,11 @@
         return self.attachment_count

     def destroy(self):
-        super(Record, self).destroy()
-        self.group = None
         for v in self.value.itervalues():
             if hasattr(v, 'destroy'):
                 v.destroy()
+        super(Record, self).destroy()
+        self.group = None
         self.value = None
         self.next = None
         POOL[self.model_name].remove(self)
Index: tryton/gui/window/view_form/screen/screen.py
===================================================================
--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -238,6 +238,9 @@
         self.display()

     def __get_current_record(self):
+        if (self.__current_record is not None
+                and self.__current_record.group is None):
+            self.__current_record = None
         return self.__current_record

     def __set_current_record(self, record):


--
[email protected] mailing list

Reply via email to