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(); RemoteConnection_createListner();
s_editorData.trackViewInfo.smallFontId = id; s_editorData.trackViewInfo.smallFontId = id;
s_editorData.trackViewInfo.endRow = 10000; s_editorData.trackData.startRow = 0;
s_editorData.trackData.endRow = 10000;
Emgui_setDefaultFont(); Emgui_setDefaultFont();
} }
@ -351,8 +352,8 @@ static void drawStatus()
size = drawConnectionStatus(0, sizeY); size = drawConnectionStatus(0, sizeY);
size += drawCurrentValue(size, sizeY); size += drawCurrentValue(size, sizeY);
size += drawNameValue("Row", size, sizeY, &s_editorData.trackViewInfo.rowPos, 0, 20000 - 1, s_currentRow); 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("Start Row", size, sizeY, &s_editorData.trackData.startRow, 0, 10000000, s_startRow);
size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow); size += drawNameValue("End Row", size, sizeY, &s_editorData.trackData.endRow, 0, 10000000, s_endRow);
if (getRowPos() != prevRow) if (getRowPos() != prevRow)
RemoteConnection_sendSetRowCommand(getRowPos()); RemoteConnection_sendSetRowCommand(getRowPos());
@ -660,8 +661,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
row += modifiers & EMGUI_KEY_ALT ? 8 : 1; row += modifiers & EMGUI_KEY_ALT ? 8 : 1;
if ((modifiers & EMGUI_KEY_COMMAND) || row > viewInfo->endRow) if ((modifiers & EMGUI_KEY_COMMAND) || row > trackData->endRow)
row = viewInfo->endRow; row = trackData->endRow;
viewInfo->rowPos = row; viewInfo->rowPos = row;
@ -709,8 +710,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
row -= modifiers & EMGUI_KEY_ALT ? 8 : 1; row -= modifiers & EMGUI_KEY_ALT ? 8 : 1;
if ((modifiers & EMGUI_KEY_COMMAND) || row < viewInfo->startRow) if ((modifiers & EMGUI_KEY_COMMAND) || row < trackData->startRow)
row = viewInfo->startRow; row = trackData->startRow;
viewInfo->rowPos = row; viewInfo->rowPos = row;
@ -1035,7 +1036,6 @@ void Editor_scroll(float deltaX, float deltaY, int flags)
{ {
int current_row = s_editorData.trackViewInfo.rowPos; int current_row = s_editorData.trackViewInfo.rowPos;
int old_offset = s_editorData.trackViewInfo.startPixel; int old_offset = s_editorData.trackViewInfo.startPixel;
TrackViewInfo* viewInfo = &s_editorData.trackViewInfo;
if (flags & EMGUI_KEY_ALT) if (flags & EMGUI_KEY_ALT)
{ {
@ -1055,11 +1055,11 @@ void Editor_scroll(float deltaX, float deltaY, int flags)
current_row += (int)deltaY; current_row += (int)deltaY;
if (current_row < viewInfo->startRow || current_row >= viewInfo->endRow) if (current_row < trackData->startRow || current_row >= trackData->endRow)
return; return;
s_editorData.trackViewInfo.startPixel += (int)(deltaX * 4.0f); 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); RemoteConnection_sendSetRowCommand(s_editorData.trackViewInfo.rowPos);

View File

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

View File

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

View File

@ -31,6 +31,18 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData)
{ {
const char* element_name = mxmlGetElement(node); 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)) if (!strcmp("track", element_name))
{ {
int i; 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) int LoadSave_saveRocketXML(const char* path, TrackData* trackData)
{ {
mxml_node_t* xml; mxml_node_t* xml;
@ -190,47 +222,26 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData)
xml = mxmlNewXML("1.0"); xml = mxmlNewXML("1.0");
tracks = mxmlNewElement(xml, "tracks"); 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) for (p = 0; p < sync_data->num_tracks; ++p)
{ {
int i; int i;
char temp[256];
const struct sync_track* t = sync_data->tracks[p]; const struct sync_track* t = sync_data->tracks[p];
mxml_node_t* track = mxmlNewElement(tracks, "track"); 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, "name", t->name);
mxmlElementSetAttr(track, "color", temp);
mxmlElementSetAttr(track, "folded", trackData->tracks[p].folded ? "1" : "0"); 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) 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"); mxml_node_t* key = mxmlNewElement(track, "key");
setElementInt(key, "row", "%d", (int)t->keys[i].row);
memset(temp0, 0, sizeof(temp0)); setElementFloat(key, "value", t->keys[i].value);
memset(temp1, 0, sizeof(temp1)); setElementInt(key, "interpolation", "%d", (int)t->keys[i].type);
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);
} }
} }