From bcaca20f28ff9873f0ac21dce33455ce4444d9f5 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 17 May 2023 11:05:45 +0200
Subject: [PATCH] Geometry: Fix status propagation from ProfileXYZ to PointXYZ.

---
 src/Model/Except.py                 | 22 +++++++++++-----------
 src/Model/Geometry/ProfileXYZ.py    | 22 ++++++++++++++++++++++
 src/Model/Geometry/Reach.py         |  2 +-
 src/View/Geometry/Profile/Table.py  |  2 +-
 src/View/Geometry/Profile/Window.py | 23 +----------------------
 5 files changed, 36 insertions(+), 35 deletions(-)

diff --git a/src/Model/Except.py b/src/Model/Except.py
index 4c71bbc2..8480e3ee 100644
--- a/src/Model/Except.py
+++ b/src/Model/Except.py
@@ -124,25 +124,25 @@ class ClipboardFormatError(ExeceptionWithMessageBox):
             title = _translate("Exception", "Clipboard format error")
         )
 
-        self.mime = mime
-        self.header = header
-        self.data = data
+        self._mime = mime
+        self._header = header
+        self._data = data
 
-        if self.mime is not None:
-            self.msg = f"Impossible to decode data to mime code '{self.mime}'"
+        if self._mime is not None:
+            self.msg = f"Impossible to decode data to mime code '{self._mime}'"
         else:
-            if len(self.header) == 0:
+            if len(self._header) == 0:
                 msg = _translate("Exception", "without header")
             else:
                 msg = (
                     _translate("Exception", "with header") +
-                    f": {self.header}"
+                    f": {self._header}"
                 )
 
-                self.msg = (
-                    _translate("Exception", "Invalid clipboard data format:") +
-                    f" '{self.data}' {msg}"
-                )
+            self.msg = (
+                _translate("Exception", "Invalid clipboard data format:") +
+                f" '{self._data}' {msg}"
+            )
 
         self.alert()
 
diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py
index de4c843d..08cf2cf4 100644
--- a/src/Model/Geometry/ProfileXYZ.py
+++ b/src/Model/Geometry/ProfileXYZ.py
@@ -63,6 +63,28 @@ class ProfileXYZ(Profile):
 
         return profile
 
+    def point_from_data(self, header, data):
+        point = None
+        try:
+            if len(header) == 0:
+                point = PointXYZ(
+                    *data, status=self._status
+                )
+            else:
+                valid_header = {'name', 'x', 'y', 'z'}
+                d = {"status": self._status}
+                for i, v in enumerate(data):
+                    h = header[i].strip().lower().split(' ')[0]
+                    if h in valid_header:
+                        d[h] = v
+
+                point = PointXYZ(**d)
+        except Exception as e:
+            raise ClipboardFormatError(header=header, data=data)
+
+        return point
+
+
     def x(self):
         return [point.x for point in self._points]
 
diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 8a174517..087b0a87 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -82,7 +82,7 @@ class Reach:
         Returns:
             The new profile.
         """
-        profile = ProfileXYZ(reach=self)
+        profile = ProfileXYZ(reach=self, status=self._status)
 
         self._profiles.insert(index, profile)
         self._update_profile_numbers()
diff --git a/src/View/Geometry/Profile/Table.py b/src/View/Geometry/Profile/Table.py
index 01608630..d55ebfcd 100644
--- a/src/View/Geometry/Profile/Table.py
+++ b/src/View/Geometry/Profile/Table.py
@@ -271,7 +271,7 @@ class TableEditableModel(QAbstractTableModel):
                 self._profile, row,
                 list(
                     map(
-                        lambda d: PointXYZ.from_data(header, d),
+                        lambda d: self._profile.point_from_data(header, d),
                         data
                     )
                 )
diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py
index 0f681699..815cc2ec 100644
--- a/src/View/Geometry/Profile/Window.py
+++ b/src/View/Geometry/Profile/Window.py
@@ -333,28 +333,7 @@ class ProfileWindow(QMainWindow, WindowToolKit):
         if list_deleted_names:
             self.msg_box_check_duplication_names(list_deleted_names)
 
-    def closeEvent(self, event):
-        print("TODO: Close")
-        # if self.status_change_tableview:
-        #     reply = QtWidgets.QMessageBox.question(
-        #         self,
-        #         _translate("MainWindowProfile", "Terminer l'édition du profil "),
-        #         _translate("MainWindowProfile", "Voulez-vous vraiment quitter "
-        #                    "?\n Oui : Valider et quitter\n"
-        #                    "Non : Annuler"),
-        #         QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
-        #     )
-
-        #     if reply == QtWidgets.QMessageBox.Yes:
-        #         self.validate_changes()
-        #         self.plot()
-        #         event.accept()
-        #     else:
-        #         event.ignore()
-        #         self.ui.btn_check.setEnabled(True)
-        #         self.ui.btn_go_back.setEnabled(True)
-
-    def msg_box_check_duplication_names(self, list_deleted_names):  # name_point,list_deleted_names,counter_list):
+    def msg_box_check_duplication_names(self, list_deleted_names):
         if len(list_deleted_names) == 1:
             text = _translate("MainWindowProfile",
                               "Le nom ''{}'' est dupliqué."
-- 
GitLab