diff --git a/include/TrackContainer.h b/include/TrackContainer.h index 797b47289..4ffa0ad66 100644 --- a/include/TrackContainer.h +++ b/include/TrackContainer.h @@ -68,6 +68,7 @@ public: void addTrack( Track * _track ); void removeTrack( Track * _track ); + void moveTrack(Track* track, int indexTo); virtual void updateAfterTrackAdd(); @@ -100,6 +101,7 @@ public: signals: void trackAdded( lmms::Track * _track ); void trackRemoved(); + void trackMoved(); protected: static AutomatedValueMap automatedValuesFromTracks(const TrackList &tracks, TimePos timeStart, int clipNum = -1); diff --git a/src/core/TrackContainer.cpp b/src/core/TrackContainer.cpp index 5a68ac8db..7005362ca 100644 --- a/src/core/TrackContainer.cpp +++ b/src/core/TrackContainer.cpp @@ -214,6 +214,13 @@ void TrackContainer::removeTrack( Track * _track ) } } +void TrackContainer::moveTrack(Track* track, int indexTo) +{ + m_tracks.erase(std::find(m_tracks.begin(), m_tracks.end(), track)); + m_tracks.insert(m_tracks.begin() + indexTo, track); + + emit trackMoved(); +} diff --git a/src/gui/clips/PatternClipView.cpp b/src/gui/clips/PatternClipView.cpp index 1dd8ad683..a08d67172 100644 --- a/src/gui/clips/PatternClipView.cpp +++ b/src/gui/clips/PatternClipView.cpp @@ -54,6 +54,8 @@ PatternClipView::PatternClipView(Clip* _clip, TrackView* _tv) : this, &PatternClipView::update); connect(Engine::patternStore(), &TrackContainer::trackRemoved, this, &PatternClipView::update); + connect(Engine::patternStore(), &TrackContainer::trackMoved, + this, &PatternClipView::update); setStyle( QApplication::style() ); } diff --git a/src/gui/editors/TrackContainerView.cpp b/src/gui/editors/TrackContainerView.cpp index e85f4e866..1747e671d 100644 --- a/src/gui/editors/TrackContainerView.cpp +++ b/src/gui/editors/TrackContainerView.cpp @@ -199,13 +199,11 @@ void TrackContainerView::moveTrackView( TrackView * trackView, int indexTo ) PatternTrack::swapPatternTracks( trackView->getTrack(), m_trackViews[indexTo]->getTrack() ); + m_tc->moveTrack(trackView->getTrack(), indexTo); + m_scrollLayout->removeWidget( trackView ); m_scrollLayout->insertWidget( indexTo, trackView ); - Track * track = m_tc->m_tracks[indexFrom]; - - m_tc->m_tracks.erase(m_tc->m_tracks.begin() + indexFrom); - m_tc->m_tracks.insert(m_tc->m_tracks.begin() + indexTo, track); m_trackViews.move( indexFrom, indexTo ); realignTracks();