track-reordering works \o/

This commit is contained in:
Erik Faye-Lund 2008-09-27 19:36:28 +00:00
parent a244529a4f
commit aa65670383
4 changed files with 30 additions and 5 deletions

View File

@ -26,7 +26,11 @@ bool SyncDocument::load(const std::string &fileName)
// look up track-name, create it if it doesn't exist
int trackIndex = getTrackIndex(name);
if (0 > trackIndex) trackIndex = int(createTrack(name));
if (0 > trackIndex)
{
trackIndex = int(createTrack(name));
trackOrder.push_back(trackIndex);
}
MSXML2::IXMLDOMNodeListPtr rowNodes = trackNode->GetchildNodes();
for (int i = 0; i < rowNodes->Getlength(); ++i)
@ -65,6 +69,7 @@ bool SyncDocument::load(const std::string &fileName)
MessageBox(NULL, temp, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
return false;
}
return true;
}

View File

@ -267,7 +267,8 @@ public:
size_t getTrackIndexFromPos(size_t track) const
{
return track;
assert(track < trackOrder.size());
return trackOrder[track];
}
bool load(const std::string &fileName);
@ -277,6 +278,8 @@ public:
std::map<size_t, size_t> clientRemap;
bool clientPaused;
std::vector<size_t> trackOrder;
private:
std::stack<Command*> undoStack;
std::stack<Command*> redoStack;

View File

@ -524,7 +524,11 @@ int _tmain(int argc, _TCHAR* argv[])
// find track
int serverIndex = document.getTrackIndex(trackName);
if (0 > serverIndex) serverIndex = int(document.createTrack(trackName));
if (0 > serverIndex)
{
serverIndex = int(document.createTrack(trackName));
document.trackOrder.push_back(serverIndex);
}
// setup remap
document.clientRemap[serverIndex] = clientIndex;

View File

@ -867,8 +867,21 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
else setEditRow(editRow + 1);
break;
case VK_LEFT: setEditTrack(editTrack - 1); break;
case VK_RIGHT: setEditTrack(editTrack + 1); break;
case VK_LEFT:
if (GetKeyState(VK_CONTROL) < 0 && 0 < editTrack)
{
std::swap(document->trackOrder[editTrack], document->trackOrder[editTrack - 1]);
}
setEditTrack(editTrack - 1);
break;
case VK_RIGHT:
if (GetKeyState(VK_CONTROL) < 0 && document->trackOrder.size() > editTrack + 1)
{
std::swap(document->trackOrder[editTrack], document->trackOrder[editTrack + 1]);
}
setEditTrack(editTrack + 1);
break;
case VK_PRIOR:
if (GetKeyState(VK_CONTROL) < 0)