Various selection fixes and biasing of previous key (if no key is selected)

This commit is contained in:
Daniel Collin 2013-02-18 22:30:39 +01:00
parent f2dd263c07
commit 3533af8de7

View File

@ -585,10 +585,31 @@ static void biasSelection(float value)
int track, row;
struct sync_track** tracks = getTracks();
TrackViewInfo* viewInfo = getTrackViewInfo();
const int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow);
const int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
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)
{
struct sync_track* track;
struct sync_track** tracks = getTracks();
if (!tracks || !tracks[getActiveTrack()]->keys)
return;
track = tracks[getActiveTrack()];
int idx = sync_find_key(track, getRowPos());
if (idx < 0)
{
idx = -idx - 1;
selectTop = selectBottom = track->keys[emaxi(idx - 1, 0)].row;
}
}
Commands_beginMulti("biasSelection");
@ -1168,9 +1189,6 @@ static void onRowStep(int step, enum Selection selection)
if (selection == DO_SELECTION)
{
if (step < 0)
viewInfo->selectStartRow = getRowPos();
else
viewInfo->selectStopRow = getRowPos();
}
else
@ -1224,7 +1242,7 @@ static void onTrackSide(enum ArrowDirection dir, bool startOrEnd, enum Selection
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onBookmarkDir(enum ArrowDirection dir)
static void onBookmarkDir(enum ArrowDirection dir, enum Selection selection)
{
TrackData* trackData = getTrackData();
TrackViewInfo* viewInfo = getTrackViewInfo();
@ -1235,7 +1253,10 @@ static void onBookmarkDir(enum ArrowDirection dir)
else
row = TrackData_getNextBookmark(trackData, row);
if (selection == NO_SELECTION)
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
else
viewInfo->selectStopRow = row;
setRowPos(row);
}
@ -1262,7 +1283,7 @@ static void onPrevNextKey(bool prevKey, enum Selection selection)
setRowPos(track->keys[emaxi(idx - 1, 0)].row);
if (selection == DO_SELECTION)
viewInfo->selectStartRow = getRowPos();
viewInfo->selectStopRow = getRowPos();
else
viewInfo->selectStartRow = viewInfo->selectStopRow = getRowPos();
}
@ -1419,8 +1440,8 @@ void Editor_menuEvent(int menuItem)
case EDITOR_MENU_PLAY : onPlay(); break;
case EDITOR_MENU_ROWS_UP : onRowStep(-8, NO_SELECTION); break;
case EDITOR_MENU_ROWS_DOWN : onRowStep(8, NO_SELECTION); break;
case EDITOR_MENU_PREV_BOOKMARK : onBookmarkDir(ARROW_UP); break;
case EDITOR_MENU_NEXT_BOOKMARK : onBookmarkDir(ARROW_DOWN); break;
case EDITOR_MENU_PREV_BOOKMARK : onBookmarkDir(ARROW_UP, NO_SELECTION); break;
case EDITOR_MENU_NEXT_BOOKMARK : onBookmarkDir(ARROW_DOWN, NO_SELECTION); break;
case EDITOR_MENU_FIRST_TRACK : onTrackSide(ARROW_LEFT, true, NO_SELECTION); break;
case EDITOR_MENU_LAST_TRACK : onTrackSide(ARROW_RIGHT, true, NO_SELECTION); break;
case EDITOR_MENU_PREV_KEY : onPrevNextKey(true, NO_SELECTION); break;
@ -1532,6 +1553,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
{
if (modifiers & EMGUI_KEY_CTRL)
onPrevNextKey(true, selection);
else if (modifiers & EMGUI_KEY_COMMAND)
onBookmarkDir(ARROW_UP, selection);
else if (modifiers & EMGUI_KEY_ALT)
onRowStep(-8, selection);
else
@ -1544,6 +1567,8 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
{
if (modifiers & EMGUI_KEY_CTRL)
onPrevNextKey(false, selection);
else if (modifiers & EMGUI_KEY_COMMAND)
onBookmarkDir(ARROW_DOWN, selection);
else if (modifiers & EMGUI_KEY_ALT)
onRowStep(8, selection);
else