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.
This commit is contained in:
Tobias Doerffel
2009-08-21 18:17:32 +02:00
parent d3bb3ff13a
commit 0550132d1b
7 changed files with 44 additions and 40 deletions

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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 & ) ) );
}

View File

@@ -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

View File

@@ -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<instrumentTrack *>(
track::create( track::InstrumentTrack,
m_tc ) ) );
track::create( track::InstrumentTrack, m_tc ) ) );
break;
case ResourceItem::TypeSample:
case ResourceItem::TypePluginSpecificResource:
action.loadByPlugin(
dynamic_cast<instrumentTrack *>(
track::create( track::InstrumentTrack,
m_tc ) ) );
track::create( track::InstrumentTrack, m_tc ) ) );
break;
case ResourceItem::TypeForeignProject:
action.importProject( m_tc );

View File

@@ -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;