From 0a1f563afb8fd3f20b3cf457c58c807306666689 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sun, 28 Oct 2012 19:04:30 +0100 Subject: [PATCH] Added support for editing of values --- ogl_editor/src/Editor.c | 70 ++++++++++++++++++++++++++++++++++++++-------- ogl_editor/src/TrackData.h | 1 + ogl_editor/src/TrackView.c | 13 +++++++-- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 50e1f60..74f0f16 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -68,8 +68,12 @@ void Editor_update() Emgui_end(); } + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static char s_editBuffer[512]; +static bool is_editing = false; + bool Editor_keyDown(int key) { bool handled_key = true; @@ -83,9 +87,10 @@ bool Editor_keyDown(int key) { int row = ++s_editorData.trackViewInfo.rowPos; RemoteConnection_sendSetRowCommand(row); - Editor_update(); - return true; + handled_key = true; } + + break; } case EMGUI_ARROW_UP: @@ -101,9 +106,9 @@ bool Editor_keyDown(int key) } RemoteConnection_sendSetRowCommand(row); - Editor_update(); - return true; + handled_key = true; } + break; } case EMGUI_ARROW_LEFT: @@ -115,9 +120,10 @@ bool Editor_keyDown(int key) if (s_editorData.trackData.activeTrack < 0) s_editorData.trackData.activeTrack = 0; - Editor_update(); - return true; + handled_key = true; } + + break; } case EMGUI_ARROW_RIGHT: @@ -125,9 +131,10 @@ bool Editor_keyDown(int key) if (paused) { ++s_editorData.trackData.activeTrack; - Editor_update(); - return true; + handled_key = true; } + + break; } default : handled_key = false; break; @@ -135,9 +142,46 @@ bool Editor_keyDown(int key) // 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 == ' ') @@ -146,10 +190,12 @@ bool Editor_keyDown(int key) // shouldn't start playing if we do RemoteConnection_sendPauseCommand(!paused); - - return true; + handled_key = true; } + if (handled_key) + Editor_update(); + return handled_key; } diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index b8f78f4..e04297b 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -10,6 +10,7 @@ typedef struct TrackData int order[8192]; int orderCount; int activeTrack; + char* editText; } TrackData; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index cec9343..d332290 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -84,7 +84,7 @@ static void renderChannel(struct sync_track* track, int startX, int startY, int value = track->keys[idx].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 { @@ -153,12 +153,19 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData) 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 + 40)); 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);