geometry: Active undo/redo shortcut.

mesh
Pierre-Antoine Rouby 2023-04-20 16:24:56 +02:00
parent bef640168e
commit b32a6e7fb4
3 changed files with 36 additions and 16 deletions

View File

@ -9,12 +9,16 @@ import time
from tools import timer from tools import timer
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from PyQt5.QtGui import (
QKeySequence,
)
from PyQt5.QtCore import ( from PyQt5.QtCore import (
QModelIndex, Qt, QSettings, pyqtSlot, QModelIndex, Qt, QSettings, pyqtSlot,
QItemSelectionModel, QCoreApplication, QSize QItemSelectionModel, QCoreApplication, QSize
) )
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QApplication, QMainWindow, QFileDialog, QCheckBox QApplication, QMainWindow, QFileDialog, QCheckBox,
QUndoStack, QShortcut,
) )
from View.Geometry.PlotXY import PlotXY from View.Geometry.PlotXY import PlotXY
@ -29,8 +33,6 @@ from View.ASubWindow import WindowToolKit
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
class GeometryWindow(QMainWindow, WindowToolKit): class GeometryWindow(QMainWindow, WindowToolKit):
def __init__(self, model=None, parent=None): def __init__(self, model=None, parent=None):
self.parent = parent self.parent = parent
@ -48,19 +50,26 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self._tablemodel = None self._tablemodel = None
self.setup_window() self.setup_window()
self.setup_undo()
self.setup_model() self.setup_model()
self.setup_plots() self.setup_plots()
# self.setup_undo()
self.setup_connections() self.setup_connections()
self.changed_slider_value() self.changed_slider_value()
def setup_window(self): def setup_window(self):
self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}") 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): def setup_model(self):
self._tablemodel = qtableview_reach.PandasModelEditable( self._tablemodel = qtableview_reach.PandasModelEditable(
headers = self.ui.tableView_header, headers = self.ui.tableView_header,
reach = self._reach reach = self._reach,
undo = self._undo_stack
) )
self.tableView.setModel(self._tablemodel) self.tableView.setModel(self._tablemodel)
self.tableView.setItemDelegate(qtableview_reach.Delegate()) self.tableView.setItemDelegate(qtableview_reach.Delegate())
@ -71,12 +80,6 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.plot_kpc() self.plot_kpc()
self.plot_ac() 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): def setup_connections(self):
self.ui.btn_open.clicked.connect(self.open_file_dialog) self.ui.btn_open.clicked.connect(self.open_file_dialog)
self.ui.btn_sort_asc.clicked.connect(self.sort_ascending) 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_slider_down.clicked.connect(self.increment_value_slider)
self.ui.btn_move_up.clicked.connect(self.changed_profile_slot) 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 # Profile selection when line change in table
self.tableView.selectionModel()\ self.tableView.selectionModel()\
.selectionChanged\ .selectionChanged\
@ -412,6 +418,18 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self._tablemodel.move_row_up(row) self._tablemodel.move_row_up(row)
self.select_current_profile() 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): def handleSave(self):
options = QFileDialog.Options() options = QFileDialog.Options()
DEFAULT_DIRECTORY = '/home/' DEFAULT_DIRECTORY = '/home/'

View File

@ -41,7 +41,7 @@ class AddCommand(QUndoCommand):
self._index = index self._index = index
def undo(self): def undo(self):
self._reach.delete([self._index]) self._reach.delete(self._index)
def redo(self): def redo(self):
self._reach.insert(self._index) self._reach.insert(self._index)

View File

@ -9,7 +9,10 @@ import numpy as np
import pandas as pd import pandas as pd
from PyQt5 import ( from PyQt5 import (
QtGui, QtWidgets QtGui, QtWidgets,
)
from PyQt5.QtGui import (
QKeySequence,
) )
from PyQt5.QtCore import ( from PyQt5.QtCore import (
Qt, QAbstractTableModel, QModelIndex, Qt, QAbstractTableModel, QModelIndex,
@ -27,12 +30,11 @@ _translate = QCoreApplication.translate
class PandasModelEditable(QAbstractTableModel): class PandasModelEditable(QAbstractTableModel):
def __init__(self, reach, headers=None): def __init__(self, reach, headers=None, undo=None):
QAbstractTableModel.__init__(self) QAbstractTableModel.__init__(self)
data_list = [] data_list = []
self._undo_stack = QUndoStack() self._undo_stack = undo
self._reach = reach self._reach = reach
if headers is None: if headers is None: