logic: UndoRedo

UndoRedo working for ActiveTokensMessages
This commit is contained in:
Andreas Stallinger
2015-02-03 10:47:56 +01:00
parent 00f15a2ce3
commit 944554d034
27 changed files with 588 additions and 2 deletions
+4
View File
@@ -21,6 +21,8 @@ add_files(
qt/element/QtSmartSearchBox.h
qt/element/QtStatusBar.cpp
qt/element/QtStatusBar.h
qt/element/QtUndoRedo.cpp
qt/element/QtUndoRedo.h
qt/graphics/QtGraphicsRoundedRectItem.cpp
qt/graphics/QtGraphicsRoundedRectItem.h
@@ -58,6 +60,8 @@ add_files(
qt/view/QtSearchView.h
qt/view/QtStatusBarView.cpp
qt/view/QtStatusBarView.h
qt/view/QtUndoRedoView.cpp
qt/view/QtUndoRedoView.h
qt/view/QtViewFactory.cpp
qt/view/QtViewFactory.h
qt/view/QtViewWidgetWrapper.cpp
+22
View File
@@ -13,8 +13,10 @@
#include "utility/messaging/type/MessageFind.h"
#include "utility/messaging/type/MessageLoadProject.h"
#include "utility/messaging/type/MessageLoadSource.h"
#include "utility/messaging/type/MessageRedo.h"
#include "utility/messaging/type/MessageRefresh.h"
#include "utility/messaging/type/MessageSaveProject.h"
#include "utility/messaging/type/MessageUndo.h"
QtMainWindow::QtMainWindow()
{
@@ -23,6 +25,7 @@ QtMainWindow::QtMainWindow()
setDockNestingEnabled(true);
setupProjectMenu();
setupEditMenu();
setupViewMenu();
setupFindMenu();
setupHelpMenu();
@@ -73,6 +76,16 @@ void QtMainWindow::openProject(const QString &path)
}
}
void QtMainWindow::undo()
{
MessageUndo().dispatch();
}
void QtMainWindow::redo()
{
MessageRedo().dispatch();
}
void QtMainWindow::saveProject()
{
MessageSaveProject("").dispatch();
@@ -216,6 +229,15 @@ void QtMainWindow::setupViewMenu()
menu->addAction(tr("&Refresh"), this, SLOT(refresh()), QKeySequence::Refresh);
}
void QtMainWindow::setupEditMenu()
{
QMenu *menu = new QMenu(tr("&Edit"), this);
menuBar()->addMenu(menu);
menu->addAction(tr("Undo"), this, SLOT(undo()), QKeySequence::Undo );
menu->addAction(tr("Redo"), this, SLOT(redo()), QKeySequence::Redo );
}
void QtMainWindow::setupFindMenu()
{
QMenu *menu = new QMenu(tr("&Find"), this);
+3
View File
@@ -35,8 +35,11 @@ public slots:
void refresh();
void saveProject();
void saveAsProject();
void undo();
void redo();
private:
void setupEditMenu();
void setupProjectMenu();
void setupViewMenu();
void setupFindMenu();
+61
View File
@@ -0,0 +1,61 @@
#include "qt/element/QtUndoRedo.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <utility/messaging/type/MessageUndo.h>
#include <utility/messaging/type/MessageRedo.h>
QtUndoRedo::QtUndoRedo()
{
setObjectName("undo_redo_bar");
m_undoButton = new QPushButton(this);
m_undoButton->setObjectName("undo_button");
m_undoButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
m_undoButton->setIcon(QIcon("data/gui/undoredo_view/images/arrow_left.png"));
m_undoButton->setEnabled(false);
m_redoButton = new QPushButton(this);
m_redoButton->setObjectName("redo_button");
m_redoButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
m_redoButton->setIcon(QIcon("data/gui/undoredo_view/images/arrow_right.png"));
m_redoButton->setEnabled(false);
QBoxLayout* layout = new QHBoxLayout();
layout->setSpacing(0);
layout->setAlignment(Qt::AlignTop);
setLayout(layout);
layout->addWidget(m_undoButton);
layout->addSpacing(2);
layout->addWidget(m_redoButton);
layout->addStretch();
connect(m_undoButton, SIGNAL(clicked()), this, SLOT(undo()));
connect(m_redoButton, SIGNAL(clicked()), this, SLOT(redo()));
}
QtUndoRedo::~QtUndoRedo()
{
}
void QtUndoRedo::undo()
{
MessageUndo().dispatch();
}
void QtUndoRedo::redo()
{
MessageRedo().dispatch();
}
void QtUndoRedo::setUndoButtonEnabled(bool enabled)
{
m_undoButton->setEnabled(enabled);
}
void QtUndoRedo::setRedoButtonEnabled(bool enabled)
{
m_redoButton->setEnabled(enabled);
}
+31
View File
@@ -0,0 +1,31 @@
#ifndef QT_UNDO_REDO_H
#define QT_UNDO_REDO_H
#include <string>
#include <QFrame>
class QPushButton;
class QtUndoRedo
: public QFrame
{
Q_OBJECT
public:
QtUndoRedo();
~QtUndoRedo();
void setRedoButtonEnabled(bool enabled);
void setUndoButtonEnabled(bool enabled);
private slots:
void undo();
void redo();
private:
QPushButton* m_undoButton;
QPushButton* m_redoButton;
};
#endif // QT_UNDO_REDO_H
+60
View File
@@ -0,0 +1,60 @@
#include "qt/view/QtUndoRedoView.h"
#include "qt/view/QtMainView.h"
#include "qt/view/QtViewWidgetWrapper.h"
#include "utility/text/TextAccess.h"
QtUndoRedoView::QtUndoRedoView(ViewLayout* viewLayout)
: UndoRedoView(viewLayout)
, m_setRedoButtonEnabledFunctor(std::bind(&QtUndoRedoView::doSetRedoButtonEnabled, this, std::placeholders::_1))
, m_setUndoButtonEnabledFunctor(std::bind(&QtUndoRedoView::doSetUndoButtonEnabled, this, std::placeholders::_1))
{
m_widget = std::make_shared<QtUndoRedo>();
setStyleSheet();
}
QtUndoRedoView::~QtUndoRedoView()
{
}
void QtUndoRedoView::createWidgetWrapper()
{
setWidgetWrapper(std::make_shared<QtViewWidgetWrapper>(m_widget));
}
void QtUndoRedoView::initView()
{
}
void QtUndoRedoView::refreshView()
{
}
void QtUndoRedoView::setStyleSheet()
{
std::string css = TextAccess::createFromFile("data/gui/undoredo_view/undoredo_view.css")->getText();
m_widget->setStyleSheet(css.c_str());
}
void QtUndoRedoView::doSetRedoButtonEnabled(bool enabled)
{
m_widget->setRedoButtonEnabled(enabled);
}
void QtUndoRedoView::doSetUndoButtonEnabled(bool enabled)
{
m_widget->setUndoButtonEnabled(enabled);
}
void QtUndoRedoView::setRedoButtonEnabled(bool enabled)
{
m_setRedoButtonEnabledFunctor(enabled);
}
void QtUndoRedoView::setUndoButtonEnabled(bool enabled)
{
m_setUndoButtonEnabledFunctor(enabled);
}
+37
View File
@@ -0,0 +1,37 @@
#ifndef QT_UNDO_REDO_VIEW_H
#define QT_UNDO_REDO_VIEW_H
#include <memory>
#include <string>
#include "component/view/UndoRedoView.h"
#include "qt/element/QtUndoRedo.h"
#include "qt/utility/QtThreadedFunctor.h"
class QtUndoRedoView : public UndoRedoView
{
public:
QtUndoRedoView(ViewLayout* viewLayout);
~QtUndoRedoView();
// View implementation
virtual void createWidgetWrapper();
virtual void initView();
virtual void refreshView();
// UndoRedo view implementation
virtual void setRedoButtonEnabled(bool enabled);
virtual void setUndoButtonEnabled(bool enabled);
private:
void doSetRedoButtonEnabled(bool enabled);
void doSetUndoButtonEnabled(bool enabled);
QtThreadedFunctor<bool> m_setRedoButtonEnabledFunctor;
QtThreadedFunctor<bool> m_setUndoButtonEnabledFunctor;
void setStyleSheet();
std::shared_ptr<QtUndoRedo> m_widget;
};
#endif // !QT_UNDO_REDO_VIEW_H
+6
View File
@@ -5,6 +5,7 @@
#include "qt/view/QtMainView.h"
#include "qt/view/QtSearchView.h"
#include "qt/view/QtStatusBarView.h"
#include "qt/view/QtUndoRedoView.h"
QtViewFactory::QtViewFactory()
{
@@ -38,3 +39,8 @@ std::shared_ptr<StatusBarView> QtViewFactory::createStatusBarView(ViewLayout* vi
{
return View::createAndDontAddToLayout<QtStatusBarView>(viewLayout);
}
std::shared_ptr<UndoRedoView> QtViewFactory::createUndoRedoView(ViewLayout* viewLayout) const
{
return View::create<QtUndoRedoView>(viewLayout);
}
+1
View File
@@ -14,6 +14,7 @@ public:
virtual std::shared_ptr<GraphView> createGraphView(ViewLayout* viewLayout) const;
virtual std::shared_ptr<SearchView> createSearchView(ViewLayout* viewLayout) const;
virtual std::shared_ptr<StatusBarView> createStatusBarView(ViewLayout* viewLayout) const;
virtual std::shared_ptr<UndoRedoView> createUndoRedoView(ViewLayout* viewLayout) const;
};
#endif // QT_VIEW_FACTORY_H