diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 8b7922197c0114288b626044e5caa67dc9edc54a..ef2a3e5e6e6194f79ef4084c4e5491e346ad3552 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -9,12 +9,16 @@ import time from tools import timer from PyQt5 import QtWidgets +from PyQt5.QtGui import ( + QKeySequence, +) from PyQt5.QtCore import ( QModelIndex, Qt, QSettings, pyqtSlot, QItemSelectionModel, QCoreApplication, QSize ) from PyQt5.QtWidgets import ( - QApplication, QMainWindow, QFileDialog, QCheckBox + QApplication, QMainWindow, QFileDialog, QCheckBox, + QUndoStack, QShortcut, ) from View.Geometry.PlotXY import PlotXY @@ -29,8 +33,6 @@ from View.ASubWindow import WindowToolKit _translate = QCoreApplication.translate - - class GeometryWindow(QMainWindow, WindowToolKit): def __init__(self, model=None, parent=None): self.parent = parent @@ -48,19 +50,26 @@ class GeometryWindow(QMainWindow, WindowToolKit): self._tablemodel = None self.setup_window() + self.setup_undo() self.setup_model() self.setup_plots() - # self.setup_undo() self.setup_connections() self.changed_slider_value() def setup_window(self): self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}") + def setup_undo(self): + self._undo_stack = QUndoStack() + + self.undo_sc = QShortcut(QKeySequence.Undo, self) + self.redo_sc = QShortcut(QKeySequence.Redo, self) + def setup_model(self): self._tablemodel = qtableview_reach.PandasModelEditable( headers = self.ui.tableView_header, - reach = self._reach + reach = self._reach, + undo = self._undo_stack ) self.tableView.setModel(self._tablemodel) self.tableView.setItemDelegate(qtableview_reach.Delegate()) @@ -71,12 +80,6 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.plot_kpc() self.plot_ac() - # def setup_undo(self): - # self.undoAction = self.undoStack.createUndoAction(self, self.tr("&Undo")) - # self.undoAction.setShortcuts(QKeySequence.Undo) - # self.redoAction = self.undoStack.createRedoAction(self, self.tr("&Redo")) - # self.redoAction.setShortcuts(QKeySequence.Redo) - def setup_connections(self): self.ui.btn_open.clicked.connect(self.open_file_dialog) self.ui.btn_sort_asc.clicked.connect(self.sort_ascending) @@ -93,6 +96,9 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.ui.btn_slider_down.clicked.connect(self.increment_value_slider) self.ui.btn_move_up.clicked.connect(self.changed_profile_slot) + self.undo_sc.activated.connect(self.undo) + self.redo_sc.activated.connect(self.redo) + # Profile selection when line change in table self.tableView.selectionModel()\ .selectionChanged\ @@ -412,6 +418,18 @@ class GeometryWindow(QMainWindow, WindowToolKit): self._tablemodel.move_row_up(row) self.select_current_profile() + def undo(self): + self._tablemodel.undo() + self.select_current_profile() + self.update_plot_xy() + self.update_plot_kpc() + + def redo(self): + self._tablemodel.redo() + self.select_current_profile() + self.update_plot_xy() + self.update_plot_kpc() + def handleSave(self): options = QFileDialog.Options() DEFAULT_DIRECTORY = '/home/' diff --git a/src/View/Geometry/ReachUndoCommand.py b/src/View/Geometry/ReachUndoCommand.py index efedd04702fa61c38a86ffeb38cd6a4d03e76269..7aacde6fd9e8099516bfedd17883a686d5ec119f 100644 --- a/src/View/Geometry/ReachUndoCommand.py +++ b/src/View/Geometry/ReachUndoCommand.py @@ -41,7 +41,7 @@ class AddCommand(QUndoCommand): self._index = index def undo(self): - self._reach.delete([self._index]) + self._reach.delete(self._index) def redo(self): self._reach.insert(self._index) diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py index d6e9321df1d7df2cc24767120a157d18a40dff03..b965d21ba56c7eecb28d297b8609d8a06f825e63 100644 --- a/src/View/Geometry/qtableview_reach.py +++ b/src/View/Geometry/qtableview_reach.py @@ -9,7 +9,10 @@ import numpy as np import pandas as pd from PyQt5 import ( - QtGui, QtWidgets + QtGui, QtWidgets, +) +from PyQt5.QtGui import ( + QKeySequence, ) from PyQt5.QtCore import ( Qt, QAbstractTableModel, QModelIndex, @@ -27,12 +30,11 @@ _translate = QCoreApplication.translate class PandasModelEditable(QAbstractTableModel): - def __init__(self, reach, headers=None): + def __init__(self, reach, headers=None, undo=None): QAbstractTableModel.__init__(self) data_list = [] - self._undo_stack = QUndoStack() - + self._undo_stack = undo self._reach = reach if headers is None: