From 8e9d902fa0541ba45b0860f98da52bde520bc19a Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Mon, 26 Jan 2015 22:00:23 -0200 Subject: [PATCH] Refactor moving track views up and down --- include/TrackContainerView.h | 5 ++- src/gui/TrackContainerView.cpp | 67 ++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 42e56128f..c6e555651 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -103,8 +103,9 @@ public: return m_tc; } - void moveTrackViewUp( TrackView * _tv ); - void moveTrackViewDown( TrackView * _tv ); + void moveTrackView( TrackView * trackView, int indexTo ); + void moveTrackViewUp( TrackView * trackView ); + void moveTrackViewDown( TrackView * trackView ); // -- for usage by trackView only --------------- TrackView * addTrackView( TrackView * _tv ); diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 4513e9edf..5c908856d 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -156,45 +156,48 @@ void TrackContainerView::removeTrackView( TrackView * _tv ) -void TrackContainerView::moveTrackViewUp( TrackView * _tv ) +void TrackContainerView::moveTrackView( TrackView * trackView, int indexTo ) { - for( int i = 1; i < m_trackViews.size(); ++i ) - { - TrackView * t = m_trackViews[i]; - if( t == _tv ) - { - BBTrack::swapBBTracks( t->getTrack(), - m_trackViews[i - 1]->getTrack() ); - m_scrollLayout->removeWidget( t ); - m_scrollLayout->insertWidget( i - 1, t ); - qSwap( m_tc->m_tracks[i-1], m_tc->m_tracks[i] ); - m_trackViews.swap( i - 1, i ); - realignTracks(); - break; - } - } + // Can't move out of bounds + if ( indexTo >= m_trackViews.size() || indexTo < 0 ) { return; } + + // Does not need to move to itself + int indexFrom = m_trackViews.indexOf( trackView ); + if ( indexFrom == indexTo ) { return; } + + BBTrack::swapBBTracks( trackView->getTrack(), + m_trackViews[indexTo]->getTrack() ); + + m_scrollLayout->removeWidget( trackView ); + m_scrollLayout->insertWidget( indexTo, trackView ); + + Track * track = m_tc->m_tracks[indexFrom]; + + m_tc->m_tracks.remove( indexFrom ); + m_tc->m_tracks.insert( indexTo, track ); + m_trackViews.move( indexFrom, indexTo ); + + realignTracks(); } -void TrackContainerView::moveTrackViewDown( TrackView * _tv ) +void TrackContainerView::moveTrackViewUp( TrackView * trackView ) { - for( int i = 0; i < m_trackViews.size()-1; ++i ) - { - TrackView * t = m_trackViews[i]; - if( t == _tv ) - { - BBTrack::swapBBTracks( t->getTrack(), - m_trackViews[i + 1]->getTrack() ); - m_scrollLayout->removeWidget( t ); - m_scrollLayout->insertWidget( i + 1, t ); - qSwap( m_tc->m_tracks[i], m_tc->m_tracks[i+1] ); - m_trackViews.swap( i, i + 1 ); - realignTracks(); - break; - } - } + int index = m_trackViews.indexOf( trackView ); + + moveTrackView( trackView, index - 1 ); +} + + + + +void TrackContainerView::moveTrackViewDown( TrackView * trackView ) +{ + int index = m_trackViews.indexOf( trackView ); + + moveTrackView( trackView, index + 1 ); }