Data restructuring and preparing for group support

This commit is contained in:
Daniel Collin 2012-11-11 19:39:31 +01:00
parent 7245a2cd40
commit d33792841c
5 changed files with 47 additions and 30 deletions

View File

@ -224,20 +224,12 @@ static void drawStatus()
Emgui_setDefaultFont(); Emgui_setDefaultFont();
} }
static bool flip = true;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Editor_update() void Editor_update()
{ {
Emgui_begin(); 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(); drawStatus();
TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData); TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData);
@ -430,7 +422,7 @@ bool Editor_keyDown(int key, int modifiers)
if (modifiers & EMGUI_KEY_ALT) if (modifiers & EMGUI_KEY_ALT)
{ {
trackData->folded[getActiveTrack()] = true; trackData->tracks[getActiveTrack()].folded = true;
Editor_update(); Editor_update();
return true; return true;
} }
@ -461,7 +453,7 @@ bool Editor_keyDown(int key, int modifiers)
if (modifiers & EMGUI_KEY_ALT) if (modifiers & EMGUI_KEY_ALT)
{ {
trackData->folded[getActiveTrack()] = false; trackData->tracks[getActiveTrack()].folded = false;
Editor_update(); Editor_update();
return true; return true;
} }

View File

@ -8,9 +8,8 @@ int TrackData_createGetTrack(TrackData* trackData, const char* name)
if (index < 0) if (index < 0)
{ {
index = sync_create_track(&trackData->syncData, name); index = sync_create_track(&trackData->syncData, name);
trackData->colors[index] = TrackData_getNextColor(trackData); memset(&trackData->tracks[index], 0, sizeof(Track));
trackData->order[trackData->orderCount] = index; trackData->tracks[index].color = TrackData_getNextColor(trackData);
trackData->orderCount++;
} }
return index; return index;

View File

@ -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 typedef struct TrackData
{ {
struct sync_data syncData; struct sync_data syncData;
uint32_t colors[EDITOR_MAX_TRACKS]; Track tracks[EDITOR_MAX_TRACKS];
bool folded[EDITOR_MAX_TRACKS]; Group groups[EDITOR_MAX_TRACKS];
bool hidden[EDITOR_MAX_TRACKS];
int order[EDITOR_MAX_TRACKS];
int orderCount;
int activeTrack; int activeTrack;
int lastColor; int lastColor;
int trackCount;
char* editText; char* editText;
} TrackData; } TrackData;

View File

@ -139,7 +139,7 @@ static void renderInterpolation(const struct TrackInfo* info, struct sync_track*
} }
if (info->viewInfo) 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; const int endPos = info->endPos;
uint32_t borderColor = Emgui_color32(40, 40, 40, 255); uint32_t borderColor = Emgui_color32(40, 40, 40, 255);
struct sync_track* track = 0; struct sync_track* track = 0;
const uint32_t color = info->trackData->colors[trackIndex]; const uint32_t color = info->trackData->tracks[trackIndex].color;
bool folded; bool folded;
Emgui_radioButtonImage(g_arrow_left_png, g_arrow_left_png_len, Emgui_radioButtonImage(g_arrow_left_png, g_arrow_left_png_len,
g_arrow_right_png, g_arrow_right_png_len, g_arrow_right_png, g_arrow_right_png_len,
EMGUI_LOCATION_MEMORY, Emgui_color32(255, 255, 255, 255), EMGUI_LOCATION_MEMORY, Emgui_color32(255, 255, 255, 255),
startX + 6, info->startY - (font_size + 5), 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) if (info->trackData->syncData.tracks)
track = info->trackData->syncData.tracks[trackIndex]; track = info->trackData->syncData.tracks[trackIndex];

View File

@ -59,6 +59,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData)
{ {
int i; int i;
struct sync_track* track; struct sync_track* track;
Track* t;
// TODO: Create the new track/channel here // 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); track_index = TrackData_createGetTrack(trackData, track_name);
printf("track_index %d\n", track_index); printf("track_index %d\n", track_index);
t = &trackData->tracks[track_index];
track = trackData->syncData.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 else
{ {
if (color_text) 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)
{ {
if (folded_text[0] == '1') 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 // 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"); mxml_node_t* track = mxmlNewElement(tracks, "track");
memset(temp, 0, sizeof(temp)); memset(temp, 0, sizeof(temp));
sprintf(temp, "%d", trackData->colors[p]); sprintf(temp, "%d", trackData->tracks[p].color);
// setup the elements for the trak // setup the elements for the trak
mxmlElementSetAttr(track, "name", t->name); mxmlElementSetAttr(track, "name", t->name);
mxmlElementSetAttr(track, "color", temp); 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) for (i = 0; i < (int)t->num_keys; ++i)
{ {