mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
don't merge actions that have been undone before, for example:
typing1 Ctrl+Z Ctrl+Y typing2 Ctrl+Z removes just typing2, not both. git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1323 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -18,6 +18,7 @@ DECLARE_TYPEOF_COLLECTION(ActionListener*);
|
||||
|
||||
ActionStack::ActionStack()
|
||||
: save_point(nullptr)
|
||||
, last_was_add(false)
|
||||
{}
|
||||
|
||||
ActionStack::~ActionStack() {
|
||||
@@ -36,6 +37,7 @@ void ActionStack::addAction(Action* action, bool allow_merge) {
|
||||
redo_actions.clear();
|
||||
// try to merge?
|
||||
if (allow_merge && !undo_actions.empty() &&
|
||||
last_was_add && // never merge with something that was redone once already
|
||||
undo_actions.back() != save_point && // never merge with the save point
|
||||
undo_actions.back()->merge(*action) // merged with top undo action
|
||||
) {
|
||||
@@ -43,6 +45,7 @@ void ActionStack::addAction(Action* action, bool allow_merge) {
|
||||
} else {
|
||||
undo_actions.push_back(action);
|
||||
}
|
||||
last_was_add = true;
|
||||
}
|
||||
|
||||
void ActionStack::undo() {
|
||||
@@ -54,6 +57,7 @@ void ActionStack::undo() {
|
||||
// move to redo stack
|
||||
undo_actions.pop_back();
|
||||
redo_actions.push_back(action);
|
||||
last_was_add = false;
|
||||
}
|
||||
void ActionStack::redo() {
|
||||
assert(canRedo());
|
||||
@@ -64,6 +68,7 @@ void ActionStack::redo() {
|
||||
// move to undo stack
|
||||
redo_actions.pop_back();
|
||||
undo_actions.push_back(action);
|
||||
last_was_add = false;
|
||||
}
|
||||
|
||||
bool ActionStack::canUndo() const {
|
||||
|
||||
@@ -114,6 +114,8 @@ class ActionStack {
|
||||
vector<Action*> redo_actions;
|
||||
/// Point at which the file was saved, corresponds to the top of the undo stack at that point
|
||||
Action* save_point;
|
||||
/// Was the last thing the user did addAction? (as opposed to undo/redo)
|
||||
bool last_was_add;
|
||||
/// Objects that are listening to actions
|
||||
vector<ActionListener*> listeners;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user