cleaned up the selection code a bit

This commit is contained in:
Erik Faye-Lund 2008-02-10 15:34:18 +00:00
parent d54d8587c9
commit 359f5a2eed
2 changed files with 37 additions and 65 deletions

View File

@ -29,7 +29,6 @@ TrackView::TrackView()
selectStartTrack = selectStopTrack = 0; selectStartTrack = selectStopTrack = 0;
selectStartRow = selectStopRow = 0; selectStartRow = selectStopRow = 0;
selectActive = false;
this->hwnd = NULL; this->hwnd = NULL;
@ -223,7 +222,7 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
if (!RectVisible(hdc, &patternDataRect)) continue; if (!RectVisible(hdc, &patternDataRect)) continue;
bool selected = selectActive && (track >= selectLeft && track <= selectRight) && (row >= selectTop && row <= selectBottom); bool selected = (track >= selectLeft && track <= selectRight) && (row >= selectTop && row <= selectBottom);
HBRUSH baseBrush = bgBaseBrush; HBRUSH baseBrush = bgBaseBrush;
HBRUSH darkBrush = bgDarkBrush; HBRUSH darkBrush = bgDarkBrush;
@ -309,8 +308,6 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
void TrackView::copy() void TrackView::copy()
{ {
if (!selectActive) return;
int selectLeft = min(selectStartTrack, selectStopTrack); int selectLeft = min(selectStartTrack, selectStopTrack);
int selectRight = max(selectStartTrack, selectStopTrack); int selectRight = max(selectStartTrack, selectStopTrack);
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
@ -373,10 +370,10 @@ void TrackView::copy()
void TrackView::cut() void TrackView::cut()
{ {
int selectLeft = min(selectStartTrack, selectStopTrack); /* int selectLeft = min(selectStartTrack, selectStopTrack);
int selectRight = max(selectStartTrack, selectStopTrack); int selectRight = max(selectStartTrack, selectStopTrack);
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
int selectBottom = max(selectStartRow, selectStopRow); int selectBottom = max(selectStartRow, selectStopRow); */
copy(); copy();
#if 0 #if 0
@ -394,10 +391,10 @@ void TrackView::cut()
void TrackView::paste() void TrackView::paste()
{ {
int selectLeft = min(selectStartTrack, selectStopTrack); /* int selectLeft = min(selectStartTrack, selectStopTrack);
int selectRight = max(selectStartTrack, selectStopTrack); int selectRight = max(selectStartTrack, selectStopTrack);
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
int selectBottom = max(selectStartRow, selectStopRow); int selectBottom = max(selectStartRow, selectStopRow); */
} }
void TrackView::setupScrollBars() void TrackView::setupScrollBars()
@ -465,18 +462,19 @@ void TrackView::setEditRow(int newEditRow)
// clamp to document // clamp to document
editRow = min(max(editRow, 0), rows - 1); editRow = min(max(editRow, 0), rows - 1);
bool selecting = GetKeyState(VK_SHIFT) < 0 ? true : false; if (oldEditRow != editRow)
if (selecting) {
if (GetKeyState(VK_SHIFT) < 0)
{ {
selectActive = true;
selectStopRow = editRow; selectStopRow = editRow;
invalidateRange(selectStartTrack, selectStopTrack, oldEditRow, editRow); invalidateRange(selectStartTrack, selectStopTrack, oldEditRow, editRow);
} }
else if (selectActive) else
{ {
// leave select mode
selectActive = false;
invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow); invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow);
selectStartRow = selectStopRow = editRow;
selectStartTrack = selectStopTrack = editTrack;
}
} }
invalidateRow(oldEditRow); invalidateRow(oldEditRow);
@ -494,18 +492,19 @@ void TrackView::setEditTrack(int newEditTrack)
editTrack = max(editTrack, 0); editTrack = max(editTrack, 0);
editTrack = min(editTrack, getTrackCount() - 1); editTrack = min(editTrack, getTrackCount() - 1);
bool selecting = GetKeyState(VK_SHIFT) < 0 ? true : false; if (oldEditTrack != editTrack)
if (selecting) {
if (GetKeyState(VK_SHIFT) < 0)
{ {
selectActive = true;
selectStopTrack = editTrack; selectStopTrack = editTrack;
invalidateRange(oldEditTrack, editTrack, selectStartRow, selectStopRow); invalidateRange(oldEditTrack, editTrack, selectStartRow, selectStopRow);
} }
else if (selectActive) else
{ {
// leave select mode
selectActive = false;
invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow); invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow);
selectStartRow = selectStopRow = editRow;
selectStartTrack = selectStopTrack = editTrack;
}
} }
invalidateTrack(oldEditTrack); invalidateTrack(oldEditTrack);
@ -529,14 +528,13 @@ static int getScrollPos(HWND hwnd, int bar)
void TrackView::setRows(int rows) void TrackView::setRows(int rows)
{ {
int oldRows = getRows();
this->rows = rows; this->rows = rows;
InvalidateRect(getWin(), NULL, FALSE); InvalidateRect(getWin(), NULL, FALSE);
setEditRow(min(editRow, rows - 1)); setEditRow(min(editRow, rows - 1));
} }
LRESULT TrackView::onVScroll(UINT sbCode, int newPos) LRESULT TrackView::onVScroll(UINT sbCode, int /*newPos*/)
{ {
switch (sbCode) switch (sbCode)
{ {
@ -569,7 +567,7 @@ LRESULT TrackView::onVScroll(UINT sbCode, int newPos)
return FALSE; return FALSE;
} }
LRESULT TrackView::onHScroll(UINT sbCode, int newPos) LRESULT TrackView::onHScroll(UINT sbCode, int /*newPos*/)
{ {
switch (sbCode) switch (sbCode)
{ {
@ -629,13 +627,8 @@ void TrackView::onDelete()
else MessageBeep(0); else MessageBeep(0);
} }
LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags) LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
{ {
bool refreshCaret = false;
bool ctrlDown = GetKeyState(VK_CONTROL) < 0 ? true : false;
bool shiftDown = GetKeyState(VK_SHIFT) < 0 ? true : false;
bool altDown = GetKeyState(VK_MENU) < 0 ? true : false;
if (editString.empty()) if (editString.empty())
{ {
switch (keyCode) switch (keyCode)
@ -649,17 +642,6 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
case VK_PRIOR: setEditRow(editRow - windowRows / 2); break; case VK_PRIOR: setEditRow(editRow - windowRows / 2); break;
case VK_NEXT: setEditRow(editRow + windowRows / 2); break; case VK_NEXT: setEditRow(editRow + windowRows / 2); break;
case VK_SHIFT:
// if (selectActive) invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow);
if (!selectActive)
{
selectStartTrack = selectStopTrack = editTrack;
selectStartRow = selectStopRow = editRow;
// selectActive = true;
// printf("select active\n");
}
break;
default: default:
break; break;
} }
@ -681,11 +663,6 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
case VK_CANCEL: case VK_CANCEL:
case VK_ESCAPE: case VK_ESCAPE:
if (selectActive)
{
selectActive = false;
invalidateRange(selectStartTrack, selectStopTrack, selectStartRow, selectStopRow);
}
if (editString.size() > 0) if (editString.size() > 0)
{ {
// return to old value (i.e don't clear) // return to old value (i.e don't clear)
@ -700,8 +677,8 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
LRESULT TrackView::onChar(UINT keyCode, UINT flags) LRESULT TrackView::onChar(UINT keyCode, UINT flags)
{ {
printf("char: \"%c\" (%d) - flags: %x\n", (char)keyCode, keyCode, flags); printf("char: \"%c\" (%d) - flags: %x\n", char(keyCode), keyCode, flags);
switch ((char)keyCode) switch (char(keyCode))
{ {
case '.': case '.':
// only one '.' allowed // only one '.' allowed
@ -721,8 +698,8 @@ LRESULT TrackView::onChar(UINT keyCode, UINT flags)
case '7': case '7':
case '8': case '8':
case '9': case '9':
editString.push_back(keyCode); editString.push_back(char(keyCode));
printf("accepted: %c - %s\n", (char)keyCode, editString.c_str()); printf("accepted: %c - %s\n", char(keyCode), editString.c_str());
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
break; break;
} }
@ -731,9 +708,6 @@ LRESULT TrackView::onChar(UINT keyCode, UINT flags)
LRESULT TrackView::onSize(int width, int height) LRESULT TrackView::onSize(int width, int height)
{ {
const int oldWindowWidth = windowWidth;
const int oldWindowHeight = windowHeight;
windowWidth = width; windowWidth = width;
windowHeight = height; windowHeight = height;
@ -830,7 +804,6 @@ static LRESULT CALLBACK trackViewWindowProc(HWND hwnd, UINT msg, WPARAM wParam,
ASSERT(NULL != trackView); ASSERT(NULL != trackView);
return trackView->windowProc(hwnd, msg, wParam, lParam); return trackView->windowProc(hwnd, msg, wParam, lParam);
} }
return 0;
} }
ATOM registerTrackViewWindowClass(HINSTANCE hInstance) ATOM registerTrackViewWindowClass(HINSTANCE hInstance)
@ -861,7 +834,7 @@ HWND TrackView::create(HINSTANCE hInstance, HWND hwndParent)
WS_VSCROLL | WS_HSCROLL | WS_CHILD | WS_VISIBLE, WS_VSCROLL | WS_HSCROLL | WS_CHILD | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, // x, y CW_USEDEFAULT, CW_USEDEFAULT, // x, y
CW_USEDEFAULT, CW_USEDEFAULT, // width, height CW_USEDEFAULT, CW_USEDEFAULT, // width, height
hwndParent, NULL, GetModuleHandle(NULL), (void*)this hwndParent, NULL, hInstance, (void*)this
); );
return hwnd; return hwnd;
} }

View File

@ -116,7 +116,6 @@ private:
return int(syncData->getTrackCount()); return int(syncData->getTrackCount());
}; };
bool selectActive;
int selectStartTrack, selectStopTrack; int selectStartTrack, selectStopTrack;
int selectStartRow, selectStopRow; int selectStartRow, selectStopRow;