editor: support going to prev/next bookmark

This commit is contained in:
Erik Faye-Lund 2012-04-06 17:48:17 +02:00
parent 3a859b781e
commit 3f19324255
3 changed files with 42 additions and 10 deletions

1
README
View File

@ -69,6 +69,7 @@ Enter Enter key-frame value
Del Delete key-frame
i Enumerate interpolation mode
k Toggle bookmark
Shift+PgUp/PgDn Go to prev/next bookmark
Space Pause/Resume demo
Shift+Up/Down/Left/Right Select
Ctrl+C Copy

View File

@ -287,6 +287,29 @@ public:
std::wstring fileName;
int nextRowBookmark(int row) const
{
std::set<int>::const_iterator it = rowBookmarks.upper_bound(row);
if (it == rowBookmarks.end())
return -1;
return *it;
}
int prevRowBookmark(int row) const
{
std::set<int>::const_iterator it = rowBookmarks.lower_bound(row);
if (it == rowBookmarks.end()) {
std::set<int>::const_reverse_iterator it = rowBookmarks.rend();
if (it == rowBookmarks.rend())
return -1;
return *it;
} else
it--;
if (it == rowBookmarks.end())
return -1;
return *it;
}
private:
std::set<int> rowBookmarks;
std::vector<size_t> trackOrder;

View File

@ -993,23 +993,31 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
break;
case VK_PRIOR:
if (GetKeyState(VK_CONTROL) < 0)
{
if (GetKeyState(VK_CONTROL) < 0) {
float bias = 10.0f;
if (GetKeyState(VK_SHIFT) < 0) bias = 100.0f;
if (GetKeyState(VK_SHIFT) < 0)
bias = 100.0f;
editBiasValue(bias);
}
else setEditRow(editRow - 0x10);
} else if (GetKeyState(VK_SHIFT) < 0) {
int row = doc->prevRowBookmark(editRow);
if (row >= 0)
setEditRow(row);
} else
setEditRow(editRow - 0x10);
break;
case VK_NEXT:
if (GetKeyState(VK_CONTROL) < 0)
{
if (GetKeyState(VK_CONTROL) < 0) {
float bias = 10.0f;
if (GetKeyState(VK_SHIFT) < 0) bias = 100.0f;
if (GetKeyState(VK_SHIFT) < 0)
bias = 100.0f;
editBiasValue(-bias);
}
else setEditRow(editRow + 0x10);
} else if (GetKeyState(VK_SHIFT) < 0) {
int row = doc->nextRowBookmark(editRow);
if (row >= 0)
setEditRow(row);
} else
setEditRow(editRow + 0x10);
break;
case VK_HOME: