Refactoring of arrow handling (reduced the code with ~100 lines)
This commit is contained in:
parent
20aab75c7b
commit
f6a94f38b5
@ -579,135 +579,98 @@ static void endEditing()
|
|||||||
|
|
||||||
Commands_addOrUpdateKey(active_track, &key);
|
Commands_addOrUpdateKey(active_track, &key);
|
||||||
|
|
||||||
/*
|
|
||||||
sync_set_key(track, &key);
|
|
||||||
|
|
||||||
rlog(R_INFO, "Setting key %f at %d row %d (name %s)\n", key.value, active_track, key.row, track_name);
|
|
||||||
|
|
||||||
RemoteConnection_sendSetKeyCommand(track_name, &key);
|
|
||||||
*/
|
|
||||||
|
|
||||||
is_editing = false;
|
is_editing = false;
|
||||||
s_editorData.trackData.editText = 0;
|
s_editorData.trackData.editText = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static void onArrowLeft(int modifiers)
|
enum ArrowDirection
|
||||||
{
|
{
|
||||||
const int current_track = getActiveTrack();
|
ARROW_LEFT,
|
||||||
int track = getPrevTrack();
|
ARROW_RIGHT,
|
||||||
endEditing();
|
};
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_ALT)
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static void onArrowSide(enum ArrowDirection dir, int row, TrackData* trackData, int activeTrack, int keyMod)
|
||||||
|
{
|
||||||
|
int track;
|
||||||
|
const bool shouldFold = dir == ARROW_LEFT ? true : false;
|
||||||
|
const int trackCount = getTrackCount();
|
||||||
|
TrackViewInfo* viewInfo = getTrackViewInfo();
|
||||||
|
|
||||||
|
if (keyMod & EMGUI_KEY_ALT)
|
||||||
{
|
{
|
||||||
Track* t = &trackData->tracks[current_track];
|
Track* t = &trackData->tracks[activeTrack];
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_CTRL)
|
if (keyMod & EMGUI_KEY_CTRL)
|
||||||
{
|
{
|
||||||
if (t->group->trackCount > 1)
|
if (t->group->trackCount > 1)
|
||||||
t->group->folded = true;
|
t->group->folded = shouldFold;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
t->folded = true;
|
t->folded = shouldFold;
|
||||||
|
|
||||||
Editor_updateTrackScroll();
|
Editor_updateTrackScroll();
|
||||||
Editor_update();
|
return;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_COMMAND)
|
if (dir == ARROW_LEFT)
|
||||||
|
{
|
||||||
|
track = getPrevTrack();
|
||||||
|
|
||||||
|
if (keyMod & EMGUI_KEY_COMMAND)
|
||||||
track = 0;
|
track = 0;
|
||||||
|
|
||||||
track = emaxi(0, track);
|
track = emaxi(0, track);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
track = getNextTrack();
|
||||||
|
|
||||||
|
if (track >= trackCount)
|
||||||
|
track = trackCount - 1;
|
||||||
|
|
||||||
|
if (keyMod & EMGUI_KEY_COMMAND)
|
||||||
|
track = trackCount - 1;
|
||||||
|
}
|
||||||
|
|
||||||
setActiveTrack(track);
|
setActiveTrack(track);
|
||||||
|
|
||||||
if (!TrackView_isSelectedTrackVisible(getTrackViewInfo(), getTrackData(), track))
|
if (!TrackView_isSelectedTrackVisible(viewInfo, trackData, track))
|
||||||
{
|
{
|
||||||
s_editorData.trackViewInfo.startPixel += TrackView_getTracksOffset(getTrackViewInfo(), getTrackData(), current_track, track);
|
s_editorData.trackViewInfo.startPixel += TrackView_getTracksOffset(viewInfo, trackData, activeTrack, track);
|
||||||
Editor_updateTrackScroll();
|
Editor_updateTrackScroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_SHIFT)
|
if (keyMod & EMGUI_KEY_SHIFT)
|
||||||
{
|
{
|
||||||
Track* t = &trackData->tracks[track];
|
Track* t = &trackData->tracks[track];
|
||||||
|
|
||||||
// if this track has a folded group we can't select it so set back the selection to the old one
|
// if this track has a folded group we can't select it so set back the selection to the old one
|
||||||
|
|
||||||
if (t->group->folded)
|
if (t->group->folded)
|
||||||
setActiveTrack(current_track);
|
setActiveTrack(activeTrack);
|
||||||
else
|
else
|
||||||
viewInfo->selectStopTrack = track;
|
viewInfo->selectStopTrack = track;
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
viewInfo->selectStartRow = viewInfo->selectStopRow = row_pos;
|
{
|
||||||
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
||||||
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
|
||||||
|
}
|
||||||
handled_key = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static void onArrowRight(int row, sync_track* track, int activeTrack, int modifiers)
|
static void onArrowUp(int row, TrackData* trackData, struct sync_track* track, int activeTrack, int modifiers)
|
||||||
{
|
{
|
||||||
if (modifiers & EMGUI_KEY_ALT)
|
TrackViewInfo* viewInfo = getTrackViewInfo();
|
||||||
{
|
|
||||||
Track* t = getTrackData()[activeTrack];
|
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_CTRL)
|
if (modifiers & EMGUI_KEY_CTRL)
|
||||||
{
|
{
|
||||||
if (t->group->trackCount > 1)
|
|
||||||
t->group->folded = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
t->folded = false;
|
|
||||||
|
|
||||||
Editor_updateTrackScroll();
|
|
||||||
Editor_update();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (track >= track_count)
|
|
||||||
track = track_count - 1;
|
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_COMMAND)
|
|
||||||
track = track_count - 1;
|
|
||||||
|
|
||||||
setActiveTrack(track);
|
|
||||||
|
|
||||||
if (!TrackView_isSelectedTrackVisible(getTrackViewInfo(), getTrackData(), track))
|
|
||||||
{
|
|
||||||
s_editorData.trackViewInfo.startPixel += TrackView_getTracksOffset(getTrackViewInfo(), getTrackData(), current_track, track);
|
|
||||||
Editor_updateTrackScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_SHIFT)
|
|
||||||
{
|
|
||||||
Track* t = &trackData->tracks[track];
|
|
||||||
if (t->group->folded)
|
|
||||||
setActiveTrack(current_track);
|
|
||||||
else
|
|
||||||
viewInfo->selectStopTrack = track;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
viewInfo->selectStartRow = viewInfo->selectStopRow = row_pos;
|
|
||||||
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
|
|
||||||
|
|
||||||
handled_key = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
static void onArrowUp(int row, sync_track* track, int activeTrack, int modifiers)
|
|
||||||
{
|
|
||||||
if (modifiers & EMGUI_KEY_CTRL)
|
|
||||||
{
|
|
||||||
if (track->keys)
|
if (track->keys)
|
||||||
{
|
{
|
||||||
int idx = sync_find_key(track, row);
|
int idx = sync_find_key(track, row);
|
||||||
@ -734,11 +697,11 @@ static void onArrowUp(int row, sync_track* track, int activeTrack, int modifiers
|
|||||||
if (modifiers & EMGUI_KEY_SHIFT)
|
if (modifiers & EMGUI_KEY_SHIFT)
|
||||||
{
|
{
|
||||||
viewInfo->selectStopRow = row;
|
viewInfo->selectStopRow = row;
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
||||||
viewInfo->selectStartTrack = viewInfo->selectStopTrack = active_track;
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = activeTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoteConnection_sendSetRowCommand(row);
|
RemoteConnection_sendSetRowCommand(row);
|
||||||
@ -746,25 +709,23 @@ static void onArrowUp(int row, sync_track* track, int activeTrack, int modifiers
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static void onArrowDown(int rowPos, sync_track* track, int activeTrack, int modifiers)
|
static void onArrowDown(int rowPos, TrackData* trackData, struct sync_track* track, int activeTrack, int modifiers)
|
||||||
{
|
{
|
||||||
const int active_track = getActiveTrack();
|
|
||||||
int row = getRowPos();
|
int row = getRowPos();
|
||||||
|
TrackViewInfo* viewInfo = getTrackViewInfo();
|
||||||
|
|
||||||
if (modifiers & EMGUI_KEY_CTRL)
|
if (modifiers & EMGUI_KEY_CTRL)
|
||||||
{
|
{
|
||||||
struct sync_track* t = getTracks()[active_track];
|
if (track->keys)
|
||||||
|
|
||||||
if (t->keys)
|
|
||||||
{
|
{
|
||||||
int idx = key_idx_floor(t, row_pos);
|
int idx = key_idx_floor(track, rowPos);
|
||||||
|
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
row = t->keys[0].row;
|
row = track->keys[0].row;
|
||||||
else if (idx > (int)t->num_keys - 2)
|
else if (idx > (int)track->num_keys - 2)
|
||||||
row = t->keys[t->num_keys - 1].row;
|
row = track->keys[track->num_keys - 1].row;
|
||||||
else
|
else
|
||||||
row = t->keys[idx + 1].row;
|
row = track->keys[idx + 1].row;
|
||||||
|
|
||||||
viewInfo->rowPos = row;
|
viewInfo->rowPos = row;
|
||||||
|
|
||||||
@ -790,7 +751,7 @@ static void onArrowDown(int rowPos, sync_track* track, int activeTrack, int modi
|
|||||||
}
|
}
|
||||||
|
|
||||||
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
||||||
viewInfo->selectStartTrack = viewInfo->selectStopTrack = active_track;
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = activeTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoteConnection_sendSetRowCommand(row);
|
RemoteConnection_sendSetRowCommand(row);
|
||||||
@ -798,16 +759,18 @@ static void onArrowDown(int rowPos, sync_track* track, int activeTrack, int modi
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static void onArrow(int key, int modifiers, int rowPos, sync_track* track, int activeTrack)
|
static void onArrow(int key, int modifiers, int rowPos, struct sync_track* track, int activeTrack)
|
||||||
{
|
{
|
||||||
|
TrackData* trackData = getTrackData();
|
||||||
|
|
||||||
endEditing();
|
endEditing();
|
||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
case EMGUI_ARROW_DOWN: onArrowDown(rowPos, track, activetrack, modifiers); break;
|
case EMGUI_ARROW_DOWN: onArrowDown(rowPos, trackData, track, activeTrack, modifiers); break;
|
||||||
case EMGUI_ARROW_UP: onArrowUp(rowPos, track, activetrack, modifiers); break;
|
case EMGUI_ARROW_UP: onArrowUp(rowPos, trackData, track, activeTrack, modifiers); break;
|
||||||
case EMGUI_ARROW_RIGHT: onArrowRight(rowPos, track, activetrack, modifiers); break;
|
case EMGUI_ARROW_RIGHT: onArrowSide(ARROW_RIGHT, rowPos, trackData, activeTrack, modifiers); break;
|
||||||
case EMGUI_ARROW_LEFT: onArrowLeft(rowPos, track, activetrack, modifiers); break;
|
case EMGUI_ARROW_LEFT: onArrowSide(ARROW_LEFT, rowPos, trackData, activeTrack, modifiers); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -855,24 +818,14 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
|
|||||||
case EMGUI_ARROW_DOWN:
|
case EMGUI_ARROW_DOWN:
|
||||||
case EMGUI_ARROW_UP:
|
case EMGUI_ARROW_UP:
|
||||||
case EMGUI_ARROW_RIGHT:
|
case EMGUI_ARROW_RIGHT:
|
||||||
case EMGUI_ARROW_LEFT: onArrow(key, modifiers);
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
case EMGUI_ARROW_UP:
|
|
||||||
{
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EMGUI_ARROW_LEFT:
|
case EMGUI_ARROW_LEFT:
|
||||||
{
|
{
|
||||||
break;
|
onArrow(key, modifiers, row_pos, tracks[active_track], active_track);
|
||||||
}
|
|
||||||
|
|
||||||
case EMGUI_ARROW_RIGHT:
|
if (paused)
|
||||||
{
|
Editor_update();
|
||||||
break;
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
default : handled_key = false; break;
|
default : handled_key = false; break;
|
||||||
@ -1082,13 +1035,10 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// copy and modify
|
|
||||||
newKey = track->keys[idx];
|
newKey = track->keys[idx];
|
||||||
newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT);
|
newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT);
|
||||||
|
|
||||||
sync_set_key(track, &newKey);
|
Commands_addOrUpdateKey(active_track, &newKey);
|
||||||
|
|
||||||
RemoteConnection_sendSetKeyCommand(track->name, &newKey);
|
|
||||||
|
|
||||||
handled_key = true;
|
handled_key = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user