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();
}
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;
}

View File

@ -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;

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
{
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;

View File

@ -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];

View File

@ -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)
{