From aa65670383c1b3cf7bedee302b874174a6c0e595 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Sat, 27 Sep 2008 19:36:28 +0000 Subject: [PATCH] track-reordering works \o/ --- editor/syncdocument.cpp | 7 ++++++- editor/syncdocument.h | 5 ++++- editor/synctracker2.cpp | 6 +++++- editor/trackview.cpp | 17 +++++++++++++++-- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/editor/syncdocument.cpp b/editor/syncdocument.cpp index 8f6b13a..9f713a6 100644 --- a/editor/syncdocument.cpp +++ b/editor/syncdocument.cpp @@ -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; } diff --git a/editor/syncdocument.h b/editor/syncdocument.h index 394f951..d4c0d7b 100644 --- a/editor/syncdocument.h +++ b/editor/syncdocument.h @@ -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 clientRemap; bool clientPaused; + std::vector trackOrder; + private: std::stack undoStack; std::stack redoStack; diff --git a/editor/synctracker2.cpp b/editor/synctracker2.cpp index fa0ed35..5dce4cb 100644 --- a/editor/synctracker2.cpp +++ b/editor/synctracker2.cpp @@ -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; diff --git a/editor/trackview.cpp b/editor/trackview.cpp index 77f4acd..88b5cbb 100644 --- a/editor/trackview.cpp +++ b/editor/trackview.cpp @@ -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)