fixed pasting and removed a mem-leak

This commit is contained in:
Erik Faye-Lund 2008-02-19 01:18:02 +00:00
parent 9767ad5852
commit 74da2a1c62
4 changed files with 21 additions and 2 deletions

View File

@ -1,5 +1,11 @@
#include "syncdocument.h" #include "syncdocument.h"
SyncDocument::~SyncDocument()
{
clearUndoStack();
clearRedoStack();
}
#import <msxml4.dll> named_guids #import <msxml4.dll> named_guids
bool SyncDocument::load(const std::string &fileName) bool SyncDocument::load(const std::string &fileName)

View File

@ -13,6 +13,7 @@ class SyncDocument : public sync::Data
{ {
public: public:
SyncDocument() : sync::Data(), clientPaused(true) {} SyncDocument() : sync::Data(), clientPaused(true) {}
~SyncDocument();
void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key) void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key)
{ {
@ -232,6 +233,16 @@ public:
return true; return true;
} }
void clearUndoStack()
{
while (!undoStack.empty())
{
Command *cmd = undoStack.top();
undoStack.pop();
delete cmd;
}
}
void clearRedoStack() void clearRedoStack()
{ {
while (!redoStack.empty()) while (!redoStack.empty())

View File

@ -242,7 +242,7 @@ int _tmain(int argc, _TCHAR* argv[])
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
// _CrtSetBreakAlloc(137); // _CrtSetBreakAlloc(254);
#endif #endif
HINSTANCE hInstance = GetModuleHandle(NULL); HINSTANCE hInstance = GetModuleHandle(NULL);

View File

@ -452,7 +452,9 @@ void TrackView::editPaste()
struct CopyEntry ce; struct CopyEntry ce;
memcpy(&ce, src, sizeof(CopyEntry)); memcpy(&ce, src, sizeof(CopyEntry));
SyncDocument::Command *cmd = document->getSetKeyFrameCommand(editTrack + ce.track, editRow + ce.row, ce.keyFrame); size_t trackIndex = document->getTrackIndexFromPos(editTrack + ce.track);
SyncDocument::Command *cmd = document->getSetKeyFrameCommand(int(trackIndex), editRow + ce.row, ce.keyFrame);
multiCmd->addCommand(cmd); multiCmd->addCommand(cmd);
src += sizeof(CopyEntry); src += sizeof(CopyEntry);
} }