Fixed issue that Start/Endrow wasn't saved and loaded

Closes #37
This commit is contained in:
Daniel Collin 2012-12-30 12:29:41 +01:00
parent 7683965dba
commit f4c315c137
4 changed files with 51 additions and 40 deletions

View File

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

View File

@ -68,6 +68,8 @@ typedef struct TrackData
int activeTrack;
int lastColor;
int trackCount;
int startRow;
int endRow;
char* editText;
} TrackData;

View File

@ -14,8 +14,6 @@ typedef struct TrackViewInfo
int windowSizeX;
int windowSizeY;
int rowPos;
int startRow;
int endRow;
int startTrack;
int startPixel;
int smallFontId;

View File

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