editor: add visual row-bookmarks

This commit is contained in:
Erik Faye-Lund 2011-07-18 21:42:06 +02:00
parent 2e53f4da00
commit 3a859b781e
4 changed files with 34 additions and 7 deletions

1
README
View File

@ -68,6 +68,7 @@ Ctrl+Left/Right Move track
Enter Enter key-frame value
Del Delete key-frame
i Enumerate interpolation mode
k Toggle bookmark
Space Pause/Resume demo
Shift+Up/Down/Left/Right Select
Ctrl+C Copy

View File

@ -11,6 +11,7 @@ extern "C" {
#include <stack>
#include <list>
#include <vector>
#include <set>
#include <string>
#include <cassert>
@ -266,6 +267,19 @@ public:
return 0 != savePointDelta;
}
bool isRowBookmark(int row) const
{
return !!rowBookmarks.count(row);
}
void toggleRowBookmark(int row)
{
if (isRowBookmark(row))
rowBookmarks.erase(row);
else
rowBookmarks.insert(row);
}
ClientSocket clientSocket;
size_t getRows() const { return rows; }
@ -274,9 +288,10 @@ public:
std::wstring fileName;
private:
std::set<int> rowBookmarks;
std::vector<size_t> trackOrder;
size_t rows;
// undo / redo functionality
std::stack<Command*> undoStack;
std::stack<Command*> redoStack;

View File

@ -62,8 +62,9 @@ TrackView::TrackView() :
lerpPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
cosinePen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
rampPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
editBrush = CreateSolidBrush(RGB(255, 255, 0)); // yellow
bookmarkBrush = CreateSolidBrush(RGB(128, 128, 255)); // red
handCursor = LoadCursor(NULL, IDC_HAND);
@ -81,6 +82,7 @@ TrackView::~TrackView()
DeleteObject(cosinePen);
DeleteObject(rampPen);
DeleteObject(editBrush);
DeleteObject(bookmarkBrush);
DeleteObject(rowPen);
DeleteObject(rowSelectPen);
if (document)
@ -240,12 +242,16 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
leftMargin.bottom = leftMargin.top + rowHeight;
if (!RectVisible(hdc, &leftMargin)) continue;
HBRUSH fillBrush;
if (row == editRow) fillBrush = editBrush;
else fillBrush = GetSysColorBrush(COLOR_3DFACE);
if (row == editRow)
fillBrush = editBrush;
else if (doc->isRowBookmark(row))
fillBrush = bookmarkBrush;
else
fillBrush = GetSysColorBrush(COLOR_3DFACE);
FillRect(hdc, &leftMargin, fillBrush);
DrawEdge(hdc, &leftMargin, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RIGHT | BF_BOTTOM | BF_TOP);
if ((row % 8) == 0) SetTextColor(hdc, RGB(0, 0, 0));
else if ((row % 4) == 0) SetTextColor(hdc, RGB(64, 64, 64));
@ -1093,6 +1099,11 @@ LRESULT TrackView::onChar(UINT keyCode, UINT /*flags*/)
case 'i':
editToggleInterpolationType();
break;
case 'k':
getDocument()->toggleRowBookmark(getEditRow());
invalidateRow(getEditRow());
break;
}
return FALSE;
}

View File

@ -189,7 +189,7 @@ private:
HBRUSH bgBaseBrush, bgDarkBrush;
HBRUSH selectBaseBrush, selectDarkBrush;
HPEN rowPen, rowSelectPen;
HBRUSH editBrush;
HBRUSH editBrush, bookmarkBrush;
HPEN lerpPen, cosinePen, rampPen;
HCURSOR handCursor;