editor: add visual row-bookmarks
This commit is contained in:
parent
2e53f4da00
commit
3a859b781e
1
README
1
README
@ -68,6 +68,7 @@ Ctrl+Left/Right Move track
|
|||||||
Enter Enter key-frame value
|
Enter Enter key-frame value
|
||||||
Del Delete key-frame
|
Del Delete key-frame
|
||||||
i Enumerate interpolation mode
|
i Enumerate interpolation mode
|
||||||
|
k Toggle 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
|
||||||
|
|||||||
@ -11,6 +11,7 @@ extern "C" {
|
|||||||
#include <stack>
|
#include <stack>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
@ -266,6 +267,19 @@ public:
|
|||||||
return 0 != savePointDelta;
|
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;
|
ClientSocket clientSocket;
|
||||||
|
|
||||||
size_t getRows() const { return rows; }
|
size_t getRows() const { return rows; }
|
||||||
@ -274,9 +288,10 @@ public:
|
|||||||
std::wstring fileName;
|
std::wstring fileName;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::set<int> rowBookmarks;
|
||||||
std::vector<size_t> trackOrder;
|
std::vector<size_t> trackOrder;
|
||||||
size_t rows;
|
size_t rows;
|
||||||
|
|
||||||
// undo / redo functionality
|
// undo / redo functionality
|
||||||
std::stack<Command*> undoStack;
|
std::stack<Command*> undoStack;
|
||||||
std::stack<Command*> redoStack;
|
std::stack<Command*> redoStack;
|
||||||
|
|||||||
@ -62,8 +62,9 @@ TrackView::TrackView() :
|
|||||||
lerpPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
|
lerpPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
|
||||||
cosinePen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
|
cosinePen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
|
||||||
rampPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
|
rampPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
|
||||||
|
|
||||||
editBrush = CreateSolidBrush(RGB(255, 255, 0)); // yellow
|
editBrush = CreateSolidBrush(RGB(255, 255, 0)); // yellow
|
||||||
|
bookmarkBrush = CreateSolidBrush(RGB(128, 128, 255)); // red
|
||||||
|
|
||||||
handCursor = LoadCursor(NULL, IDC_HAND);
|
handCursor = LoadCursor(NULL, IDC_HAND);
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ TrackView::~TrackView()
|
|||||||
DeleteObject(cosinePen);
|
DeleteObject(cosinePen);
|
||||||
DeleteObject(rampPen);
|
DeleteObject(rampPen);
|
||||||
DeleteObject(editBrush);
|
DeleteObject(editBrush);
|
||||||
|
DeleteObject(bookmarkBrush);
|
||||||
DeleteObject(rowPen);
|
DeleteObject(rowPen);
|
||||||
DeleteObject(rowSelectPen);
|
DeleteObject(rowSelectPen);
|
||||||
if (document)
|
if (document)
|
||||||
@ -240,12 +242,16 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
|
|||||||
leftMargin.bottom = leftMargin.top + rowHeight;
|
leftMargin.bottom = leftMargin.top + rowHeight;
|
||||||
|
|
||||||
if (!RectVisible(hdc, &leftMargin)) continue;
|
if (!RectVisible(hdc, &leftMargin)) continue;
|
||||||
|
|
||||||
HBRUSH fillBrush;
|
HBRUSH fillBrush;
|
||||||
if (row == editRow) fillBrush = editBrush;
|
if (row == editRow)
|
||||||
else fillBrush = GetSysColorBrush(COLOR_3DFACE);
|
fillBrush = editBrush;
|
||||||
|
else if (doc->isRowBookmark(row))
|
||||||
|
fillBrush = bookmarkBrush;
|
||||||
|
else
|
||||||
|
fillBrush = GetSysColorBrush(COLOR_3DFACE);
|
||||||
FillRect(hdc, &leftMargin, fillBrush);
|
FillRect(hdc, &leftMargin, fillBrush);
|
||||||
|
|
||||||
DrawEdge(hdc, &leftMargin, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RIGHT | BF_BOTTOM | BF_TOP);
|
DrawEdge(hdc, &leftMargin, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RIGHT | BF_BOTTOM | BF_TOP);
|
||||||
if ((row % 8) == 0) SetTextColor(hdc, RGB(0, 0, 0));
|
if ((row % 8) == 0) SetTextColor(hdc, RGB(0, 0, 0));
|
||||||
else if ((row % 4) == 0) SetTextColor(hdc, RGB(64, 64, 64));
|
else if ((row % 4) == 0) SetTextColor(hdc, RGB(64, 64, 64));
|
||||||
@ -1093,6 +1099,11 @@ LRESULT TrackView::onChar(UINT keyCode, UINT /*flags*/)
|
|||||||
case 'i':
|
case 'i':
|
||||||
editToggleInterpolationType();
|
editToggleInterpolationType();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'k':
|
||||||
|
getDocument()->toggleRowBookmark(getEditRow());
|
||||||
|
invalidateRow(getEditRow());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -189,7 +189,7 @@ private:
|
|||||||
HBRUSH bgBaseBrush, bgDarkBrush;
|
HBRUSH bgBaseBrush, bgDarkBrush;
|
||||||
HBRUSH selectBaseBrush, selectDarkBrush;
|
HBRUSH selectBaseBrush, selectDarkBrush;
|
||||||
HPEN rowPen, rowSelectPen;
|
HPEN rowPen, rowSelectPen;
|
||||||
HBRUSH editBrush;
|
HBRUSH editBrush, bookmarkBrush;
|
||||||
HPEN lerpPen, cosinePen, rampPen;
|
HPEN lerpPen, cosinePen, rampPen;
|
||||||
HCURSOR handCursor;
|
HCURSOR handCursor;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user