More code to prevent data edit in muted mode

This commit is contained in:
Daniel Collin 2014-09-18 19:35:00 +02:00
parent c05bb51b86
commit 5d8314fe5c
4 changed files with 36 additions and 1 deletions

View File

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

View File

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

View File

@ -34,6 +34,7 @@ typedef struct Track
int index;
int groupIndex;
int muteKeyCount;
bool disabled;
bool hidden;
bool folded;
bool selected;

View File

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