From 8782056b1c1bf5d7199a55849df9ac67fc90eaaf Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 12 Apr 2023 10:41:00 +0200
Subject: [PATCH] geometry: Cleanup some piece of code.

---
 src/Model/Geometry/Profile.py            |   2 +-
 src/Model/Geometry/Reach.py              |  26 ++--
 src/Model/Network/Edge.py                |  10 +-
 src/Model/River.py                       |   6 +-
 src/View/Geometry/GeometryWindow.py      | 189 +++++++++--------------
 src/View/Geometry/mainwindow_ui_reach.py |   3 +-
 src/View/Geometry/qtableview_reach.py    | 189 +----------------------
 7 files changed, 100 insertions(+), 325 deletions(-)

diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py
index ebc28446..1d9677bb 100644
--- a/src/Model/Geometry/Profile.py
+++ b/src/Model/Geometry/Profile.py
@@ -88,6 +88,6 @@ class Profile(object):
         """
         return self._profile_type
 
-    @type.setter
+    @profile_type.setter
     def profile_type(self, value: str):
         self._profile_type = value
diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 7f446118..c7492c12 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -13,17 +13,13 @@ from Model.Geometry.ProfileXYZ import ProfileXYZ
 from Model.Except import FileFormatError, exception_message_box
 
 class Reach:
-    def __init__(self, edge):
-        self._edge = edge
+    def __init__(self, parent):
+        self._parent = parent
         self._profiles: List[Profile] = []
 
         # Copy/Paste
         self.__list_copied_profiles = []
 
-    def __repr__(self):
-        return f"\n===== Début liste des profils ======> {np.array(self._profiles)}" \
-               f"\n<====== Fin liste des profils ====="
-
     def profile(self, i):
         """Returns profile at index i
 
@@ -38,6 +34,10 @@ class Reach:
 
         return None
 
+    @property
+    def name(self):
+        return self._parent.name
+
     @property
     def profiles(self):
         return self._profiles.copy()
@@ -79,8 +79,9 @@ class Reach:
         nb_profile = self.number_profiles
         profile = ProfileXYZ()
         profile.num = nb_profile + 1
+
         self._profiles.insert(profile, index + 1)
-        # self._update_profile_numbers()
+        self._update_profile_numbers()
 
     def _update_profile_numbers(self):
         """Update profiles index
@@ -101,6 +102,7 @@ class Reach:
             Nothing.
         """
         profile = ProfileXYZ()
+
         self._profiles.insert(index, profile)
         self._update_profile_numbers()
 
@@ -117,7 +119,6 @@ class Reach:
             if list_index:
                 indices = sorted(list(set(list_index)), reverse=True)
                 for idx in indices:
-                    # if idx < len(self._profiles) :
                     try:
                         self._profiles.pop(idx)
                         self._update_profile_numbers()
@@ -217,7 +218,7 @@ class Reach:
             print(e)
             e.alert()
 
-    def read_file_st(self):
+    def read_file_st(self, filename):
         """Read the ST file
 
         Returns:
@@ -230,7 +231,7 @@ class Reach:
         list_header = []
         stop_code = "999.999"
 
-        with open(self.file_st, encoding="utf-8") as file_st:
+        with open(filename, encoding="utf-8") as file_st:
             for line in file_st:
                 if not (line.startswith("#") or line.startswith("*")):
                     line = line.split()
@@ -267,12 +268,11 @@ class Reach:
                             pass
 
         if list_profile and list_header:
-            raise FileFormatError(self.file_st, f"{list_profile}, {list_header}")
+            raise FileFormatError(filename, f"{list_profile}, {list_header}")
 
-        print("******  Fichier {} lu et traité en {} secondes *******".format(self.file_st, time() - t0))
+        print("******  Fichier {} lu et traité en {} secondes *******".format(filename, time() - t0))
         return list_profile, list_header
 
-
     # TODO: Move this function to model reach
     def export_reach(self, filename):
         with open(f"{filename}", "w") as file_st:
diff --git a/src/Model/Network/Edge.py b/src/Model/Network/Edge.py
index 09b2cb7b..5dcb12c9 100644
--- a/src/Model/Network/Edge.py
+++ b/src/Model/Network/Edge.py
@@ -9,7 +9,7 @@ class Edge(object):
         super(Edge, self).__init__()
 
         self.id = id
-        self.name = name if name != "" else f"{node1.name} -> {node2.name}"
+        self._name = name if name != "" else f"{node1.name} -> {node2.name}"
 
         self.node1 = node1
         self.node2 = node2
@@ -20,7 +20,7 @@ class Edge(object):
         ret = None
 
         if name == "name":
-            ret = self.name
+            ret = self._name
         elif name == "id":
             ret = self.id
         elif name == "node1":
@@ -34,7 +34,7 @@ class Edge(object):
 
     def __setitem__(self, name, value):
         if name == "name":
-            self.name = value
+            self._name = value
         elif name == "id":
             self.id = value
         elif name == "node1":
@@ -44,6 +44,10 @@ class Edge(object):
         elif name == "enable":
             self.enable = value
 
+    @property
+    def name(self):
+        return self._name
+
     def enable(self):
         self.enable = True
 
diff --git a/src/Model/River.py b/src/Model/River.py
index 027fd37e..a386cbae 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -35,16 +35,12 @@ class RiverReach(Edge):
             node1, node2
         )
 
-        self._reach = None
+        self._reach = Reach(self)
 
     @property
     def reach(self):
         return self._reach
 
-    @reach.setter
-    def reach(self, reach:Reach):
-        self._reach = reach
-
 
 class River(Graph):
     def __init__(self):
diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py
index 6b46161f..4282d7ac 100644
--- a/src/View/Geometry/GeometryWindow.py
+++ b/src/View/Geometry/GeometryWindow.py
@@ -28,22 +28,27 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         super(GeometryWindow, self).__init__(parent=parent)
 
         self._model = model
-        self._reach = model.river.current_reach()
+        self._reach = model.river.current_reach().reach
 
         self.ui = Ui_MainWindow()
         self.ui.setupUi(self)
+
         self.tableView = self.ui.tableView
         self.tableView_header = self.ui.tableView_header
+
         self.model = None
-        self.filename = None
 
+        self.setup_window()
         self.setup_model()
         self.setup_connections()
 
+    def setup_window(self):
+        self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}")
+
     def setup_model(self):
-        self.model = qtableview_reach.PandasModelEditableCreateReach(
+        self.model = qtableview_reach.PandasModelEditable(
             headers = self.ui.tableView_header,
-            rows = self._reach
+            reach = self._reach
         )
         self.tableView.setModel(self.model)
         self.tableView.setItemDelegate(qtableview_reach.Delegate())
@@ -70,32 +75,30 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         settings = QSettings(QSettings.IniFormat, QSettings.UserScope, 'MyOrg', )
         current_dir = settings.value('current_directory', DEFAULT_DIRECTORY, type=str)
         options |= QFileDialog.DontUseNativeDialog
-        self.filename, _ = QtWidgets.QFileDialog.getOpenFileName(
+
+        filename, _ = QtWidgets.QFileDialog.getOpenFileName(
             self,
             _translate("MainWindow_reach", "Ouvrir un fichier"),
             current_dir,
-            _translate("MainWindow_reach",
-                       "Fichiers .ST (*.ST)") + ";;" +
-            _translate("MainWindow_reach",
-                       "Fichiers textes (*.txt)") + ";; " +
-            _translate("MainWindow_reach",
-                       "Tous les fichiers (*)"),
+            _translate("MainWindow_reach", "Fichiers .ST (*.ST)") +
+            ";; " +
+            _translate("MainWindow_reach", "Fichiers textes (*.txt)") +
+            ";; " +
+            _translate("MainWindow_reach", "Tous les fichiers (*)"),
             options=options
         )
 
-        current_dir = os.path.split(self.filename)[0] or DEFAULT_DIRECTORY
-        settings.setValue('current_directory', current_dir)
-        if self.filename != "":
-            size = os.stat(self.filename).st_size
-
-            self.bief_name = pathlib.Path(self.filename).stem
-            self.setWindowTitle(f"{self.ui.mainwindow_title} {self.bief_name}")
-            self.model = qtableview_reach.PandasModelEditable(
-                self.filename,
-                self.tableView_header
-            )
-            self.tableView.setModel(self.model)
-            self.update_text_label()
+        current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY
+        #settings.setValue('current_directory', current_dir)
+        if filename != "":
+            size = os.stat(filename).st_size
+            self._reach.import_geometry(filename)
+            # self.model = qtableview_reach.PandasModelEditable(
+            #     ,
+            #     self.tableView_header
+            # )
+            # self.tableView.setModel(self.model)
+            self.model.layoutChanged.emit()
 
             self.update_profile_windows()
             self.graphic_1()
@@ -119,25 +122,6 @@ class GeometryWindow(QMainWindow, WindowToolKit):
                           .connect(self.update_graphic_2)
 
 
-    def update_text_label(self):
-        """
-        Returns: Cette méthode met à jour le texte (en haut à gauche) indiquant le nombre de profils et
-        l'ordre des sections.
-        """
-        if self.filename:
-            if self.model.rowCount() > 1:
-                self.ui.label_section_order.setText(
-                    f"{self.model.rowCount()}" + " " +
-                    _translate("MainWindow_reach", "profils") +
-                    f"{self.ui.text_section_order}"
-                )
-            else:
-                self.ui.label_section_order.setText(
-                    f"{self.model.rowCount()}" + " " +
-                    _translate("MainWindow_reach", "profil") +
-                    f"{self.ui.text_section_order}"
-                )
-
     def messagebox_profile_editing(self):
         msg_box = QtWidgets.QMessageBox()
         msg_box.setIcon(QtWidgets.QMessageBox.Information)
@@ -164,14 +148,14 @@ class GeometryWindow(QMainWindow, WindowToolKit):
 
         for selected_row in list_selected_row[:5]:
             selected_row = int(selected_row)
-            profile_identifier = self.model.get_profile_selected_identifier(selected_row)
-            Pk = self.model.get_pk_i(selected_row)
-            profile_name = self.model.get_profile_name(selected_row)
+            profile_identifier = self._reach.get_profile_selected_identifier(selected_row)
+            Pk = self._reach.get_pk_i(selected_row)
+            profile_name = self._reach.get_profile_name(selected_row)
 
             if len(self.list_second_window) == 0:
                 self.second_window = window_profileXYZ.View(
                     selected_row + 1,
-                    self.model.get_profile_via_identifier(profile_identifier),
+                    self._reach.get_profile_via_identifier(profile_identifier),
                     pk=Pk, profile_name="", parent=self
                 )
                 self.second_window.window_title(
@@ -202,7 +186,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
                 else:
                     second_window1 = window_profileXYZ.View(
                         selected_row + 1,
-                        self.model.get_profile_via_identifier(profile_identifier),
+                        self._reach.get_profile_via_identifier(profile_identifier),
                         pk=Pk, profile_name="", parent=self
                     )
                     second_window1.window_title(
@@ -253,38 +237,38 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             _translate("MainWindow_reach", "Y (m)"), color='green', fontsize=12
         )
 
-        self.get_x = self.model.get_x()
-        self.get_y = self.model.get_y()
+        self.get_x = self._reach.get_x()
+        self.get_y = self._reach.get_y()
         self.line_xy = [
             self.ui.canvas_1.axes.plot(x, y, color='r', lw=1., markersize=3, marker='+')
             for x, y in zip(self.get_x, self.get_y)
         ]
 
-        self.get_x_complete_list_ld = self.model.get_x_complete_list_ld()
-        self.get_y_complete_list_ld = self.model.get_y_complete_list_ld()
+        self.get_x_complete_list_ld = self._reach.get_x_complete_list_ld()
+        self.get_y_complete_list_ld = self._reach.get_y_complete_list_ld()
         self.line_ld_1 = self.ui.canvas_1.axes.plot(
             self.get_x_complete_list_ld,
             self.get_y_complete_list_ld
         )
 
         self.plot_selected_1, = self.ui.canvas_1.axes.plot(
-            self.model.get_x_profile_i(0),
-            self.model.get_y_profile_i(0), lw=1., markersize=3,
+            self._reach.get_x_profile_i(0),
+            self._reach.get_y_profile_i(0), lw=1., markersize=3,
             marker='+', color="b"
         )
 
         self.plot_selected_1.set_visible(False)
         self.before_plot_selected_1, = self.ui.canvas_1.axes.plot(
-            self.model.get_x_profile_i(0),
-            self.model.get_y_profile_i(0), lw=1., markersize=3,
+            self._reach.get_x_profile_i(0),
+            self._reach.get_y_profile_i(0), lw=1., markersize=3,
             marker='+', color="k", linestyle="--"
         )
 
         self.before_plot_selected_1.set_visible(False)
 
         self.after_plot_selected_1, = self.ui.canvas_1.axes.plot(
-            self.model.get_x_profile_i(0),
-            self.model.get_y_profile_i(0), lw=1., markersize=3,
+            self._reach.get_x_profile_i(0),
+            self._reach.get_y_profile_i(0), lw=1., markersize=3,
             marker='+', color="m", linestyle='--'
         )
 
@@ -306,9 +290,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             _translate("MainWindow_reach", "Cote (m)"), color='green', fontsize=12
         )
 
-        self.get_pk = self.model.get_pk()
-        self.get_z_min = self.model.get_z_min()
-        self.get_z_max = self.model.get_z_max()
+        self.get_pk = self._reach.get_pk()
+        self.get_z_min = self._reach.get_z_min()
+        self.get_z_max = self._reach.get_z_max()
 
         self.line_pk_zmin_zmax = self.ui.canvas_2.axes.vlines(
             x=self.get_pk,
@@ -340,7 +324,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         try:
             self.line_pk_zld = [
                 self.ui.canvas_2.axes.plot(
-                    self.model.get_pk(), i, lw=1.
+                    self._reach.get_pk(), i, lw=1.
                 ) for i in self.model.z_complete_guideline()
             ]
         except:
@@ -363,8 +347,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
 
         for ind in range(self.model.rowCount()):
             self.line_xy[ind][0].set_data(
-                self.model.get_x_profile_i(ind),
-                self.model.get_y_profile_i(ind)
+                self._reach.get_x_profile_i(ind),
+                self._reach.get_y_profile_i(ind)
             )
 
         for i in range(len(self.line_ld_1)):
@@ -379,9 +363,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
     def update_graphic_2(self):
         self.tableView.model().blockSignals(True)
 
-        get_pk = self.model.get_pk()
-        get_z_min = self.model.get_z_min()
-        get_z_max = self.model.get_z_max()
+        get_pk = self._reach.get_pk()
+        get_z_min = self._reach.get_z_min()
+        get_z_max = self._reach.get_z_max()
 
         self.line_pk_zmin.set_data(get_pk, get_z_min)
 
@@ -408,11 +392,11 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.tableView.model().blockSignals(True)
 
         selected_profile = 0
-        station = self.model.get_station(selected_profile)  # L'abscisse en travers
-        station_plus_1 = self.model.get_station(selected_profile + 1)
-        elevation = self.model.get_z_profile_i(selected_profile)
-        elevation_i_plus_1 = self.model.get_z_profile_i(selected_profile + 1)
-        ld = self.model.get_ld_profile_i(selected_profile)
+        station = self._reach.get_station(selected_profile)  # L'abscisse en travers
+        station_plus_1 = self._reach.get_station(selected_profile + 1)
+        elevation = self._reach.get_z_profile_i(selected_profile)
+        elevation_i_plus_1 = self._reach.get_z_profile_i(selected_profile + 1)
+        ld = self._reach.get_ld_profile_i(selected_profile)
 
         self.ui.canvas_3.axes.cla()
         self.ui.canvas_3.axes.grid(color='grey', linestyle='--', linewidth=0.5)
@@ -448,8 +432,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             color=color_profile_i_plus_1, lw=1.6, linestyle='--'
         )
         self.annotation_3 = []
-        self.complete_list_ld = self.model.get_complete_list_ld()
-        self.incomplete_list_ld = self.model.get_incomplete_list_ld()
+        self.complete_list_ld = self._reach.get_complete_list_ld()
+        self.incomplete_list_ld = self._reach.get_incomplete_list_ld()
 
         line_2d = [[line_2D] for line_2D in self.line_ld_1]
         self.color_complete_ld = self.get_line_ld_colors(line_2d)
@@ -516,9 +500,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
 
         x = self.get_station(ind)
         y = self.get_elevation(ind)
-        ld = self.model.get_ld_profile_i(ind)
-        get_complete_list_ld = self.model.get_complete_list_ld()
-        get_incomplete_list_ld = self.model.get_incomplete_list_ld()
+        ld = self._reach.get_ld_profile_i(ind)
+        get_complete_list_ld = self._reach.get_complete_list_ld()
+        get_incomplete_list_ld = self._reach.get_incomplete_list_ld()
 
         try:
             x_ld_complete = []
@@ -571,10 +555,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         return colors
 
     def get_station(self, ind: int):
-        return self.model.get_station(ind)
+        return self._reach.get_station(ind)
 
     def get_elevation(self, ind: int):
-        return self.model.get_z_profile_i(ind)
+        return self._reach.get_z_profile_i(ind)
 
     def update_graphic_3(self, ind: int):
         self.tableView.model().blockSignals(True)
@@ -628,8 +612,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         self.tableView.model().blockSignals(True)
 
         if 0 <= ind < self.model.rowCount():
-            self.plot_selected_1.set_data(self.model.get_x_profile_i(ind),
-                                          self.model.get_y_profile_i(ind))
+            self.plot_selected_1.set_data(self._reach.get_x_profile_i(ind),
+                                          self._reach.get_y_profile_i(ind))
             self.plot_selected_1.set_visible(True)
         self.tableView.model().blockSignals(False)
 
@@ -648,8 +632,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             t0 = time.time()
 
             self.before_plot_selected_1.set_data(
-                self.model.get_x_profile_i(ind),
-                self.model.get_y_profile_i(ind)
+                self._reach.get_x_profile_i(ind),
+                self._reach.get_y_profile_i(ind)
             )
 
             self.before_plot_selected_1.set_visible(True)
@@ -658,8 +642,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
     def select_after_plot_selected_1(self, ind: int):
         if 0 <= ind < self.model.rowCount():
             self.after_plot_selected_1.set_data(
-                self.model.get_x_profile_i(ind),
-                self.model.get_y_profile_i(ind)
+                self._reach.get_x_profile_i(ind),
+                self._reach.get_y_profile_i(ind)
             )
             self.after_plot_selected_1.set_visible(True)
             self.ui.canvas_1.figure.canvas.draw_idle()
@@ -746,7 +730,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
             self.ui.verticalSlider.setMaximum(self.model.rowCount() - 1)
 
             slider_value = self.ui.verticalSlider.value()
-            pk = self.model.get_pk_profile_i(slider_value)
+            pk = self._reach.get_pk_profile_i(slider_value)
 
             self.ui.vertical_slider_label.setText(
                 _translate("MainWindow_reach", "Pk : ") +
@@ -913,39 +897,6 @@ class GeometryWindow(QMainWindow, WindowToolKit):
         ]
         return liste_lignes_directrices
 
-    def get_x(self):
-        return self.model.get_x()
-
-    def get_y(self):
-        return self.model.get_y()
-
-    def get_z(self):
-        return self.model.get_z()
-
-    def get_z_min(self):
-        return self.model.get_z_min()
-
-    def get_z_min_i(self, index):
-        return self.model.get_z_min_i(index)
-
-    def get_z_max_i(self, index):
-        return self.model.get_z_max_i(index)
-
-    def get_z_max(self):
-        return self.model.get_z_max()
-
-    def get_pk(self):
-        return self.model.get_pk()
-
-    def get_pk_i(self, index):
-        return self.model.get_pk_i(index)
-
-    def get_pk_z_ld(self):
-        return self.model.get_pk_z_ld()
-
-    def get_pk_z_ld_bis(self):
-        return self.model.get_pk_z_ld_bis()
-
     @property
     def model_data(self):
         return self.model.model_data()
diff --git a/src/View/Geometry/mainwindow_ui_reach.py b/src/View/Geometry/mainwindow_ui_reach.py
index 8e13e673..cf5d7ec3 100644
--- a/src/View/Geometry/mainwindow_ui_reach.py
+++ b/src/View/Geometry/mainwindow_ui_reach.py
@@ -397,7 +397,8 @@ class Ui_MainWindow(object):
         self.btn_move_down.setToolTip(_translate("MainWindow_reach", " Changer l'ordre des profils (en décalant le "
                                                                      "profil sélectionné vers le bas)"))
         self.btn_end_editing.setToolTip(_translate("MainWindow_reach", " Terminer l'édition"))
-        self.tableView_header = [_translate("MainWindow_reach", "Nom"), _translate("MainWindow_reach", "Pk (m)"),
+        self.tableView_header = [_translate("MainWindow_reach", "Name"),
+                                 _translate("MainWindow_reach", "Kp (m)"),
                                  _translate("MainWindow_reach", "Type")]
 
         self.toolbar_1._actions["isometric_view"].setShortcut(_translate("MainWindow_reach", "Alt+Z"))
diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py
index 0a0bb274..e22e0393 100644
--- a/src/View/Geometry/qtableview_reach.py
+++ b/src/View/Geometry/qtableview_reach.py
@@ -23,26 +23,20 @@ from Model.Geometry import Reach
 _translate = QCoreApplication.translate
 
 class PandasModelEditable(QAbstractTableModel):
-    def __init__(self, reach, header=None, profiles_type=None):
+    def __init__(self, reach, headers=None):
         QAbstractTableModel.__init__(self)
         data_list = []
 
         self._data = reach
 
-        if header is None:
+        if headers is None:
             self.headers = [
                 _translate("Geometry", "Name"),
-                _translate("Geometry", "KP"),
+                _translate("Geometry", "Kp (m)"),
                 _translate("Geometry", "Type")
             ]
         else:
-            self.headers = header
-
-        if profiles_type is None:
-            self.profiles_type = [
-                "XYZ", "AC",
-                # "LC", "R", "T", "RT"
-            ]
+            self.headers = headers
 
     def rowCount(self, parent=QModelIndex()):
         return self._data.number_profiles
@@ -70,11 +64,10 @@ class PandasModelEditable(QAbstractTableModel):
                 name = self._data.profile(index.row()).name\
                                                       .strip()\
                                                       .lower()
-
-                if (name == "upstream" or
+                if (name == "upstream" or name == "up" or
                     name == _translate("Geometry", "upstream")):
                     return QtGui.QColor("Green")
-                elif (name == "downstream" or
+                elif (name == "downstream" or name == "down" or
                       name == _translate("Geometry", "downstream")):
                     return QtGui.QColor("Red")
 
@@ -88,9 +81,6 @@ class PandasModelEditable(QAbstractTableModel):
             else:
                 return str(section + 1)
 
-        if orientation == Qt.Vertical and role == Qt.DisplayRole:
-            return self.headers[section]
-
         return QVariant()
 
     def setData(self, index, value, role=Qt.EditRole):
@@ -205,173 +195,6 @@ class Delegate(QtWidgets.QStyledItemDelegate):
         """permet de redimensionner l'éditeur à la bonne taille lorsque la taille de la vue change"""
         editor.setGeometry(option.rect)
 
