Refactor moving track views up and down

This commit is contained in:
Amadeus Folego
2015-01-26 22:00:23 -02:00
parent 07e422c66d
commit 8e9d902fa0
2 changed files with 38 additions and 34 deletions

View File

@@ -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 );

View File

@@ -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 );
}