17 #include "vtkCommand.h"
18 #include "vtkObjectFactory.h"
25 this->Internal =
new vtkUndoStackInternal;
34 delete this->Internal;
40 this->Internal->UndoStack.clear();
41 this->Internal->RedoStack.clear();
49 this->Internal->RedoStack.clear();
51 while (this->Internal->UndoStack.size() >=
static_cast<unsigned int>(this->StackDepth) &&
54 this->Internal->UndoStack.erase(this->Internal->UndoStack.begin());
57 this->Internal->UndoStack.push_back(vtkUndoStackInternal::Element(label, changeSet));
64 return static_cast<unsigned int>(this->Internal->UndoStack.size());
70 return static_cast<unsigned int>(this->Internal->RedoStack.size());
76 if (
position >= this->Internal->UndoStack.size())
80 position = (
static_cast<unsigned int>(this->Internal->UndoStack.size()) -
position) - 1;
81 return this->Internal->UndoStack[
position].Label.c_str();
87 if (
position >= this->Internal->RedoStack.size())
91 position = (
static_cast<unsigned int>(this->Internal->RedoStack.size()) -
position) - 1;
92 return this->Internal->RedoStack[
position].Label.c_str();
98 if (this->Internal->UndoStack.empty())
103 this->InvokeEvent(vtkCommand::StartEvent);
104 int status = this->Internal->UndoStack.back().UndoSet.GetPointer()->Undo();
109 this->InvokeEvent(vtkCommand::EndEvent);
110 this->InUndo =
false;
117 if (this->Internal->RedoStack.empty())
122 this->InvokeEvent(vtkCommand::StartEvent);
123 int status = this->Internal->RedoStack.back().UndoSet.GetPointer()->Redo();
128 this->InvokeEvent(vtkCommand::EndEvent);
129 this->InRedo =
false;
136 if (this->Internal->UndoStack.empty())
140 this->Internal->RedoStack.push_back(this->Internal->UndoStack.back());
141 this->Internal->UndoStack.pop_back();
148 if (this->Internal->RedoStack.empty())
152 this->Internal->UndoStack.push_back(this->Internal->RedoStack.back());
153 this->Internal->RedoStack.pop_back();
164 return this->Internal->UndoStack.back().UndoSet.GetPointer();
174 return this->Internal->RedoStack.back().UndoSet.GetPointer();
180 this->Superclass::PrintSelf(os, indent);
181 os << indent <<
"InUndo: " << this->InUndo <<
endl;
182 os << indent <<
"InRedo: " << this->InRedo <<
endl;
const char * GetRedoSetLabel(unsigned int position)
unsigned int GetNumberOfUndoSets()
void PrintSelf(ostream &os, vtkIndent indent) override
unsigned int GetNumberOfRedoSets()
virtual void Push(const char *label, vtkUndoSet *changeSet)
virtual vtkUndoSet * GetNextUndoSet()
virtual vtkUndoSet * GetNextRedoSet()
const char * GetUndoSetLabel(unsigned int position)
QTextStream & endl(QTextStream &stream)
vtkStandardNewMacro(vtkUndoStack)