From 5d8314fe5caa07fcaba4aaed4d11a7ca2091926c Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Thu, 18 Sep 2014 19:35:00 +0200 Subject: [PATCH] More code to prevent data edit in muted mode --- ogl_editor/src/Commands.c | 4 ++++ ogl_editor/src/Editor.c | 28 +++++++++++++++++++++++++++- ogl_editor/src/TrackData.h | 1 + ogl_editor/src/TrackView.c | 4 ++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/ogl_editor/src/Commands.c b/ogl_editor/src/Commands.c index a6d919b..e62285d 100644 --- a/ogl_editor/src/Commands.c +++ b/ogl_editor/src/Commands.c @@ -474,6 +474,8 @@ static void toggleMute(void* userData) RemoteConnection_sendSetKeyCommand(data->syncTrack->name, key); } + data->track->disabled = false; + free(data->track->muteBackup); data->track->muteBackup = 0; @@ -485,6 +487,8 @@ static void toggleMute(void* userData) int i, keysSize = sizeof(struct track_key) * data->syncTrack->num_keys; float currentValue = (float)sync_get_val(data->syncTrack, data->row); + data->track->disabled = true; + // No muteBackup, this means that we want to mute the channel data->track->muteBackup = malloc(keysSize); diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 0305156..e12f67a 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -187,6 +187,13 @@ static inline int getRowPos() /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static bool canEditCurrentTrack() +{ + return !getTrackData()->tracks[getActiveTrack()].disabled; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static inline void setRowPos(int pos) { s_editorData.trackViewInfo.rowPos = pos; @@ -633,12 +640,13 @@ static void scaleOrBiasSelection(float value, BiasOperation biasOp) { int track, row; struct sync_track** tracks = getTracks(); + TrackData* trackData = getTrackData(); TrackViewInfo* viewInfo = getTrackViewInfo(); int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack); int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack); int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow); int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow); - + // If we have no selection and no currenty key bias the previous key if (selectLeft == selectRight && selectTop == selectBottom) @@ -651,6 +659,9 @@ static void scaleOrBiasSelection(float value, BiasOperation biasOp) return; track = tracks[getActiveTrack()]; + + if (!canEditCurrentTrack()) + return; idx = sync_find_key(track, getRowPos()); @@ -670,6 +681,9 @@ static void scaleOrBiasSelection(float value, BiasOperation biasOp) { struct sync_track* t = tracks[track]; + if (trackData->tracks[track].disabled) + continue; + for (row = selectTop; row <= selectBottom; ++row) { struct track_key newKey; @@ -1179,6 +1193,9 @@ static void onInterpolation() track = tracks[getActiveTrack()]; + if (!canEditCurrentTrack()) + return; + idx = key_idx_floor(track, getRowPos()); if (idx < 0) return; @@ -1307,6 +1324,9 @@ static void onEnterCurrentValue() if (!tracks) return; + if (!canEditCurrentTrack()) + return; + Commands_beginMulti("enterCurrentValues"); enterCurrentValue(tracks[activeTrack], activeTrack, rowPos); @@ -1740,6 +1760,12 @@ void Editor_destroy() static bool doEditing(int key) { + if (!canEditCurrentTrack()) + { + is_editing = false; + return false; + } + // special case if '.' key (in case of dvorak) would clatch with the same key for biasing we do this special case if ((key == '.' || key == EMGUI_KEY_BACKSPACE) && !is_editing) diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index 6ff9214..e621d2d 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -34,6 +34,7 @@ typedef struct Track int index; int groupIndex; int muteKeyCount; + bool disabled; bool hidden; bool folded; bool selected; diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index 3634929..400d801 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -486,6 +486,10 @@ static int renderChannel(struct TrackInfo* info, int startX, Track* trackData, b if (!(trackData->selected && info->viewInfo->rowPos == y && info->editText)) renderText(info, track, y, idx, offset, y_offset, folded); } + else + { + Emgui_fill(border_color , startX, y_offset - font_size_half, size, font_size); + } selected = (trackIndex >= info->selectLeft && trackIndex <= info->selectRight) && (y >= info->selectTop && y <= info->selectBottom);