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 Del Delete key-frame
i Enumerate interpolation mode i Enumerate interpolation mode
k Toggle bookmark k Toggle bookmark
Shift+PgUp/PgDn Go to prev/next bookmark
Space Pause/Resume demo Space Pause/Resume demo
Shift+Up/Down/Left/Right Select Shift+Up/Down/Left/Right Select
Ctrl+C Copy Ctrl+C Copy

View File

@ -287,6 +287,29 @@ public:
std::wstring fileName; 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: private:
std::set<int> rowBookmarks; std::set<int> rowBookmarks;
std::vector<size_t> trackOrder; std::vector<size_t> trackOrder;

View File

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