diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index ee662308f33def332297ed0d450d552d74b30669..a04e1a8f15b5b540fa113892e8d08360552435e6 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/Model/HydraulicStructures/Basic/HydraulicStructures.py b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py index 706aea6697bf032bd5c4ffca90bc6653e2e294d4..e7a5af5fa7c383624009fbd421a33675beea86a7 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 5d9a747284d2541538a3d3f435112065f1af464c..c301439b891216e058011ceb21f402f9bc4ca415 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) diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index a71f3133d83d87b9a10c21589c5c031109f5ebe4..2d88ea688d1571dd06e0437e6249f982099af8d6 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 diff --git a/src/View/Geometry/Profile/UndoCommand.py b/src/View/Geometry/Profile/UndoCommand.py index c1122a688b7889f563b504a69b0c3e005f9a9ca6..e1bf3ae8593aee207874bd7b8436fa402672af6f 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 9fd3f1aa76a8b55562a20082fd456ec23c29a848..0b241d9497a71578ec3f9736b695500e1a280c98 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() diff --git a/src/View/HydraulicStructures/PlotAC.py b/src/View/HydraulicStructures/PlotAC.py index 9964686afe28b5fdb6120eb1123d7345366077a0..c3b68cefa63fde4e68aee2cbb415461be8e4f005 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 d3070c88b2b1e96a7090a853fa36897dc3ff7141..47ef289c3a0ad483c9b6b17494445154149db97d 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):