From 0550132d1b748b27c4b9f1033e26c3d3cb287bde Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Fri, 21 Aug 2009 18:17:32 +0200 Subject: [PATCH] Engine: provide individual ResourceDBs instead of one global provider Pointers to individual ResourceDBs can be obtained from Engine now. This allows for more specialized views and reduces complexity when dealing with resources. --- include/engine.h | 20 ++++++++++++++---- src/core/engine.cpp | 36 +++++++++++++++++--------------- src/gui/InstrumentView.cpp | 5 ++--- src/gui/QuickLoadDialog.cpp | 6 ++---- src/gui/ResourceBrowser.cpp | 3 +-- src/gui/track_container_view.cpp | 10 +++------ src/tracks/instrument_track.cpp | 4 +--- 7 files changed, 44 insertions(+), 40 deletions(-) diff --git a/include/engine.h b/include/engine.h index 62d167ab1..d21236e49 100644 --- a/include/engine.h +++ b/include/engine.h @@ -44,7 +44,7 @@ class MainWindow; class mixer; class pianoRoll; class projectNotes; -class UnifiedResourceProvider; +class ResourceDB; class song; class songEditor; class ladspa2LMMS; @@ -100,9 +100,19 @@ public: return s_projectJournal; } - static UnifiedResourceProvider * resourceProvider() + static ResourceDB * workingDirResourceDB() { - return s_resourceProvider; + return s_workingDirResourceDB; + } + + static ResourceDB * webResourceDB() + { + return s_webResourceDB; + } + + static ResourceDB * mergedResourceDB() + { + return s_mergedResourceDB; } // GUI @@ -200,7 +210,9 @@ private: static mixer * s_mixer; static fxMixer * s_fxMixer; static song * s_song; - static UnifiedResourceProvider * s_resourceProvider; + static ResourceDB * s_workingDirResourceDB; + static ResourceDB * s_webResourceDB; + static ResourceDB * s_mergedResourceDB; static bbTrackContainer * s_bbTrackContainer; static projectJournal * s_projectJournal; static dummyTrackContainer * s_dummyTC; diff --git a/src/core/engine.cpp b/src/core/engine.cpp index f87063e31..0a2967daa 100644 --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -62,7 +62,9 @@ fxMixerView * engine::s_fxMixerView = NULL; MainWindow * engine::s_mainWindow = NULL; bbTrackContainer * engine::s_bbTrackContainer = NULL; song * engine::s_song = NULL; -UnifiedResourceProvider * engine::s_resourceProvider = NULL; +ResourceDB * engine::s_workingDirResourceDB = NULL; +ResourceDB * engine::s_webResourceDB = NULL; +ResourceDB * engine::s_mergedResourceDB = NULL; songEditor * engine::s_songEditor = NULL; automationEditor * engine::s_automationEditor = NULL; AutomationRecorder * engine::s_automationRecorder = NULL; @@ -92,22 +94,22 @@ void engine::init( const bool _has_gui ) // init resource framework - LocalResourceProvider * workingDirResource = - new LocalResourceProvider( ResourceItem::BaseWorkingDir, - QString() ); - LocalResourceProvider * shippedResource = - new LocalResourceProvider( ResourceItem::BaseDataDir, - QString() ); - WebResourceProvider * webResource = - new WebResourceProvider( "http://lmms.sourceforge.net" ); + s_workingDirResourceDB = + ( new LocalResourceProvider( ResourceItem::BaseWorkingDir, + QString() ) )->database(); + ResourceDB * shippedResourceDB = + ( new LocalResourceProvider( ResourceItem::BaseDataDir, + QString() ) )->database(); + s_webResourceDB = + ( new WebResourceProvider( "http://lmms.sourceforge.net" ) ) + ->database(); - UnifiedResourceProvider * unifiedResource = - new UnifiedResourceProvider; - unifiedResource->addDatabase( workingDirResource->database() ); - unifiedResource->addDatabase( shippedResource->database() ); - unifiedResource->addDatabase( webResource->database() ); + UnifiedResourceProvider * unifiedResource = new UnifiedResourceProvider; + unifiedResource->addDatabase( s_workingDirResourceDB ); + unifiedResource->addDatabase( shippedResourceDB ); + unifiedResource->addDatabase( s_webResourceDB ); - s_resourceProvider = unifiedResource; + s_mergedResourceDB = unifiedResource->database(); s_fxMixer = new fxMixer; @@ -191,8 +193,8 @@ void engine::destroy( void ) delete s_automationRecorder; s_automationRecorder = NULL; - delete s_resourceProvider; - s_resourceProvider = NULL; + delete s_mergedResourceDB->provider(); + s_mergedResourceDB = NULL; delete configManager::inst(); } diff --git a/src/gui/InstrumentView.cpp b/src/gui/InstrumentView.cpp index e4126394a..8c1c46383 100644 --- a/src/gui/InstrumentView.cpp +++ b/src/gui/InstrumentView.cpp @@ -29,7 +29,6 @@ #include "instrument_track.h" #include "ResourceDB.h" #include "string_pair_drag.h" -#include "UnifiedResourceProvider.h" InstrumentView::InstrumentView( instrument * _instrument, QWidget * _parent ) : @@ -84,7 +83,7 @@ void InstrumentView::dragEnterEvent( QDragEnterEvent * _dee ) if( stringPairDrag::decodeKey( _dee ) == ResourceItem::mimeKey() ) { const ResourceItem * item = - engine::resourceProvider()->database()-> + engine::mergedResourceDB()-> itemByHash( stringPairDrag::decodeValue( _dee ) ); if( item && model()->getDescriptor()->supportsFileType( @@ -103,7 +102,7 @@ void InstrumentView::dropEvent( QDropEvent * _de ) if( stringPairDrag::decodeKey( _de ) == ResourceItem::mimeKey() ) { const ResourceItem * item = - engine::resourceProvider()->database()-> + engine::mergedResourceDB()-> itemByHash( stringPairDrag::decodeValue( _de ) ); model()->loadResource( item ); _de->accept(); diff --git a/src/gui/QuickLoadDialog.cpp b/src/gui/QuickLoadDialog.cpp index 79e6084d9..382c8a7a1 100644 --- a/src/gui/QuickLoadDialog.cpp +++ b/src/gui/QuickLoadDialog.cpp @@ -24,7 +24,6 @@ #include "QuickLoadDialog.h" #include "ResourceListModel.h" -#include "UnifiedResourceProvider.h" #include "engine.h" #include "ui_QuickLoadDialog.h" @@ -34,8 +33,7 @@ QuickLoadDialog::QuickLoadDialog( QWidget * _parent ) : QDialog( _parent ), ui( new Ui::QuickLoadDialog ), - m_listModel( new ResourceListModel( - engine::resourceProvider()->database(), this ) ) + m_listModel( new ResourceListModel( engine::mergedResourceDB(), this ) ) { ui->setupUi( this ); @@ -47,7 +45,7 @@ QuickLoadDialog::QuickLoadDialog( QWidget * _parent ) : // connect filter edit with model connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), - m_listModel, SLOT( setFilter( const QString & ) ) ); + m_listModel, SLOT( setKeywordFilter( const QString & ) ) ); } diff --git a/src/gui/ResourceBrowser.cpp b/src/gui/ResourceBrowser.cpp index 14b2ee232..6d4058160 100644 --- a/src/gui/ResourceBrowser.cpp +++ b/src/gui/ResourceBrowser.cpp @@ -33,7 +33,6 @@ #include "ResourceFileMapper.h" #include "ResourceTreeModel.h" #include "ResourceTreeView.h" -#include "UnifiedResourceProvider.h" #include "engine.h" #include "embed.h" #include "MainWindow.h" @@ -79,7 +78,7 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : _parent ), m_previewer(), m_filterEdit( NULL ), - m_treeModel( engine::resourceProvider()->database() ) + m_treeModel( engine::mergedResourceDB() ) { // create a model which represents our database as a tree diff --git a/src/gui/track_container_view.cpp b/src/gui/track_container_view.cpp index 4e5df5af2..3c23fc711 100644 --- a/src/gui/track_container_view.cpp +++ b/src/gui/track_container_view.cpp @@ -34,7 +34,6 @@ #include "ResourceDB.h" #include "ResourceItem.h" #include "ResourceFileMapper.h" -#include "UnifiedResourceProvider.h" #include "track_container_view.h" #include "track_container.h" @@ -404,8 +403,7 @@ void trackContainerView::dropEvent( QDropEvent * _de ) if( type == ResourceItem::mimeKey() ) { const ResourceItem * item = - engine::resourceProvider()->database()-> - itemByHash( value ); + engine::mergedResourceDB()->itemByHash( value ); if( item ) { ResourceAction action( item ); @@ -415,15 +413,13 @@ void trackContainerView::dropEvent( QDropEvent * _de ) case ResourceItem::TypePreset: action.loadPreset( dynamic_cast( - track::create( track::InstrumentTrack, - m_tc ) ) ); + track::create( track::InstrumentTrack, m_tc ) ) ); break; case ResourceItem::TypeSample: case ResourceItem::TypePluginSpecificResource: action.loadByPlugin( dynamic_cast( - track::create( track::InstrumentTrack, - m_tc ) ) ); + track::create( track::InstrumentTrack, m_tc ) ) ); break; case ResourceItem::TypeForeignProject: action.importProject( m_tc ); diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 714ce86cc..b4d54729f 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -40,7 +40,6 @@ #include "ResourceAction.h" #include "ResourceDB.h" -#include "UnifiedResourceProvider.h" #include "instrument_track.h" #include "AudioPort.h" @@ -1505,8 +1504,7 @@ void instrumentTrackWindow::dropEvent( QDropEvent * _de ) else if( type == ResourceItem::mimeKey() ) { const ResourceItem * item = - engine::resourceProvider()->database()-> - itemByHash( value ); + engine::mergedResourceDB()->itemByHash( value ); if( !item ) { return;