Move cloned tracks under the original

This commit is contained in:
Amadeus Folego
2015-01-27 16:05:18 -02:00
parent 8e9d902fa0
commit 33893e51c4
4 changed files with 25 additions and 13 deletions

View File

@@ -441,7 +441,7 @@ public:
static Track * create( TrackTypes tt, TrackContainer * tc );
static Track * create( const QDomElement & element,
TrackContainer * tc );
void clone();
Track * clone();
// pure virtual functions

View File

@@ -103,6 +103,11 @@ public:
return m_tc;
}
const QList<TrackView *> & trackViews() const
{
return( m_trackViews );
}
void moveTrackView( TrackView * trackView, int indexTo );
void moveTrackViewUp( TrackView * trackView );
void moveTrackViewDown( TrackView * trackView );
@@ -122,7 +127,7 @@ public:
public slots:
void realignTracks();
void createTrackView( Track * _t );
TrackView * createTrackView( Track * _t );
void deleteTrackView( TrackView * _tv );
virtual void dropEvent( QDropEvent * _de );
@@ -142,11 +147,6 @@ public slots:
protected:
static const int DEFAULT_PIXELS_PER_TACT = 16;
const QList<TrackView *> & trackViews() const
{
return( m_trackViews );
}
virtual void mousePressEvent( QMouseEvent * _me );
virtual void mouseMoveEvent( QMouseEvent * _me );
virtual void mouseReleaseEvent( QMouseEvent * _me );

View File

@@ -1688,13 +1688,18 @@ void TrackOperationsWidget::paintEvent( QPaintEvent * pe )
/*! \brief Clone this track
*
*/
void TrackOperationsWidget::cloneTrack()
{
m_trackView->getTrack()->clone();
TrackContainerView *tcView = m_trackView->trackContainerView();
Track *newTrack = m_trackView->getTrack()->clone();
TrackView *newTrackView = tcView->createTrackView( newTrack );
int index = tcView->trackViews().indexOf( m_trackView );
tcView->moveTrackView( newTrackView, index + 1 );
}
@@ -1904,12 +1909,12 @@ Track * Track::create( const QDomElement & element, TrackContainer * tc )
/*! \brief Clone a track from this track
*
*/
void Track::clone()
Track * Track::clone()
{
QDomDocument doc;
QDomElement parent = doc.createElement( "clone" );
saveState( doc, parent );
create( parent.firstChild().toElement(), m_trackContainer );
return create( parent.firstChild().toElement(), m_trackContainer );
}

View File

@@ -222,11 +222,18 @@ void TrackContainerView::realignTracks()
void TrackContainerView::createTrackView( Track * _t )
TrackView * TrackContainerView::createTrackView( Track * _t )
{
//m_tc->addJournalCheckPoint();
_t->createView( this );
// Avoid duplicating track views
for( trackViewList::iterator it = m_trackViews.begin();
it != m_trackViews.end(); ++it )
{
if ( ( *it )->getTrack() == _t ) { return ( *it ); }
}
return _t->createView( this );
}