diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index ec57f1d..a5971bb 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -224,20 +224,12 @@ static void drawStatus() Emgui_setDefaultFont(); } -static bool flip = true; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Editor_update() { Emgui_begin(); - Emgui_radioButtonImage("/Users/emoon/code/rocket/ogl_editor/data/images/arrow_left.png", 0, - "/Users/emoon/code/rocket/ogl_editor/data/images/arrow_right.png", 0, - EMGUI_LOCATION_FILE, Emgui_color32(255, 255, 255, 255), 10, 10, &flip); - - rlog(R_INFO, "%d\n", flip); - drawStatus(); TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData); @@ -430,7 +422,7 @@ bool Editor_keyDown(int key, int modifiers) if (modifiers & EMGUI_KEY_ALT) { - trackData->folded[getActiveTrack()] = true; + trackData->tracks[getActiveTrack()].folded = true; Editor_update(); return true; } @@ -461,7 +453,7 @@ bool Editor_keyDown(int key, int modifiers) if (modifiers & EMGUI_KEY_ALT) { - trackData->folded[getActiveTrack()] = false; + trackData->tracks[getActiveTrack()].folded = false; Editor_update(); return true; } diff --git a/ogl_editor/src/TrackData.c b/ogl_editor/src/TrackData.c index 061c0fe..afd418d 100644 --- a/ogl_editor/src/TrackData.c +++ b/ogl_editor/src/TrackData.c @@ -8,9 +8,8 @@ int TrackData_createGetTrack(TrackData* trackData, const char* name) if (index < 0) { index = sync_create_track(&trackData->syncData, name); - trackData->colors[index] = TrackData_getNextColor(trackData); - trackData->order[trackData->orderCount] = index; - trackData->orderCount++; + memset(&trackData->tracks[index], 0, sizeof(Track)); + trackData->tracks[index].color = TrackData_getNextColor(trackData); } return index; diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index 939e2cb..e995da5 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -12,16 +12,42 @@ enum /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +enum GroupType +{ + GROUP_TYPE_TRACK, + GROUP_TYPE_GROUP, +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +typedef struct Track +{ + uint32_t color; + bool hidden; + bool folded; + +} Track; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Grouping (notice that even one track without group becomes it own group to keep the code easier) + +typedef struct Group +{ + enum GroupType type; + Track** track; + int trackCount; +} Group; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + typedef struct TrackData { struct sync_data syncData; - uint32_t colors[EDITOR_MAX_TRACKS]; - bool folded[EDITOR_MAX_TRACKS]; - bool hidden[EDITOR_MAX_TRACKS]; - int order[EDITOR_MAX_TRACKS]; - int orderCount; + Track tracks[EDITOR_MAX_TRACKS]; + Group groups[EDITOR_MAX_TRACKS]; int activeTrack; int lastColor; + int trackCount; char* editText; } TrackData; diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index 4beeec9..d1d2c5d 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -139,7 +139,7 @@ static void renderInterpolation(const struct TrackInfo* info, struct sync_track* } if (info->viewInfo) - Emgui_fill(color, x + (size - 4), y - font_size_half, 2, (info->endSizeY - y) + font_size - 1); + Emgui_fill(color, x + (size - 8), y - font_size_half, 2, (info->endSizeY - y) + font_size - 1); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -184,16 +184,16 @@ static int renderChannel(struct TrackInfo* info, int startX, int editRow, int tr const int endPos = info->endPos; uint32_t borderColor = Emgui_color32(40, 40, 40, 255); struct sync_track* track = 0; - const uint32_t color = info->trackData->colors[trackIndex]; + const uint32_t color = info->trackData->tracks[trackIndex].color; bool folded; Emgui_radioButtonImage(g_arrow_left_png, g_arrow_left_png_len, g_arrow_right_png, g_arrow_right_png_len, EMGUI_LOCATION_MEMORY, Emgui_color32(255, 255, 255, 255), startX + 6, info->startY - (font_size + 5), - &info->trackData->folded[trackIndex]); + &info->trackData->tracks[trackIndex].folded); - folded = info->trackData->folded[trackIndex]; + folded = info->trackData->tracks[trackIndex].folded; if (info->trackData->syncData.tracks) track = info->trackData->syncData.tracks[trackIndex]; diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index 686bccb..8fb3892 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -59,6 +59,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { int i; struct sync_track* track; + Track* t; // TODO: Create the new track/channel here @@ -69,24 +70,23 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) track_index = TrackData_createGetTrack(trackData, track_name); printf("track_index %d\n", track_index); + t = &trackData->tracks[track_index]; track = trackData->syncData.tracks[track_index]; - if (!color_text && trackData->colors[track_index] == 0) + if (!color_text && t->color == 0) { - trackData->colors[track_index] = TrackData_getNextColor(trackData); + t->color = TrackData_getNextColor(trackData); } else { if (color_text) - trackData->colors[track_index] = atoi(color_text); + t->color = atoi(color_text); } - trackData->folded[track_index] = false; - if (folded_text) { if (folded_text[0] == '1') - trackData->folded[track_index] = true; + t->folded = true; } // If we already have this track loaded we delete all the existing keys @@ -191,13 +191,13 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) mxml_node_t* track = mxmlNewElement(tracks, "track"); memset(temp, 0, sizeof(temp)); - sprintf(temp, "%d", trackData->colors[p]); + sprintf(temp, "%d", trackData->tracks[p].color); // setup the elements for the trak mxmlElementSetAttr(track, "name", t->name); mxmlElementSetAttr(track, "color", temp); - mxmlElementSetAttr(track, "folded", trackData->folded[p] ? "1" : "0"); + mxmlElementSetAttr(track, "folded", trackData->tracks[p].folded ? "1" : "0"); for (i = 0; i < (int)t->num_keys; ++i) {