diff --git a/include/resources_db.h b/include/resources_db.h index a41a9e9e7..556238511 100644 --- a/include/resources_db.h +++ b/include/resources_db.h @@ -48,6 +48,11 @@ public: void load( const QString & _file ); void save( const QString & _file ); + ResourcesProvider * provider( void ) + { + return m_provider; + } + inline const ItemList & items( void ) const { return m_items; diff --git a/include/resources_tree_item.h b/include/resources_tree_item.h index 553ed3b2b..ce151922d 100644 --- a/include/resources_tree_item.h +++ b/include/resources_tree_item.h @@ -104,6 +104,11 @@ public: return m_parent; } + inline void setParent( ResourcesTreeItem * _parent ) + { + m_parent = _parent; + } + inline bool temporaryMarker( void ) const { return m_temporaryMarker; diff --git a/include/unified_resources_provider.h b/include/unified_resources_provider.h new file mode 100644 index 000000000..cddc8b02f --- /dev/null +++ b/include/unified_resources_provider.h @@ -0,0 +1,78 @@ +/* + * unified_resources_provider.h - header file for UnifiedResourcesProvider + * + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _UNIFIED_RESOURCES_PROVIDER_H +#define _UNIFIED_RESOURCES_PROVIDER_H + +#include "resources_provider.h" +#include "resources_item.h" + + +class UnifiedResourcesProvider : public ResourcesProvider +{ + Q_OBJECT +public: + UnifiedResourcesProvider(); + virtual ~UnifiedResourcesProvider() + { + } + + void addDatabase( ResourcesDB * _db ); + + virtual QString providerName( void ) const + { + return "UnifiedResourcesProvider"; + } + + virtual void updateDatabase( void ); + virtual int dataSize( const ResourcesItem * _item ) const + { + if( _item->provider() != this ) + { + return _item->provider()->dataSize( _item ); + } + return 0; + } + virtual QByteArray fetchData( const ResourcesItem * _item, + int _maxSize = -1 ) const + { + if( _item->provider() != this ) + { + return _item->provider()->fetchData( _item ); + } + return QByteArray(); + } + + +private: + QList m_mergedDatabases; + + +signals: + void itemsChanged( void ); + +} ; + + +#endif diff --git a/src/core/unified_resources_provider.cpp b/src/core/unified_resources_provider.cpp new file mode 100644 index 000000000..04492aba4 --- /dev/null +++ b/src/core/unified_resources_provider.cpp @@ -0,0 +1,71 @@ +/* + * unified_resources_provider.cpp - implementation of UnifiedResourcesProvider + * + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include + +#include "unified_resources_provider.h" +#include "resources_db.h" + + +UnifiedResourcesProvider::UnifiedResourcesProvider() : + ResourcesProvider( QString() ) +{ + database()->init(); +} + + + + +void UnifiedResourcesProvider::addDatabase( ResourcesDB * _db ) +{ + ResourcesTreeItem * childRoot = _db->topLevelNode()->getChild( 0 ); + if( childRoot ) + { + m_mergedDatabases << _db; + connect( _db, SIGNAL( itemsChanged() ), + this, SIGNAL( itemsChanged() ) ); + + childRoot->setParent( database()->topLevelNode() ); + database()->topLevelNode()->addChild( childRoot ); + } +} + + + + +void UnifiedResourcesProvider::updateDatabase( void ) +{ + foreach( ResourcesDB * db, m_mergedDatabases ) + { + db->provider()->updateDatabase(); + } +} + + + + + +#include "moc_unified_resources_provider.cxx" +