-
-class PandasModelEditableCreateReach(QAbstractTableModel):
-    # TODO : Cette calsse permet juste d'éviter que l'application plante lorsque 'on essaye d'éditer le tablueau. Le
-    #  problème se trouve au niveau du délégué QtWidgets.QStyledItemDelegate. Il faudra prendre en compte le cas où
-    #  on part de zero pour creer un bief. Pour l'instant, le prototype ne gère que l'importation d'une géométrie.
-    #
-    def __init__(self, data, headers):
-        QAbstractTableModel.__init__(self)
-        data_list = []
-        self._data = data
-        self.headers = headers
-
-    def rowCount(self, parent=QModelIndex()):  # parent=None):
-        return len(self._data)
-
-    def columnCount(self, parent=QModelIndex()):  # parent=None):
-        return len(self.headers)
-
-    def data(self, index, role=Qt.DisplayRole):
-        if index.isValid():
-            if role == Qt.DisplayRole and index.column() == 0:
-                value = self._data[index.row()][0][5]
-                return self._data[index.row()][0][5]
-
-            if role == Qt.DisplayRole and index.column() == 1:
-                return "%.4f" % float(self._data[index.row()][0][4])
-
-            column_count = self.columnCount()
-            for column in range(0, column_count):
-                if index.column() == column and role == Qt.TextAlignmentRole:
-                    return Qt.AlignHCenter | Qt.AlignVCenter
-
-            # if role == Qt.BackgroundRole and index.column() == 1:
-            #     return QtGui.QColor(Qt.lightGray)
-
-        return QVariant()  # None
-
-    def headerData(self, section, orientation, role=Qt.DisplayRole):
-        if role == Qt.DisplayRole:
-            if orientation == Qt.Horizontal:
-                if section < len(self.headers):
-                    return self.headers[section]
-                else:
-                    return "not implemented"
-            else:
-                return "%d" % (section + 1)
-
-        if orientation == Qt.Vertical and role == Qt.DisplayRole:
-            return self._data[section]
-
-        return None
-
-    def setData(self, index, value, role=Qt.EditRole):
-        row = index.row()
-        column = index.column()
-
-        if role == Qt.EditRole and index.column() != 2:
-            try:
-                if role == Qt.EditRole and index.column() == 0:
-                    self._data[index.row()][0][5] = value
-
-                if role == Qt.EditRole and index.column() == 1:
-                    self._data[index.row()][0][4] = float(value)
-                self.dataChanged.emit(index, index)
-            except:
-                print('TODO')
-            return True
-
-        self.layoutChanged.emit()
-        return False
-
-    def index(self, row, column, parent=QModelIndex()):
-        if not self.hasIndex(row, column, parent):
-            return QModelIndex()
-        return self.createIndex(row, column, QModelIndex())
-
-    def flags(self, index):
-        if index.column() == 2:
-            return Qt.ItemIsEnabled
-        else:
-            return Qt.ItemIsEditable | Qt.ItemIsSelectable | Qt.ItemIsEnabled
-
-    # @QtCore.pyqtSlot()
-    def insertRows(self, row, count, parent=QModelIndex()):
-        self.beginInsertRows(parent, row, row + count - 1)
-        indexes = [str(self.rowCount() + i) for i in range(count)]
-        self._data.insert(row, [[self.rowCount() + 1, 0, 0, 0, np.nan, ''],
-                                pd.DataFrame({'x': [0], 'y': [0], 'z': [0], 'ld': ['']})])
-        self.endInsertRows()
-        self.layoutChanged.emit()
-
-    # @QtCore.pyqtSlot()
-    def removeRows1(self, row, count, parent=QModelIndex()):
-        self.beginRemoveRows(parent, row, row)
-        self._data.pop(row)
-        self.endRemoveRows()
-        self.layoutChanged.emit()
-
-    def removeRows(self, position, rows, parent=QModelIndex()):
-        self.beginRemoveRows(QModelIndex(), position, position + rows - 1)
-
-        for i in range(rows):
-            del (self._data[position])
-
-        self.endRemoveRows()
-        self.layoutChanged.emit()
-
-        return True
-
-    # # @QtCore.pyqtSlot()
-    def sort_data(self, _reverse):
-        self.layoutAboutToBeChanged.emit()
-
-        if not _reverse:
-            self._data = sorted(self._data, key=lambda x: float(x[0][4]), reverse=False)
-        else:
-            self._data = sorted(self._data, key=lambda x: float(x[0][4]), reverse=True)
-
-        self.layoutAboutToBeChanged.emit()
-        self.layoutChanged.emit()
-
-    def moveRowDown(self, row_to_move, parent=QModelIndex()):
-        target = row_to_move + 2
-        self.beginMoveRows(parent, row_to_move, row_to_move, parent, target)
-        self._data[row_to_move], self._data[row_to_move + 1] = self._data[row_to_move + 1], self._data[row_to_move]
-        self.endMoveRows()
-        self.layoutChanged.emit()
-
-    def moveRowUp(self, row_to_move, parent=QModelIndex()):
-        target = row_to_move + 1
-
-        self.beginMoveRows(parent, row_to_move - 1, row_to_move - 1, parent, target)
-        self._data[row_to_move], self._data[row_to_move - 1] = self._data[row_to_move - 1], self._data[row_to_move]
-        self.endMoveRows()
-        self.layoutChanged.emit()
-
-
-class Delegate(QtWidgets.QStyledItemDelegate):
-    # Lorsque l'on souhaite uniquement personnaliser l'édition des éléments dans une vue et non le rendu,
-    # on doit redéfinir quatre méthodes
-    def __init__(self, parent=None, setModelDataEvent=None):
-        super(Delegate, self).__init__(parent)
-        self.setModelDataEvent = setModelDataEvent
-
-    def createEditor(self, parent, option, index):
-        """retourne le widget (éditeur) pour éditer l'item se trouvant à l'index index."""
-        index.model().data(index, Qt.DisplayRole)
-        return QtWidgets.QLineEdit(parent)
-
-    def setEditorData(self, editor, index):
-        """permet de transmettre à l'éditeur editor les données à afficher à partir du modèle se trouvant à l'index
-        index. """
-        value = index.model().data(index, Qt.DisplayRole)  # DisplayRole
-        editor.setText(str(value))  # récupère la valeur de la cellule applique la méthode définie dans setData
-        print('Donnée éditée dans la case [{},{}] :'.format(index.row(), index.column()), value)
-
-    def setModelData(self, editor, model, index):
-        """permet de récupérer les données de l'éditeur et de les stocker à l'intérieur du modèle, à l'index identifié
-        par le paramètre index """
-        model.setData(index, editor.text())
-        if not self.setModelDataEvent is None:
-            self.setModelDataEvent()
-
-    def updateEditorGeometry(self, editor, option, index):
-        """permet de redimensionner l'éditeur à la bonne taille lorsque la taille de la vue change"""
-        editor.setGeometry(option.rect)
-
 class Delegate1(QtWidgets.QStyledItemDelegate):
     def __init__(self, owner, choices):
         super().__init__(owner)
-- 
GitLab