diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 7e9dee437..3431289b1 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -33,6 +33,7 @@ #include "Track.h" #include "JournallingObject.h" +#include "InstrumentTrack.h" class QVBoxLayout; @@ -182,6 +183,19 @@ signals: } ; +class InstrumentLoaderThread : public QThread +{ + Q_OBJECT +public: + InstrumentLoaderThread( QObject *parent = 0, InstrumentTrack *it = 0, + QString name = "" ); + void run(); + +private: + InstrumentTrack *m_it; + QString m_name; + QThread *m_containerThread; +}; #endif diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 94c72d278..a2d3ce12b 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -325,7 +325,9 @@ void TrackContainerView::dropEvent( QDropEvent * _de ) InstrumentTrack * it = dynamic_cast( Track::create( Track::InstrumentTrack, m_tc ) ); - it->loadInstrument( value ); + InstrumentLoaderThread *ilt = new InstrumentLoaderThread( + this, it, value ); + ilt->start(); //it->toggledInstrumentTrackButton( true ); _de->accept(); } @@ -453,6 +455,22 @@ void TrackContainerView::scrollArea::wheelEvent( QWheelEvent * _we ) +InstrumentLoaderThread::InstrumentLoaderThread( QObject *parent, InstrumentTrack *it, QString name ) : + QThread( parent ), + m_it( it ), + m_name( name ) +{ + m_containerThread = thread(); +} + +void InstrumentLoaderThread::run() +{ + Instrument *i = m_it->loadInstrument( m_name ); + QObject *parent = i->parent(); + i->setParent( 0 ); + i->moveToThread( m_containerThread ); + i->setParent( parent ); +}