added 'undone' parameter to onAction

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@43 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
twanvl
2006-10-20 14:24:36 +00:00
parent 44b516036d
commit 20f0efacd7
17 changed files with 93 additions and 55 deletions
+5 -3
View File
@@ -29,7 +29,7 @@ void ActionStack::add(Action* action, bool allow_merge) {
if (!action) return; // no action
action->perform(false); // TODO: delete action if perform throws
redo_actions.clear();
tellListeners(*action);
tellListeners(*action, false);
// try to merge?
if (allow_merge && !undo_actions.empty() && undo_actions.back()->merge(action)) {
// merged with top undo action
@@ -43,6 +43,7 @@ void ActionStack::undo() {
assert(canUndo());
Action* action = undo_actions.back();
action->perform(true);
tellListeners(*action, true);
// move to redo stack
undo_actions.pop_back();
redo_actions.push_back(action);
@@ -51,6 +52,7 @@ void ActionStack::redo() {
assert(canRedo());
Action* action = redo_actions.back();
action->perform(false);
tellListeners(*action, false);
// move to undo stack
redo_actions.pop_back();
undo_actions.push_back(action);
@@ -103,6 +105,6 @@ void ActionStack::removeListener(ActionListener* listener) {
listeners.end()
);
}
void ActionStack::tellListeners(const Action& action) {
FOR_EACH(l, listeners) l->onAction(action);
void ActionStack::tellListeners(const Action& action, bool undone) {
FOR_EACH(l, listeners) l->onAction(action, undone);
}
+3 -2
View File
@@ -47,7 +47,8 @@ class Action {
/// Base class/interface for objects that listen to actions
class ActionListener {
public:
virtual void onAction(const Action& a) = 0;
/// Notification that an action a has been performed or undone
virtual void onAction(const Action& a, bool undone) = 0;
};
// ----------------------------------------------------------------------------- : Action stack
@@ -98,7 +99,7 @@ class ActionStack {
/// Remove an action listener
void removeListener(ActionListener* listener);
/// Tell all listeners about an action
void tellListeners(const Action&);
void tellListeners(const Action&, bool undone);
private:
/// Actions to be undone