ctrl-modifying works!

This commit is contained in:
Erik Faye-Lund 2008-02-11 08:56:07 +00:00
parent f8c1ec9d6a
commit 946f151bfc
3 changed files with 42 additions and 14 deletions

View File

@ -113,7 +113,7 @@ public:
commands.clear(); commands.clear();
} }
void addEditCommand(Command *cmd) void addCommand(Command *cmd)
{ {
commands.push_back(cmd); commands.push_back(cmd);
} }
@ -175,22 +175,22 @@ public:
} }
} }
void setKey(int track, int row, float val) void setKeyFrame(int track, int row, const SyncTrack::KeyFrame &key)
{ {
SyncTrack &t = getTrack(track); SyncTrack &t = getTrack(track);
SyncEditData::Command *cmd; SyncEditData::Command *cmd;
if (t.isKeyFrame(row)) if (t.isKeyFrame(row))
{ {
cmd = new EditCommand(track, row, val); cmd = new EditCommand(track, row, key);
} }
else else
{ {
cmd = new InsertCommand(track, row, val); cmd = new InsertCommand(track, row, key);
} }
exec(cmd); exec(cmd);
} }
void deleteKey(int track, int row) void deleteKeyFrame(int track, int row)
{ {
assert(getTrack(track).isKeyFrame(row)); assert(getTrack(track).isKeyFrame(row));
Command *cmd = new DeleteCommand(track, row); Command *cmd = new DeleteCommand(track, row);

View File

@ -613,7 +613,7 @@ void TrackView::onReturn()
{ {
if (editString.size() > 0) if (editString.size() > 0)
{ {
syncData->setKey(editTrack, editRow, float(_tstof(editString.c_str()))); syncData->setKeyFrame(editTrack, editRow, float(_tstof(editString.c_str())));
editString.clear(); editString.clear();
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
@ -626,7 +626,20 @@ void TrackView::onDelete()
SyncTrack &track = syncData->getTrack(editTrack); SyncTrack &track = syncData->getTrack(editTrack);
if (track.isKeyFrame(editRow)) if (track.isKeyFrame(editRow))
{ {
syncData->deleteKey(editTrack, editRow); syncData->deleteKeyFrame(editTrack, editRow);
invalidatePos(editTrack, editRow);
}
else MessageBeep(0);
}
void TrackView::bias(float amount)
{
SyncTrack &track = syncData->getTrack(editTrack);
if (track.isKeyFrame(editRow))
{
SyncTrack::KeyFrame newKey = *track.getKeyFrame(editRow);
newKey.value += amount;
syncData->setKeyFrame(editTrack, editRow, newKey);
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
} }
else MessageBeep(0); else MessageBeep(0);
@ -638,14 +651,28 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
{ {
switch (keyCode) switch (keyCode)
{ {
case VK_UP: setEditRow(editRow - 1); break; case VK_UP:
case VK_DOWN: setEditRow(editRow + 1); break; if (GetKeyState(VK_CONTROL) < 0) bias(1);
else setEditRow(editRow - 1);
break;
case VK_DOWN:
if (GetKeyState(VK_CONTROL) < 0) bias(-1);
else setEditRow(editRow + 1);
break;
case VK_LEFT: setEditTrack(editTrack - 1); break; case VK_LEFT: setEditTrack(editTrack - 1); break;
case VK_RIGHT: setEditTrack(editTrack + 1); break; case VK_RIGHT: setEditTrack(editTrack + 1); break;
case VK_PRIOR: setEditRow(editRow - windowRows / 2); break; case VK_PRIOR:
case VK_NEXT: setEditRow(editRow + windowRows / 2); break; if (GetKeyState(VK_CONTROL) < 0) bias(10);
else setEditRow(editRow - windowRows / 2);
break;
case VK_NEXT:
if (GetKeyState(VK_CONTROL) < 0) bias(-10);
else setEditRow(editRow + windowRows / 2);
break;
default: default:
break; break;
@ -658,7 +685,7 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
case VK_DELETE: onDelete(); break; case VK_DELETE: onDelete(); break;
case VK_BACK: case VK_BACK:
if (editString.size() > 0) if (!editString.empty())
{ {
editString.resize(editString.size() - 1); editString.resize(editString.size() - 1);
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
@ -668,7 +695,7 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
case VK_CANCEL: case VK_CANCEL:
case VK_ESCAPE: case VK_ESCAPE:
if (editString.size() > 0) if (!editString.empty())
{ {
// return to old value (i.e don't clear) // return to old value (i.e don't clear)
editString.clear(); editString.clear();

View File

@ -40,6 +40,7 @@ private:
void onReturn(); void onReturn();
void onDelete(); void onDelete();
void bias(float amount);
void copy(); void copy();
void cut(); void cut();