|
@@ -11,8 +11,8 @@ namespace BansheeEngine
|
|
|
: mUndoStack(nullptr), mRedoStack(nullptr), mUndoStackPtr(0), mUndoNumElements(0), mRedoStackPtr(0)
|
|
: mUndoStack(nullptr), mRedoStack(nullptr), mUndoStackPtr(0), mUndoNumElements(0), mRedoStackPtr(0)
|
|
|
, mRedoNumElements(0), mNextCommandId(0)
|
|
, mRedoNumElements(0), mNextCommandId(0)
|
|
|
{
|
|
{
|
|
|
- mUndoStack = bs_newN<EditorCommand*>(MAX_STACK_ELEMENTS);
|
|
|
|
|
- mRedoStack = bs_newN<EditorCommand*>(MAX_STACK_ELEMENTS);
|
|
|
|
|
|
|
+ mUndoStack = bs_newN<SPtr<EditorCommand>>(MAX_STACK_ELEMENTS);
|
|
|
|
|
+ mRedoStack = bs_newN<SPtr<EditorCommand>>(MAX_STACK_ELEMENTS);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
UndoRedo::~UndoRedo()
|
|
UndoRedo::~UndoRedo()
|
|
@@ -28,7 +28,7 @@ namespace BansheeEngine
|
|
|
if(mUndoNumElements == 0)
|
|
if(mUndoNumElements == 0)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
- EditorCommand* command = removeLastFromUndoStack();
|
|
|
|
|
|
|
+ SPtr<EditorCommand> command = removeLastFromUndoStack();
|
|
|
|
|
|
|
|
mRedoStackPtr = (mRedoStackPtr + 1) % MAX_STACK_ELEMENTS;
|
|
mRedoStackPtr = (mRedoStackPtr + 1) % MAX_STACK_ELEMENTS;
|
|
|
mRedoStack[mRedoStackPtr] = command;
|
|
mRedoStack[mRedoStackPtr] = command;
|
|
@@ -42,7 +42,7 @@ namespace BansheeEngine
|
|
|
if(mRedoNumElements == 0)
|
|
if(mRedoNumElements == 0)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
- EditorCommand* command = mRedoStack[mRedoStackPtr];
|
|
|
|
|
|
|
+ SPtr<EditorCommand> command = mRedoStack[mRedoStackPtr];
|
|
|
mRedoStackPtr = (mRedoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
mRedoStackPtr = (mRedoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
|
mRedoNumElements--;
|
|
mRedoNumElements--;
|
|
|
|
|
|
|
@@ -73,18 +73,16 @@ namespace BansheeEngine
|
|
|
|
|
|
|
|
for(UINT32 i = 0; i < topGroup.numEntries; i++)
|
|
for(UINT32 i = 0; i < topGroup.numEntries; i++)
|
|
|
{
|
|
{
|
|
|
- EditorCommand* command = mUndoStack[mUndoStackPtr];
|
|
|
|
|
|
|
+ mUndoStack[mUndoStackPtr] = SPtr<EditorCommand>();
|
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
|
mUndoNumElements--;
|
|
mUndoNumElements--;
|
|
|
-
|
|
|
|
|
- EditorCommand::destroy(command);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
mGroups.pop();
|
|
mGroups.pop();
|
|
|
clearRedoStack();
|
|
clearRedoStack();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void UndoRedo::registerCommand(EditorCommand* command)
|
|
|
|
|
|
|
+ void UndoRedo::registerCommand(const SPtr<EditorCommand>& command)
|
|
|
{
|
|
{
|
|
|
command->mId = mNextCommandId++;
|
|
command->mId = mNextCommandId++;
|
|
|
addToUndoStack(command);
|
|
addToUndoStack(command);
|
|
@@ -151,9 +149,11 @@ namespace BansheeEngine
|
|
|
clearRedoStack();
|
|
clearRedoStack();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- EditorCommand* UndoRedo::removeLastFromUndoStack()
|
|
|
|
|
|
|
+ SPtr<EditorCommand> UndoRedo::removeLastFromUndoStack()
|
|
|
{
|
|
{
|
|
|
- EditorCommand* command = mUndoStack[mUndoStackPtr];
|
|
|
|
|
|
|
+ SPtr<EditorCommand> command = mUndoStack[mUndoStackPtr];
|
|
|
|
|
+
|
|
|
|
|
+ mUndoStack[mUndoStackPtr] = SPtr<EditorCommand>();
|
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
|
mUndoNumElements--;
|
|
mUndoNumElements--;
|
|
|
|
|
|
|
@@ -173,7 +173,7 @@ namespace BansheeEngine
|
|
|
return command;
|
|
return command;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void UndoRedo::addToUndoStack(EditorCommand* command)
|
|
|
|
|
|
|
+ void UndoRedo::addToUndoStack(const SPtr<EditorCommand>& command)
|
|
|
{
|
|
{
|
|
|
mUndoStackPtr = (mUndoStackPtr + 1) % MAX_STACK_ELEMENTS;
|
|
mUndoStackPtr = (mUndoStackPtr + 1) % MAX_STACK_ELEMENTS;
|
|
|
mUndoStack[mUndoStackPtr] = command;
|
|
mUndoStack[mUndoStackPtr] = command;
|
|
@@ -190,11 +190,9 @@ namespace BansheeEngine
|
|
|
{
|
|
{
|
|
|
while(mUndoNumElements > 0)
|
|
while(mUndoNumElements > 0)
|
|
|
{
|
|
{
|
|
|
- EditorCommand* command = mUndoStack[mUndoStackPtr];
|
|
|
|
|
|
|
+ mUndoStack[mUndoStackPtr] = SPtr<EditorCommand>();
|
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
mUndoStackPtr = (mUndoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
|
mUndoNumElements--;
|
|
mUndoNumElements--;
|
|
|
-
|
|
|
|
|
- EditorCommand::destroy(command);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
while(!mGroups.empty())
|
|
while(!mGroups.empty())
|
|
@@ -205,11 +203,9 @@ namespace BansheeEngine
|
|
|
{
|
|
{
|
|
|
while(mRedoNumElements > 0)
|
|
while(mRedoNumElements > 0)
|
|
|
{
|
|
{
|
|
|
- EditorCommand* command = mRedoStack[mRedoStackPtr];
|
|
|
|
|
|
|
+ mRedoStack[mRedoStackPtr] = SPtr<EditorCommand>();
|
|
|
mRedoStackPtr = (mRedoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
mRedoStackPtr = (mRedoStackPtr - 1) % MAX_STACK_ELEMENTS;
|
|
|
mRedoNumElements--;
|
|
mRedoNumElements--;
|
|
|
-
|
|
|
|
|
- EditorCommand::destroy(command);
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|