Added a undo view and react to change of the cleanness of the undo stack.
This commit is contained in:
@ -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(
|
||||
|
||||
Reference in New Issue
Block a user