diff --git a/include/ExportProjectDialog.h b/include/ExportProjectDialog.h index 46ab7fdb2..dfab28561 100644 --- a/include/ExportProjectDialog.h +++ b/include/ExportProjectDialog.h @@ -32,7 +32,7 @@ #include "ui_export_project.h" #include "ProjectRenderer.h" - +#include "RenderManager.h" class ExportProjectDialog : public QDialog, public Ui::ExportProjectDialog { @@ -50,26 +50,17 @@ protected: private slots: void startBtnClicked( void ); void updateTitleBar( int ); - void render(ProjectRenderer* renderer); - void multiRender(); - ProjectRenderer* prepRender(); - void popRender(); void accept(); + void startExport(); private: QString m_fileName; QString m_dirName; QString m_fileExtension; - typedef QVector RenderVector; - RenderVector m_renderers; bool m_multiExport; - typedef QVector TrackVector; - TrackVector m_unmuted; - TrackVector m_unmutedBB; ProjectRenderer::ExportFileFormats m_ft; - TrackVector m_tracksToRender; - ProjectRenderer* m_activeRenderer; + RenderManager* m_renderManager; } ; #endif diff --git a/src/gui/ExportProjectDialog.cpp b/src/gui/ExportProjectDialog.cpp index d81d6b917..23794db80 100644 --- a/src/gui/ExportProjectDialog.cpp +++ b/src/gui/ExportProjectDialog.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "ExportProjectDialog.h" #include "Song.h" @@ -41,10 +42,10 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, m_fileName( _file_name ), m_fileExtension(), m_multiExport( multi_export ), - m_activeRenderer( NULL ) + m_renderManager( NULL ) { setupUi( this ); - setWindowTitle( tr( "Export project to %1" ).arg( + setWindowTitle( tr( "Export project to %1" ).arg( QFileInfo( _file_name ).fileName() ) ); // get the extension of the chosen file @@ -80,7 +81,6 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, connect( startButton, SIGNAL( clicked() ), this, SLOT( startBtnClicked() ) ); - } @@ -88,12 +88,7 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, ExportProjectDialog::~ExportProjectDialog() { - - for( RenderVector::ConstIterator it = m_renderers.begin(); - it != m_renderers.end(); ++it ) - { - delete (*it); - } + delete m_renderManager; } @@ -101,14 +96,12 @@ ExportProjectDialog::~ExportProjectDialog() void ExportProjectDialog::reject() { - for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) - { - (*it)->abortProcessing(); + if( m_renderManager ) { + m_renderManager->abortProcessing(); } - if( m_activeRenderer ) { - m_activeRenderer->abortProcessing(); - } + delete m_renderManager; + m_renderManager = NULL; QDialog::reject(); } @@ -117,24 +110,10 @@ void ExportProjectDialog::reject() void ExportProjectDialog::accept() { - // If more to render, kick off next render job - if( m_renderers.isEmpty() == false ) - { - popRender(); - } - else - { - // If done, then reset mute states - while( m_unmuted.isEmpty() == false ) - { - Track* restoreTrack = m_unmuted.back(); - m_unmuted.pop_back(); - restoreTrack->setMuted( false ); - } + delete m_renderManager; + m_renderManager = NULL; - QDialog::accept(); - - } + QDialog::accept(); } @@ -142,16 +121,8 @@ void ExportProjectDialog::accept() void ExportProjectDialog::closeEvent( QCloseEvent * _ce ) { - for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) - { - if( (*it)->isRunning() ) - { - (*it)->abortProcessing(); - } - } - - if( m_activeRenderer && m_activeRenderer->isRunning() ) { - m_activeRenderer->abortProcessing(); + if( m_renderManager ) { + m_renderManager->abortProcessing(); } QDialog::closeEvent( _ce ); @@ -159,94 +130,8 @@ void ExportProjectDialog::closeEvent( QCloseEvent * _ce ) -void ExportProjectDialog::popRender() -{ - if( m_multiExport && m_tracksToRender.isEmpty() == false ) - { - Track* renderTrack = m_tracksToRender.back(); - m_tracksToRender.pop_back(); - // Set must states for song tracks - for( TrackVector::ConstIterator it = m_unmuted.begin(); it != m_unmuted.end(); ++it ) - { - if( (*it) == renderTrack ) - { - (*it)->setMuted( false ); - } - else - { - (*it)->setMuted( true ); - } - } - } - - - // Pop next render job and start - m_activeRenderer = m_renderers.back(); - m_renderers.pop_back(); - render( m_activeRenderer ); -} - - - -void ExportProjectDialog::multiRender() -{ - m_dirName = m_fileName; - QString path = QDir(m_fileName).filePath("text.txt"); - - int x = 1; - - const TrackContainer::TrackList & tl = Engine::getSong()->tracks(); - - // Check for all unmuted tracks. Remember list. - for( TrackContainer::TrackList::ConstIterator it = tl.begin(); - it != tl.end(); ++it ) - { - Track* tk = (*it); - Track::TrackTypes type = tk->type(); - // Don't mute automation tracks - if ( tk->isMuted() == false && - ( type == Track::InstrumentTrack || type == Track::SampleTrack ) ) - { - m_unmuted.push_back(tk); - QString nextName = tk->name(); - nextName = nextName.remove(QRegExp("[^a-zA-Z]")); - QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); - m_fileName = QDir(m_dirName).filePath(name); - prepRender(); - } - else if (! tk->isMuted() && type == Track::BBTrack ) - { - m_unmutedBB.push_back(tk); - } - - - } - - const TrackContainer::TrackList t2 = Engine::getBBTrackContainer()->tracks(); - for( TrackContainer::TrackList::ConstIterator it = t2.begin(); it != t2.end(); ++it ) - { - Track* tk = (*it); - if ( tk->isMuted() == false ) - { - m_unmuted.push_back(tk); - QString nextName = tk->name(); - nextName = nextName.remove(QRegExp("[^a-zA-Z]")); - QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); - m_fileName = QDir(m_dirName).filePath(name); - prepRender(); - } - } - - - m_tracksToRender = m_unmuted; - - popRender(); -} - - - -ProjectRenderer* ExportProjectDialog::prepRender() +void ExportProjectDialog::startExport() { Mixer::qualitySettings qs = Mixer::qualitySettings( @@ -262,38 +147,33 @@ ProjectRenderer* ExportProjectDialog::prepRender() bitrates[ bitrateCB->currentIndex() ], static_cast( depthCB->currentIndex() ) ); + m_renderManager = new RenderManager( qs, os, m_ft, m_fileName ); + Engine::getSong()->setExportLoop( exportLoopCB->isChecked() ); Engine::getSong()->setRenderBetweenMarkers( renderMarkersCB->isChecked() ); - ProjectRenderer* renderer = new ProjectRenderer( qs, os, m_ft, m_fileName ); + connect( m_renderManager, SIGNAL( progressChanged( int ) ), + progressBar, SLOT( setValue( int ) ) ); + connect( m_renderManager, SIGNAL( progressChanged( int ) ), + this, SLOT( updateTitleBar( int ) )) ; + connect( m_renderManager, SIGNAL( finished() ), + this, SLOT( accept() ) ); + connect( m_renderManager, SIGNAL( finished() ), + gui->mainWindow(), SLOT( resetWindowTitle() ) ); - m_renderers.push_back(renderer); - - return renderer; -} - - - -void ExportProjectDialog::render( ProjectRenderer* renderer ) -{ - - if( renderer->isReady() ) + if ( m_multiExport ) { - connect( renderer, SIGNAL( progressChanged( int ) ), progressBar, SLOT( setValue( int ) ) ); - connect( renderer, SIGNAL( progressChanged( int ) ), this, SLOT( updateTitleBar( int ) )) ; - connect( renderer, SIGNAL( finished() ), this, SLOT( accept() ) ); - connect( renderer, SIGNAL( finished() ), gui->mainWindow(), SLOT( resetWindowTitle() ) ); - - renderer->startProcessing(); + m_renderManager->renderTracks(); } else { - accept(); + m_renderManager->renderProject(); } } + void ExportProjectDialog::startBtnClicked() { m_ft = ProjectRenderer::NumFileFormats; @@ -325,15 +205,7 @@ void ExportProjectDialog::startBtnClicked() updateTitleBar( 0 ); - if (m_multiExport==true) - { - multiRender(); - } - else - { - prepRender(); - popRender(); - } + startExport(); }