From f4c315c1375f64fd4e0f27be88008386788152d8 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sun, 30 Dec 2012 12:29:41 +0100 Subject: [PATCH] Fixed issue that Start/Endrow wasn't saved and loaded Closes #37 --- ogl_editor/src/Editor.c | 20 +++++++------- ogl_editor/src/TrackData.h | 2 ++ ogl_editor/src/TrackView.h | 2 -- ogl_editor/src/loadsave.c | 67 +++++++++++++++++++++++++++------------------- 4 files changed, 51 insertions(+), 40 deletions(-) diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index ddc2410..e0a406d 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -219,7 +219,8 @@ void Editor_create() RemoteConnection_createListner(); s_editorData.trackViewInfo.smallFontId = id; - s_editorData.trackViewInfo.endRow = 10000; + s_editorData.trackData.startRow = 0; + s_editorData.trackData.endRow = 10000; Emgui_setDefaultFont(); } @@ -351,8 +352,8 @@ static void drawStatus() size = drawConnectionStatus(0, sizeY); size += drawCurrentValue(size, sizeY); size += drawNameValue("Row", size, sizeY, &s_editorData.trackViewInfo.rowPos, 0, 20000 - 1, s_currentRow); - size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackViewInfo.startRow, 0, 10000000, s_startRow); - size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow); + size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackData.startRow, 0, 10000000, s_startRow); + size += drawNameValue("End Row", size, sizeY, &s_editorData.trackData.endRow, 0, 10000000, s_endRow); if (getRowPos() != prevRow) RemoteConnection_sendSetRowCommand(getRowPos()); @@ -660,8 +661,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers) row += modifiers & EMGUI_KEY_ALT ? 8 : 1; - if ((modifiers & EMGUI_KEY_COMMAND) || row > viewInfo->endRow) - row = viewInfo->endRow; + if ((modifiers & EMGUI_KEY_COMMAND) || row > trackData->endRow) + row = trackData->endRow; viewInfo->rowPos = row; @@ -709,8 +710,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers) row -= modifiers & EMGUI_KEY_ALT ? 8 : 1; - if ((modifiers & EMGUI_KEY_COMMAND) || row < viewInfo->startRow) - row = viewInfo->startRow; + if ((modifiers & EMGUI_KEY_COMMAND) || row < trackData->startRow) + row = trackData->startRow; viewInfo->rowPos = row; @@ -1035,7 +1036,6 @@ void Editor_scroll(float deltaX, float deltaY, int flags) { int current_row = s_editorData.trackViewInfo.rowPos; int old_offset = s_editorData.trackViewInfo.startPixel; - TrackViewInfo* viewInfo = &s_editorData.trackViewInfo; if (flags & EMGUI_KEY_ALT) { @@ -1055,11 +1055,11 @@ void Editor_scroll(float deltaX, float deltaY, int flags) current_row += (int)deltaY; - if (current_row < viewInfo->startRow || current_row >= viewInfo->endRow) + if (current_row < trackData->startRow || current_row >= trackData->endRow) return; s_editorData.trackViewInfo.startPixel += (int)(deltaX * 4.0f); - s_editorData.trackViewInfo.rowPos = eclampi(current_row, viewInfo->startRow, viewInfo->endRow); + s_editorData.trackViewInfo.rowPos = eclampi(current_row, trackData->startRow, trackData->endRow); RemoteConnection_sendSetRowCommand(s_editorData.trackViewInfo.rowPos); diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index c6f423c..405c293 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -68,6 +68,8 @@ typedef struct TrackData int activeTrack; int lastColor; int trackCount; + int startRow; + int endRow; char* editText; } TrackData; diff --git a/ogl_editor/src/TrackView.h b/ogl_editor/src/TrackView.h index 670e16a..c175df3 100644 --- a/ogl_editor/src/TrackView.h +++ b/ogl_editor/src/TrackView.h @@ -14,8 +14,6 @@ typedef struct TrackViewInfo int windowSizeX; int windowSizeY; int rowPos; - int startRow; - int endRow; int startTrack; int startPixel; int smallFontId; diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index 6ac5ece..f4564bc 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -31,6 +31,18 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { const char* element_name = mxmlGetElement(node); + if (!strcmp("tracks", element_name)) + { + const char* start_row = mxmlElementGetAttr(node, "startRow"); + const char* end_row = mxmlElementGetAttr(node, "endRow"); + + if (start_row) + trackData->startRow = atoi(start_row); + + if (end_row) + trackData->endRow = atoi(end_row); + } + if (!strcmp("track", element_name)) { int i; @@ -178,6 +190,26 @@ static const char* whitespaceCallback(mxml_node_t* node, int where) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void setElementInt(mxml_node_t* node, const char* attr, const char* format, int v) +{ + char temp[256]; + memset(temp, 0, sizeof(temp)); + sprintf(temp, format, v); + mxmlElementSetAttr(node, attr, temp); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void setElementFloat(mxml_node_t* node, char* attr, float v) +{ + char temp[256]; + memset(temp, 0, sizeof(temp)); + sprintf(temp, "%f", v); + mxmlElementSetAttr(node, attr, temp); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + int LoadSave_saveRocketXML(const char* path, TrackData* trackData) { mxml_node_t* xml; @@ -190,47 +222,26 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) xml = mxmlNewXML("1.0"); tracks = mxmlNewElement(xml, "tracks"); - mxmlElementSetAttr(tracks, "rows", "10000"); // TODO: Fix me + mxmlElementSetAttr(tracks, "rows", "10000"); + setElementInt(tracks, "startRow", "%d", trackData->startRow); + setElementInt(tracks, "endRow", "%d", trackData->endRow); for (p = 0; p < sync_data->num_tracks; ++p) { int i; - char temp[256]; const struct sync_track* t = sync_data->tracks[p]; mxml_node_t* track = mxmlNewElement(tracks, "track"); - memset(temp, 0, sizeof(temp)); - sprintf(temp, "%08x", trackData->tracks[p].color); - - // setup the elements for the trak - mxmlElementSetAttr(track, "name", t->name); - mxmlElementSetAttr(track, "color", temp); mxmlElementSetAttr(track, "folded", trackData->tracks[p].folded ? "1" : "0"); + setElementInt(track, "color", "%08x", trackData->tracks[p].color); for (i = 0; i < (int)t->num_keys; ++i) { - char temp0[256]; - char temp1[256]; - char temp2[256]; - - int row = (int)t->keys[i].row; - float value = t->keys[i].value; - char interpolationType = (char)t->keys[i].type; - mxml_node_t* key = mxmlNewElement(track, "key"); - - memset(temp0, 0, sizeof(temp0)); - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - - sprintf(temp0, "%d", row); - sprintf(temp1, "%f", value); - sprintf(temp2, "%d", interpolationType); - - mxmlElementSetAttr(key, "row", temp0); - mxmlElementSetAttr(key, "value", temp1); - mxmlElementSetAttr(key, "interpolation", temp2); + setElementInt(key, "row", "%d", (int)t->keys[i].row); + setElementFloat(key, "value", t->keys[i].value); + setElementInt(key, "interpolation", "%d", (int)t->keys[i].type); } }