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