diff --git a/src/core/ResourcePreviewer.cpp b/src/core/ResourcePreviewer.cpp index 2e40213f3..a2f9db4e9 100644 --- a/src/core/ResourcePreviewer.cpp +++ b/src/core/ResourcePreviewer.cpp @@ -25,6 +25,7 @@ #include +#include "ResourceAction.h" #include "ResourcePreviewer.h" #include "ResourceFileMapper.h" #include "ResourceItem.h" @@ -87,11 +88,7 @@ void ResourcePreviewer::preview( ResourceItem * _item ) m_previewTrack->loadTrackSpecificSettings( m_defaultSettings.content(). firstChild().toElement() ); - // fetch data, load into multimedia project and - // load it as preset - m_previewTrack->loadTrackSpecificSettings( - multimediaProject( _item->fetchData() ). - content().firstChild().toElement() ); + ResourceAction( _item ).loadPreset( m_previewTrack ); m_previewTrack->getMidiPort()->setMode( midiPort::Disabled ); break; @@ -104,22 +101,7 @@ void ResourcePreviewer::preview( ResourceItem * _item ) m_previewTrack->loadTrackSpecificSettings( m_defaultSettings.content(). firstChild().toElement() ); - // if neccessary, load according instrument for the - // file to be previewed - instrument * i = m_previewTrack->getInstrument(); - const QString ext = QFileInfo( _item->name() ). - suffix().toLower(); - if( i == NULL || - !i->getDescriptor()->supportsFileType( ext ) ) - { - i = m_previewTrack->loadInstrument( - engine::pluginFileHandling()[ext] ); - } - if( i != NULL ) - { - ResourceFileMapper mapper( _item ); - i->loadFile( mapper.fileName() ); - } + ResourceAction( _item ).loadByPlugin( m_previewTrack ); break; } default: diff --git a/src/gui/track_container_view.cpp b/src/gui/track_container_view.cpp index c0da7b71f..0aa686f36 100644 --- a/src/gui/track_container_view.cpp +++ b/src/gui/track_container_view.cpp @@ -30,6 +30,7 @@ #include #include +#include "ResourceAction.h" #include "ResourceDB.h" #include "ResourceItem.h" #include "ResourceFileMapper.h" @@ -40,7 +41,6 @@ #include "bb_track.h" #include "main_window.h" #include "debug.h" -#include "file_browser.h" #include "import_filter.h" #include "instrument.h" #include "instrument_track.h" @@ -383,7 +383,6 @@ void trackContainerView::dropEvent( QDropEvent * _de ) QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); engine::getMixer()->lock(); - /* begin{obsolete code} - remove together with fileBrowser */ if( type == "instrument" ) { instrumentTrack * it = dynamic_cast( @@ -393,33 +392,6 @@ void trackContainerView::dropEvent( QDropEvent * _de ) //it->toggledInstrumentTrackButton( true ); _de->accept(); } - else if( type == "samplefile" || type == "pluginpresetfile" ) - { - instrumentTrack * it = dynamic_cast( - track::create( track::InstrumentTrack, - m_tc ) ); - instrument * i = it->loadInstrument( - engine::pluginFileHandling()[fileItem::extension( - value )]); - i->loadFile( value ); - //it->toggledInstrumentTrackButton( true ); - _de->accept(); - } - else if( type == "presetfile" ) - { - multimediaProject mmp( value ); - instrumentTrack * it = dynamic_cast( - track::create( track::InstrumentTrack, - m_tc ) ); - it->loadSettings( mmp.content().toElement() ); - //it->toggledInstrumentTrackButton( true ); - _de->accept(); - } - else if( type == "importedproject" ) - { - importFilter::import( value, m_tc ); - _de->accept(); - } else if( type.left( 6 ) == "track_" ) { multimediaProject mmp( value.toUtf8() ); @@ -436,39 +408,26 @@ void trackContainerView::dropEvent( QDropEvent * _de ) itemByHash( value ); if( item ) { + ResourceAction action( item ); switch( item->type() ) { case ResourceItem::TypePreset: - { - instrumentTrack * it = dynamic_cast( + action.loadPreset( + dynamic_cast( track::create( track::InstrumentTrack, - m_tc ) ); - // fetch data, load into multimedia project and - // load it as preset - it->loadTrackSpecificSettings( - multimediaProject( item->fetchData() ). - content().firstChild().toElement() ); + m_tc ) ) ); break; - } case ResourceItem::TypeSample: case ResourceItem::TypeSoundFont: - { - instrumentTrack * it = dynamic_cast( + action.loadByPlugin( + dynamic_cast( track::create( track::InstrumentTrack, - m_tc ) ); - const QString ext = QFileInfo( item->name() ). - suffix().toLower(); - instrument * i = it->loadInstrument( - engine::pluginFileHandling()[ext] ); - if( i != NULL ) - { - ResourceFileMapper mapper( item ); - i->loadFile( mapper.fileName() ); - } + m_tc ) ) ); + break; + case ResourceItem::TypeForeignProject: + action.importProject( m_tc ); break; - } - } } } diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 3a90f350f..2cd4b1e5d 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -39,6 +39,10 @@ #include #include +#include "ResourceAction.h" +#include "ResourceDB.h" +#include "UnifiedResourceProvider.h" + #include "instrument_track.h" #include "audio_port.h" #include "automation_pattern.h" @@ -49,7 +53,6 @@ #include "effect_rack_view.h" #include "embed.h" #include "engine.h" -#include "file_browser.h" #include "fx_mixer.h" #include "fx_mixer_view.h" #include "instrument_sound_shaping.h" @@ -1495,26 +1498,26 @@ void instrumentTrackWindow::dropEvent( QDropEvent * _de ) engine::getSong()->setModified(); _de->accept(); } - else if( type == "presetfile" ) + else if( type == ResourceItem::mimeKey() ) { - multimediaProject mmp( value ); - instrumentTrack::removeMidiPortNode( mmp ); - m_track->setSimpleSerializing(); - m_track->loadSettings( mmp.content().toElement() ); - engine::getSong()->setModified(); - _de->accept(); - } - else if( type == "pluginpresetfile" ) - { - const QString ext = fileItem::extension( value ); - instrument * i = m_track->getInstrument(); - if( !i->getDescriptor()->supportsFileType( ext ) ) + const ResourceItem * item = + engine::resourceProvider()->database()-> + itemByHash( value ); + if( !item ) { - i = m_track->loadInstrument( - engine::pluginFileHandling()[ext] ); + return; + } + ResourceAction action( item ); + if( action.loadByPlugin( m_track ) ) + { + _de->accept(); + } + else if( item->type() == ResourceItem::TypePreset && + action.loadPreset( m_track ) ) + { + engine::getSong()->setModified(); + _de->accept(); } - i->loadFile( value ); - _de->accept(); } }