Added undo/redo support to the client

This commit is contained in:
Atlante45 2014-04-03 16:51:08 -07:00
parent 42f47f5db2
commit d3ce2c7640
3 changed files with 54 additions and 1 deletions

View File

@ -22,6 +22,7 @@
#include <QSettings>
#include <QStringList>
#include <QTouchEvent>
#include <QUndoStack>
#include <NetworkPacket.h>
#include <NodeList.h>
@ -176,6 +177,7 @@ public:
Visage* getVisage() { return &_visage; }
SixenseManager* getSixenseManager() { return &_sixenseManager; }
BandwidthMeter* getBandwidthMeter() { return &_bandwidthMeter; }
QUndoStack* getUndoStack() { return &_undoStack; }
/// if you need to access the application settings, use lockSettings()/unlockSettings()
QSettings* lockSettings() { _settingsMutex.lock(); return _settings; }
@ -362,6 +364,8 @@ private:
QMutex _settingsMutex;
QSettings* _settings;
QUndoStack _undoStack;
glm::vec3 _gravity;
// Frame Rate Measurement

View File

@ -161,6 +161,14 @@ Menu::Menu() :
QMenu* editMenu = addMenu("Edit");
QUndoStack* undoStack = Application::getInstance()->getUndoStack();
QAction* undoAction = undoStack->createUndoAction(editMenu);
QAction* redoAction = undoStack->createRedoAction(editMenu);
addActionToQMenuAndActionHash(editMenu,
undoAction);
addActionToQMenuAndActionHash(editMenu,
redoAction);
addActionToQMenuAndActionHash(editMenu,
MenuOption::Preferences,
@ -620,6 +628,41 @@ QAction* Menu::addActionToQMenuAndActionHash(QMenu* destinationMenu,
return action;
}
QAction* Menu::addActionToQMenuAndActionHash(QMenu* destinationMenu,
QAction* action,
const QString& actionName,
const QKeySequence& shortcut,
QAction::MenuRole role,
int menuItemLocation) {
QAction* actionBefore = NULL;
if (menuItemLocation >= 0 && destinationMenu->actions().size() > menuItemLocation) {
actionBefore = destinationMenu->actions()[menuItemLocation];
}
if (!actionName.isEmpty()) {
action->setText(actionName);
}
if (shortcut != 0) {
action->setShortcut(shortcut);
}
if (role != QAction::NoRole) {
action->setMenuRole(role);
}
if (!actionBefore) {
destinationMenu->addAction(action);
} else {
destinationMenu->insertAction(actionBefore, action);
}
_actionHash.insert(action->text(), action);
return action;
}
QAction* Menu::addCheckableActionToQMenuAndActionHash(QMenu* destinationMenu,
const QString& actionName,
const QKeySequence& shortcut,

View File

@ -102,7 +102,13 @@ public:
const char* member = NULL,
QAction::MenuRole role = QAction::NoRole,
int menuItemLocation = UNSPECIFIED_POSITION);
QAction* addActionToQMenuAndActionHash(QMenu* destinationMenu,
QAction* action,
const QString& actionName = QString(),
const QKeySequence& shortcut = 0,
QAction::MenuRole role = QAction::NoRole,
int menuItemLocation = UNSPECIFIED_POSITION);
void removeAction(QMenu* menu, const QString& actionName);
bool goToDestination(QString destination);