From dbbc2c7b4a6afade14a83b512237d7e121f58e81 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Fri, 4 Jan 2013 14:41:41 +0100 Subject: [PATCH] Implemented undo support for breakpoints Closes #53 --- ogl_editor/src/Commands.c | 36 ++++++++++++++++++++++++++++++++++++ ogl_editor/src/Commands.h | 2 +- ogl_editor/src/Editor.c | 2 +- ogl_editor/src/TrackData.c | 2 +- ogl_editor/src/TrackData.h | 2 +- 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/ogl_editor/src/Commands.c b/ogl_editor/src/Commands.c index 760715c..5ba8614 100644 --- a/ogl_editor/src/Commands.c +++ b/ogl_editor/src/Commands.c @@ -1,5 +1,6 @@ #include "Commands.h" #include "RemoteConnection.h" +#include "TrackData.h" #include "Types.h" #include "../../sync/sync.h" #include "../../sync/track.h" @@ -324,6 +325,41 @@ void Commands_addOrUpdateKey(int track, struct track_key* key) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +struct BookmarkData +{ + struct TrackData* trackData; + int row; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void toggleBookmark(void* userData) +{ + struct BookmarkData* data = (struct BookmarkData*)userData; + TrackData_toggleBookmark(data->trackData, data->row); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void Commands_toggleBookmark(TrackData* trackData, int row) +{ + struct BookmarkData* data; + Command* command; + + command = malloc(sizeof(Command)); + memset(command, 0, sizeof(Command)); + + command->userData = data = malloc(sizeof(struct BookmarkData)); + command->exec = toggleBookmark; + command->undo = toggleBookmark; + data->trackData = trackData; + data->row = row; + + execCommand(command); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + void Commands_undo() { Command* command; diff --git a/ogl_editor/src/Commands.h b/ogl_editor/src/Commands.h index d190c3f..6f2f2a0 100644 --- a/ogl_editor/src/Commands.h +++ b/ogl_editor/src/Commands.h @@ -20,7 +20,7 @@ void Commands_redo(); void Commands_deleteKey(int track, int row); void Commands_addOrUpdateKey(int track, struct track_key* key); -void Commands_toogleBookmark(int track, int row); +void Commands_toggleBookmark(struct TrackData* trackData, int row); void Commands_updateKey(int track, struct track_key* key); void Commands_beginMulti(const char* name); // Used (for example) when changing many value at the same time void Commands_endMulti(); diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index cc578c2..ee9d588 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -1244,7 +1244,7 @@ static void onFoldGroup(bool fold) static void onToggleBookmark() { - TrackData_toogleBookmark(getTrackData(), getRowPos()); + Commands_toggleBookmark(getTrackData(), getRowPos()); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/TrackData.c b/ogl_editor/src/TrackData.c index b7baaab..9f9ec19 100644 --- a/ogl_editor/src/TrackData.c +++ b/ogl_editor/src/TrackData.c @@ -198,7 +198,7 @@ static void sortArray(int* bookmarks, int count) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void TrackData_toogleBookmark(TrackData* trackData, int row) +void TrackData_toggleBookmark(TrackData* trackData, int row) { int i, count = trackData->bookmarkCount; int* bookmarks = trackData->bookmarks; diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index 3e3c193..413726d 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -79,7 +79,7 @@ typedef struct TrackData /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// bool TrackData_hasBookmark(TrackData* trackData, int row); -void TrackData_toogleBookmark(TrackData* trackData, int row); +void TrackData_toggleBookmark(TrackData* trackData, int row); int TrackData_getNextBookmark(TrackData* trackData, int row); int TrackData_getPrevBookmark(TrackData* trackData, int row);