From 5a1c363e8a406ae5add1c308bec1dd4ea0a93351 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 13 Dec 2023 09:42:47 +0100 Subject: [PATCH 1/4] IC: Fix reach reference at loading in case of multiple reach. --- src/Model/InitialConditions/InitialConditions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index a71f3133..2d88ea68 100644 --- a/src/Model/InitialConditions/InitialConditions.py +++ b/src/Model/InitialConditions/InitialConditions.py @@ -250,7 +250,7 @@ class InitialConditions(SQLSubModel): ) if new._data is not None: - yield new + return new def _db_save(self, execute, data=None): ok = True From fc7a7bb7fd4a0df733a8e4af8db58a3447a8f341 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 13 Dec 2023 10:05:25 +0100 Subject: [PATCH 2/4] HS: Fix update relim in PlotAC and PlotKPC. --- src/View/HydraulicStructures/PlotAC.py | 28 ++++++++++++++----------- src/View/HydraulicStructures/PlotKPC.py | 4 ++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/View/HydraulicStructures/PlotAC.py b/src/View/HydraulicStructures/PlotAC.py index 9964686a..c3b68cef 100644 --- a/src/View/HydraulicStructures/PlotAC.py +++ b/src/View/HydraulicStructures/PlotAC.py @@ -108,23 +108,27 @@ class PlotAC(PamhyrPlot): def update(self): if self.line_kp is None: self.draw() - else: - if self._current_reach is None or self._current_profile is None: - self.clear() - return + return - profile = self._current_profile - x = profile.get_station() - z = profile.z() + if self._current_reach is None or self._current_profile is None: + self.clear() + return - self.line_kp.set_data(x, z) + profile = self._current_profile + x = profile.get_station() + z = profile.z() - self.canvas.axes.set_xlim( - left=min(x), right=max(x) - ) - self.canvas.figure.canvas.draw_idle() + self.line_kp.set_data(x, z) + + self.canvas.axes.relim() + self.canvas.axes.autoscale_view() + + self.canvas.figure.tight_layout() + self.canvas.figure.canvas.draw_idle() def clear(self): if self.line_kp is not None: self.line_kp.set_data([], []) + + self.canvas.figure.tight_layout() self.canvas.figure.canvas.draw_idle() diff --git a/src/View/HydraulicStructures/PlotKPC.py b/src/View/HydraulicStructures/PlotKPC.py index d3070c88..47ef289c 100644 --- a/src/View/HydraulicStructures/PlotKPC.py +++ b/src/View/HydraulicStructures/PlotKPC.py @@ -139,6 +139,10 @@ class PlotKPC(PamhyrPlot): [self._current_profile.kp, self._current_profile.kp], [self._current_profile.z_min(), self._current_profile.z_max()], ) + + self.canvas.axes.relim() + self.canvas.axes.autoscale_view() + self.canvas.figure.canvas.draw_idle() def clear(self): From 8f5fb4cc3b56a563205f61c48beab7fb84659e83 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 13 Dec 2023 10:36:13 +0100 Subject: [PATCH 3/4] Geometry: Profile: Some fixes. --- src/Model/Geometry/Profile.py | 26 +++++-------------- src/View/Geometry/Profile/UndoCommand.py | 6 ++--- src/View/Geometry/Profile/Window.py | 33 +++++++++++------------- 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index ee662308..a04e1a8f 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -214,31 +214,17 @@ class Profile(object): self.points.insert(index, point) self._status.modified() - def delete(self, indexes: int): - """Delete points at index - - Args: - indexes: List of index of points. - - Returns: - Nothing. - """ - points = set( + def delete_i(self, indexes: list): + self._points = list( map( lambda e: e[1], filter( - lambda e: e[0] in indexes, + lambda e: e[0] not in indexes, enumerate(self.points) ) ) ) - self.points = list( - filter( - lambda p: p not in points, - self.points - ) - ) self._status.modified() def delete_points(self, points): @@ -250,7 +236,7 @@ class Profile(object): Returns: Nothing. """ - self.points = list( + self._points = list( filter( lambda p: p not in points, self.points @@ -286,7 +272,7 @@ class Profile(object): elif column == 'z': def predicate(p): return p.z - self.points = sorted( + self._points = sorted( self.points, key=predicate, reverse=is_reversed @@ -298,7 +284,7 @@ class Profile(object): if len(self.points) != len(indexes): logger.critical("Indexes list do not correspond to point list") - self.points = list( + self._points = list( map( lambda x: x[1], sorted( diff --git a/src/View/Geometry/Profile/UndoCommand.py b/src/View/Geometry/Profile/UndoCommand.py index c1122a68..e1bf3ae8 100644 --- a/src/View/Geometry/Profile/UndoCommand.py +++ b/src/View/Geometry/Profile/UndoCommand.py @@ -93,7 +93,7 @@ class AddCommand(QUndoCommand): self._point = None def undo(self): - self._profile.delete([self._index]) + self._profile.delete_i([self._index]) def redo(self): if self._point is None: @@ -119,7 +119,7 @@ class DelCommand(QUndoCommand): self._profile.insert_point(row, point) def redo(self): - self._profile.delete(self._rows) + self._profile.delete_i(self._rows) class SortCommand(QUndoCommand): @@ -181,7 +181,7 @@ class PasteCommand(QUndoCommand): def undo(self): for ind in range(len(self._points)): - self._profile.delete([self._row]) + self._profile.delete_i([self._row]) def redo(self): for point in self._points: diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py index 9fd3f1aa..0b241d94 100644 --- a/src/View/Geometry/Profile/Window.py +++ b/src/View/Geometry/Profile/Window.py @@ -135,16 +135,13 @@ class ProfileWindow(PamhyrWindow): self._tablemodel.blockSignals(False) def index_selected_row(self): - rows = self._tablemodel\ - .selectionModel()\ - .selectedRows() + table = self.find(QTableView, "tableView") + rows = table.selectionModel()\ + .selectedRows() if len(rows) == 0: return 0 - return self._tablemodel\ - .selectionModel()\ - .selectedRows()[0]\ - .row() + return rows[0].row() def add(self): table = self.find(QTableView, "tableView") @@ -213,24 +210,24 @@ class ProfileWindow(PamhyrWindow): self.update_plot() - def copy(self): - rows = self._tablemodel\ - .selectionModel()\ - .selectedRows() - table = [] - table.append(["x", "y", "z", "name"]) + def _copy(self): + table = self.find(QTableView, "tableView") + rows = table.selectionModel().selectedRows() + + data = [] + data.append(["x", "y", "z", "name"]) for row in rows: point = self._profile.point(row.row()) - table.append( + data.append( [ point.x, point.y, point.z, point.name ] ) - self.copyTableIntoClipboard(table) + self.copyTableIntoClipboard(data) - def paste(self): + def _paste(self): header, data = self.parseClipboardTable() if len(data) == 0: @@ -245,10 +242,10 @@ class ProfileWindow(PamhyrWindow): self._tablemodel.paste(row, header, data) self.update_plot() - def undo(self): + def _undo(self): self._tablemodel.undo() self.update_plot() - def redo(self): + def _redo(self): self._tablemodel.redo() self.update_plot() From c11350d49aedaacd23b8ac493d8e503653a12d51 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 13 Dec 2023 11:04:51 +0100 Subject: [PATCH 4/4] HS: Fix basic HS previous data delete at save. --- src/Model/HydraulicStructures/Basic/HydraulicStructures.py | 4 ---- src/Model/HydraulicStructures/HydraulicStructures.py | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py index 706aea66..e7a5af5f 100644 --- a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py @@ -127,10 +127,6 @@ class BasicHS(SQLSubModel): return new def _db_save(self, execute, data=None): - execute( - "DELETE FROM hydraulic_structures_basic " + - f"WHERE id = {self.id}" - ) hs_id = data['hs_id'] sql = ( diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index 5d9a7472..c301439b 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -172,6 +172,11 @@ class HydraulicStructure(SQLSubModel): execute(sql) data['hs_id'] = self.id + execute( + "DELETE FROM hydraulic_structures_basic " + + f"WHERE hs = {self.id}" + ) + for basic in self._data: basic._db_save(execute, data)