From 8c00cec3ac6975aeddda8e68882df6ec601e6f1e Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 31 Dec 2012 14:18:51 +0100 Subject: [PATCH] Support for saving fold status of groups Closes #38 --- ogl_editor/src/loadsave.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index 31864a6..17491e7 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -10,10 +10,14 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static const char* s_foldedGroupNames[16 * 1024]; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { struct track_key k; - int is_key, track_index = 0; + int g, i, foldedGroupCount = 0, is_key, track_index = 0; mxml_node_t* node = rootNode; // Traverse the tracks node data @@ -31,6 +35,11 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { const char* element_name = mxmlGetElement(node); + if (!strcmp("group", element_name)) + { + s_foldedGroupNames[foldedGroupCount++] = mxmlElementGetAttr(node, "name"); + } + if (!strcmp("tracks", element_name)) { const char* start_row = mxmlElementGetAttr(node, "startRow"); @@ -117,6 +126,20 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) TrackData_linkGroups(trackData); + // Apply fold status on the groups + + for (i = 0; i < foldedGroupCount; ++i) + { + for (g = 0; g < trackData->groupCount; ++g) + { + if (!strcmp(s_foldedGroupNames[i], trackData->groups[g].name)) + { + trackData->groups[i].folded = true; + break; + } + } + } + trackData->tracks[0].selected = true; } @@ -182,6 +205,9 @@ static const char* whitespaceCallback(mxml_node_t* node, int where) if (!strcmp("track", name)) return "\t"; + + if (!strcmp("group", name)) + return "\t"; } if (where == MXML_WS_AFTER_OPEN) @@ -222,6 +248,21 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) struct sync_data* sync_data = &trackData->syncData; xml = mxmlNewXML("1.0"); + + // save groups that are folded + + for (p = 0; p < trackData->groupCount; ++p) + { + mxml_node_t* node; + Group* group = &trackData->groups[p]; + + if (!group->folded) + continue; + + node = mxmlNewElement(xml, "group"); + mxmlElementSetAttr(node, "name", group->name); + } + tracks = mxmlNewElement(xml, "tracks"); mxmlElementSetAttr(tracks, "rows", "10000");