Added a undo view and react to change of the cleanness of the undo stack.

This commit is contained in:
2025-12-11 16:01:48 +01:00
parent ec0d72953f
commit 902ed1c84b
2 changed files with 64 additions and 5 deletions

View File

@ -4,6 +4,7 @@
#include <QCloseEvent>
#include <QMessageBox>
#include <QUndoStack>
#include <QUndoView>
#include "../../ApplicationConfig.h"
#include "Dialogs/newitemdialog.h"
@ -20,6 +21,7 @@ MainWindow::MainWindow(QWidget* parent)
ui->setupUi(this);
m_core = std::make_unique<GenericCore>();
setWindowTitle(windowTitle() + " [*]");
/// application icon
const QString iconString = "://feature.png";
@ -173,9 +175,33 @@ void MainWindow::deleteSelectedtItems() {
}
}
void MainWindow::onCleanStateChanged(bool clean) {
qInfo() << "Slot onCleanStateChanged triggered: clean:" << clean;
setWindowModified(!clean);
if (!clean) {
ui->statusbar->clearMessage();
}
}
void MainWindow::onShowUndoViewToggled(bool checked) {
// qInfo() << "Slot onShowUndoViewToggled toggled: checked:" << checked;
// m_undoView->setVisible(checked);
/// workaround until m_showUndoViewAction is checkable
qInfo() << "Slot onShowUndoViewToggled triggered, toggleing undo view...";
Q_UNUSED(checked);
if (m_modelUndoView->isVisible()) {
m_modelUndoView->setVisible(false);
} else {
m_modelUndoView->setVisible(true);
}
}
void MainWindow::createActions() {
// TODO add generic menu actions (file/new, edit/cut, ...)
createFileActions();
createUndoActions();
createEditActions();
}
@ -233,11 +259,15 @@ void MainWindow::createFileActions() {
ui->menu_File->addAction(m_exitAct.get());
}
void MainWindow::createEditActions() {
m_modelUndoStack = m_core->getModUndoStack();
void MainWindow::createUndoActions() {
if (!m_core) {
qCritical() << "No core instance set, aborting...";
return;
}
m_modelUndoStack = m_core->getModelUndoStack();
connect(m_modelUndoStack, &QUndoStack::cleanChanged, this, &MainWindow::onCleanStateChanged);
connect(m_modelUndoStack.get(), SIGNAL(cleanChanged(bool)), this,
SLOT(onCleanStateChanged(bool)));
m_undoAct.reset(m_modelUndoStack->createUndoAction(this, tr("&Undo")));
m_undoAct->setShortcuts(QKeySequence::Undo);
m_undoAct->setStatusTip(tr("Undo the last operation"));
@ -248,6 +278,26 @@ void MainWindow::createEditActions() {
m_redoAct->setStatusTip(tr("Redo the last operation"));
ui->menu_Edit->addAction(m_redoAct.get());
m_modelUndoView = make_unique<QUndoView>(m_modelUndoStack);
m_modelUndoView->setWindowTitle(tr("Undo list"));
m_modelUndoView->setAttribute(Qt::WA_QuitOnClose, false);
m_modelUndoView->setMinimumSize(450, 600);
m_showModelUndoViewAct = make_unique<QAction>(tr("Show undo/redo window"), this);
m_showModelUndoViewAct->setStatusTip(tr("Opens a window displaying the items on the undo stack"));
// TODO showUndoViewAction should be checkable
// m_showUndoViewAction->setCheckable(true);
// connect(m_showUndoViewAction, &QAction::toggled, this, &MainWindow::onShowUndoViewToggled);
connect(m_showModelUndoViewAct.get(), &QAction::triggered, this,
&MainWindow::onShowUndoViewToggled);
// TODO ? add a keyboard short cut?
// m_showUndoViewAction->setShortcuts(QKeySequence::Copy);
ui->menu_View->addAction(m_showModelUndoViewAct.get());
}
void MainWindow::createEditActions() {
m_cutAct = make_unique<QAction>(tr("Cu&t"), this);
m_cutAct->setShortcuts(QKeySequence::Cut);
m_cutAct->setStatusTip(