fake accelerators
This commit is contained in:
parent
8f9877f79b
commit
5150103d8c
@ -46,8 +46,8 @@ static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA
|
||||
AppendMenu(fileMenu, MF_STRING, 3, "&Exit");
|
||||
|
||||
HMENU editMenu = CreatePopupMenu();
|
||||
AppendMenu(editMenu, MF_STRING, WM_USER+0, "&Undo\tCtrl+Z");
|
||||
AppendMenu(editMenu, MF_STRING, WM_USER+1, "&Redo\tShift+Ctrl+Z");
|
||||
AppendMenu(editMenu, MF_STRING, WM_UNDO, "&Undo\tCtrl+Z");
|
||||
AppendMenu(editMenu, MF_STRING, WM_REDO, "&Redo\tShift+Ctrl+Z");
|
||||
AppendMenu(editMenu, MF_SEPARATOR, 0, NULL);
|
||||
AppendMenu(editMenu, MF_STRING, WM_CUT, "Cu&t\tCtrl+X");
|
||||
AppendMenu(editMenu, MF_STRING, WM_COPY, "&Copy\tCtrl+C");
|
||||
@ -79,13 +79,20 @@ static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch (wParam)
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case WM_COPY:
|
||||
/* PostMessage(m_hWnd, WM_COPY, 0, 0); */
|
||||
/* HMMMM.... not working... */
|
||||
printf("copy!\n");
|
||||
break;
|
||||
|
||||
// simply forward these
|
||||
case WM_UNDO:
|
||||
case WM_REDO:
|
||||
SendMessage(trackViewWin, LOWORD(wParam), 0, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("cmd %d %d\n", wParam, lParam);
|
||||
}
|
||||
|
||||
@ -487,16 +487,9 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
|
||||
case VK_PRIOR: setEditRow(editRow - windowRows / 2); break;
|
||||
case VK_NEXT: setEditRow(editRow + windowRows / 2); break;
|
||||
|
||||
case 'U':
|
||||
if (true == ctrlDown && true == shiftDown)
|
||||
{
|
||||
if (!syncDataEdit.redo()) MessageBeep(0);
|
||||
}
|
||||
else if (true == ctrlDown)
|
||||
{
|
||||
if (!syncDataEdit.undo()) MessageBeep(0);
|
||||
}
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
case 'Z':
|
||||
// simulate keyboard accelerators
|
||||
SendMessage(GetParent(this->getWin()), WM_COMMAND, MAKEWPARAM(shiftDown ? WM_REDO : WM_UNDO, 1), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -506,10 +499,9 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
|
||||
case VK_RETURN:
|
||||
{
|
||||
SyncDataEdit::EditCommand *cmd = new SyncDataEdit::EditCommand(
|
||||
editTrack, editRow,
|
||||
float(atof(editString.c_str()))
|
||||
);
|
||||
|
||||
editTrack, editRow,
|
||||
true, float(atof(editString.c_str()))
|
||||
);
|
||||
syncDataEdit.exec(cmd);
|
||||
|
||||
editString.clear();
|
||||
@ -519,8 +511,12 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT flags)
|
||||
|
||||
case VK_DELETE:
|
||||
{
|
||||
SyncTrack &track = getSyncData()->getTrack(editTrack);
|
||||
track.deleteKeyFrame(editRow);
|
||||
SyncDataEdit::EditCommand *cmd = new SyncDataEdit::EditCommand(
|
||||
editTrack, editRow,
|
||||
false, 0.0f
|
||||
);
|
||||
syncDataEdit.exec(cmd);
|
||||
|
||||
refreshCaret = true;
|
||||
}
|
||||
break;
|
||||
@ -643,7 +639,19 @@ LRESULT TrackView::windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case WM_COPY:
|
||||
printf("copy!\n");
|
||||
break;
|
||||
|
||||
|
||||
case WM_UNDO:
|
||||
if (!syncDataEdit.undo()) MessageBeep(0);
|
||||
// unfortunately, we don't know how much to invalidate... so we'll just invalidate it all.
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
break;
|
||||
|
||||
case WM_REDO:
|
||||
if (!syncDataEdit.redo()) MessageBeep(0);
|
||||
// unfortunately, we don't know how much to invalidate... so we'll just invalidate it all.
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
17
trackview.h
17
trackview.h
@ -27,20 +27,27 @@ public:
|
||||
class EditCommand : public Command
|
||||
{
|
||||
public:
|
||||
EditCommand(int track, int row, float value) : track(track), row(row), newVal(value) {}
|
||||
EditCommand(int track, int row, bool existing, float value) : track(track), row(row), newValExisting(existing), newVal(value) {}
|
||||
~EditCommand() {}
|
||||
|
||||
virtual void exec(SyncDataEdit *data)
|
||||
{
|
||||
SyncTrack &track = data->getSyncData()->getTrack(this->track);
|
||||
|
||||
// store old state
|
||||
oldValExisting = track.isKeyFrame(row);
|
||||
if (oldValExisting) oldVal = track.getKeyFrame(row)->value;
|
||||
track.setKeyFrame(row, newVal);
|
||||
|
||||
// update
|
||||
if (!newValExisting) track.deleteKeyFrame(row);
|
||||
else track.setKeyFrame(row, newVal);
|
||||
}
|
||||
|
||||
virtual void undo(SyncDataEdit *data)
|
||||
{
|
||||
SyncTrack &track = data->getSyncData()->getTrack(this->track);
|
||||
|
||||
// un-update
|
||||
if (!oldValExisting) track.deleteKeyFrame(row);
|
||||
else track.setKeyFrame(row, oldVal);
|
||||
}
|
||||
@ -48,7 +55,7 @@ public:
|
||||
private:
|
||||
int track, row;
|
||||
float newVal, oldVal;
|
||||
bool oldValExisting;
|
||||
bool newValExisting, oldValExisting;
|
||||
};
|
||||
|
||||
void exec(Command *cmd)
|
||||
@ -100,6 +107,10 @@ private:
|
||||
SyncData *syncData;
|
||||
};
|
||||
|
||||
|
||||
// custom messages
|
||||
#define WM_REDO (WM_USER + 1)
|
||||
|
||||
class TrackView
|
||||
{
|
||||
public:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user