Added support for editing of values

This commit is contained in:
Daniel Collin 2012-10-28 19:04:30 +01:00
parent 6a46001a6e
commit 0a1f563afb
3 changed files with 69 additions and 15 deletions

View File

@ -68,8 +68,12 @@ void Editor_update()
Emgui_end(); Emgui_end();
} }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static char s_editBuffer[512];
static bool is_editing = false;
bool Editor_keyDown(int key) bool Editor_keyDown(int key)
{ {
bool handled_key = true; bool handled_key = true;
@ -83,9 +87,10 @@ bool Editor_keyDown(int key)
{ {
int row = ++s_editorData.trackViewInfo.rowPos; int row = ++s_editorData.trackViewInfo.rowPos;
RemoteConnection_sendSetRowCommand(row); RemoteConnection_sendSetRowCommand(row);
Editor_update(); handled_key = true;
return true;
} }
break;
} }
case EMGUI_ARROW_UP: case EMGUI_ARROW_UP:
@ -101,9 +106,9 @@ bool Editor_keyDown(int key)
} }
RemoteConnection_sendSetRowCommand(row); RemoteConnection_sendSetRowCommand(row);
Editor_update(); handled_key = true;
return true;
} }
break;
} }
case EMGUI_ARROW_LEFT: case EMGUI_ARROW_LEFT:
@ -115,9 +120,10 @@ bool Editor_keyDown(int key)
if (s_editorData.trackData.activeTrack < 0) if (s_editorData.trackData.activeTrack < 0)
s_editorData.trackData.activeTrack = 0; s_editorData.trackData.activeTrack = 0;
Editor_update(); handled_key = true;
return true;
} }
break;
} }
case EMGUI_ARROW_RIGHT: case EMGUI_ARROW_RIGHT:
@ -125,9 +131,10 @@ bool Editor_keyDown(int key)
if (paused) if (paused)
{ {
++s_editorData.trackData.activeTrack; ++s_editorData.trackData.activeTrack;
Editor_update(); handled_key = true;
return true;
} }
break;
} }
default : handled_key = false; break; default : handled_key = false; break;
@ -135,9 +142,46 @@ bool Editor_keyDown(int key)
// do edit here // do edit here
if (key == '1') if (paused)
{ {
return true; if ((key >= '0' && key <= '9') || key == '.' )
{
if (!is_editing)
{
memset(s_editBuffer, 0, sizeof(s_editBuffer));
is_editing = true;
}
s_editBuffer[strlen(s_editBuffer)] = key;
s_editorData.trackData.editText = s_editBuffer;
return true;
}
else if (key == 13) // return/enter
{
struct track_key key;
key.row = s_editorData.trackViewInfo.rowPos;
key.value = atof(s_editBuffer);
key.type = 0;
struct sync_track* track = s_editorData.trackData.syncData.tracks[s_editorData.trackData.activeTrack];
const char* track_name = track->name;
sync_set_key(track, &key);
rlog(R_INFO, "Setting key %f at %d row %d (name %s)\n", key.value, s_editorData.trackData.activeTrack, key.row, track_name);
RemoteConnection_sendSetKeyCommand(track_name, &key);
is_editing = false;
s_editorData.trackData.editText = 0;
}
else
{
is_editing = false;
s_editorData.trackData.editText = 0;
}
} }
if (key == ' ') if (key == ' ')
@ -146,10 +190,12 @@ bool Editor_keyDown(int key)
// shouldn't start playing if we do // shouldn't start playing if we do
RemoteConnection_sendPauseCommand(!paused); RemoteConnection_sendPauseCommand(!paused);
handled_key = true;
return true;
} }
if (handled_key)
Editor_update();
return handled_key; return handled_key;
} }

View File

@ -10,6 +10,7 @@ typedef struct TrackData
int order[8192]; int order[8192];
int orderCount; int orderCount;
int activeTrack; int activeTrack;
char* editText;
} TrackData; } TrackData;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -84,7 +84,7 @@ static void renderChannel(struct sync_track* track, int startX, int startY, int
value = track->keys[idx].value; value = track->keys[idx].value;
snprintf(temp, 256, "% .2f", value); snprintf(temp, 256, "% .2f", value);
Emgui_drawText(temp, offset, y_offset + (font_size / 2), Emgui_color32(255, 255, 255, 255)); Emgui_drawText(temp, offset, y_offset - font_size / 2, Emgui_color32(255, 255, 255, 255));
} }
else else
{ {
@ -153,12 +153,19 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
for (i = 0; i < num_tracks; ++i) for (i = 0; i < num_tracks; ++i)
{ {
renderChannel(syncData->tracks[i], 40 + (i * 128), 42, int x = 40 + (i * 128);
renderChannel(syncData->tracks[i], x, 42,
(start_pos + viewInfo->rowPos), (start_pos + viewInfo->rowPos),
(start_pos + viewInfo->rowPos + 40)); (start_pos + viewInfo->rowPos + 40));
if (trackData->activeTrack == i) if (trackData->activeTrack == i)
Emgui_fill(Emgui_color32(0xff, 0xff, 0x00, 0x80), 40 + (i * 128), 257, 128, font_size + 2); {
Emgui_fill(Emgui_color32(0xff, 0xff, 0x00, 0x80), x, 257, 128, font_size + 2);
if (trackData->editText)
Emgui_drawText(trackData->editText, x, 257, Emgui_color32(255, 255, 255, 255));
}
} }
uint32_t color = Emgui_color32(127, 127, 127, 56); uint32_t color = Emgui_color32(127, 127, 127, 56);