From f2d2ea9ffd80e5211d4ce3b49fd2f18256df1a04 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Fri, 21 Apr 2023 09:49:55 +0200 Subject: [PATCH] geometry: Add feature to delete multiple line. --- src/View/Geometry/GeometryWindow.py | 16 ++++++++++------ src/View/Geometry/ReachUndoCommand.py | 18 +++++++++++++----- src/View/Geometry/qtableview_reach.py | 6 +++--- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 4fbd5e1e..2817dfee 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -93,7 +93,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.ui.btn_move_down.clicked.connect(self.move_row_down) self.ui.btn_end_editing.clicked.connect(self.handleSave) self.ui.btn_add.clicked.connect(self.insert_row) - self.ui.btn_delete.clicked.connect(self.delete_row) + self.ui.btn_delete.clicked.connect(self.delete_rows) self.ui.btn_edit.clicked.connect(self.edit_profile) self.ui.verticalSlider.valueChanged.connect(self.changed_slider_value) @@ -374,13 +374,17 @@ class GeometryWindow(QMainWindow, WindowToolKit): row = self.index_selected_row() self._tablemodel.insert_row(row + 1) - def delete_row(self): - rows = list(set( - [index.row() for index in self.tableView.selectedIndexes()] - )) + def delete_rows(self): + rows = sorted( + list( + set( + [index.row() for index in self.tableView.selectedIndexes()] + ) + ) + ) if len(rows) > 0: - self._tablemodel.remove_row(rows[0]) + self._tablemodel.remove_rows(rows) self.update_plot_xy() self.select_current_profile() diff --git a/src/View/Geometry/ReachUndoCommand.py b/src/View/Geometry/ReachUndoCommand.py index e3e2191f..c783587b 100644 --- a/src/View/Geometry/ReachUndoCommand.py +++ b/src/View/Geometry/ReachUndoCommand.py @@ -47,18 +47,26 @@ class AddCommand(QUndoCommand): self._reach.insert(self._index) class DelCommand(QUndoCommand): - def __init__(self, reach, index): + def __init__(self, reach, rows): QUndoCommand.__init__(self) self._reach = reach - self._index = index - self._profile = self._reach.profile(index) + self._rows = rows + + self._profile = [] + for row in rows: + self._profile.append(self._reach.profile(row)) + self._profile.reverse() def undo(self): - self._reach.insert_profile(self._index, self._profile) + row = self._rows[0] + for pro in self._profile: + self._reach.insert_profile(row, pro) def redo(self): - self._reach.delete(self._index) + row = self._rows[0] + for _ in self._rows: + self._reach.delete(row) class SortCommand(QUndoCommand): def __init__(self, reach, _reverse): diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py index 07f4c0fd..bb984e83 100644 --- a/src/View/Geometry/qtableview_reach.py +++ b/src/View/Geometry/qtableview_reach.py @@ -152,12 +152,12 @@ class PandasModelEditable(QAbstractTableModel): self.endInsertRows() self.layoutChanged.emit() - def remove_row(self, row, parent=QModelIndex()): - self.beginRemoveRows(parent, row, row - 1) + def remove_rows(self, rows, parent=QModelIndex()): + self.beginRemoveRows(parent, rows[0], rows[-1]) self._undo_stack.push( DelCommand( - self._reach, row + self._reach, rows ) ) -- GitLab