From 002021aac528a04f2132b1cf8aaa93f16bf1de71 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Mon, 18 May 2009 14:27:02 +0200 Subject: [PATCH] ResourcesDB: save type and basedir property as string rather than number So far the type and basedir properties were saved as numbers (as they are defined in internal enumeration). This is bad style so these properties are now translated into a human-readable string when saving and back to internal enumeration type when loading. --- include/resources_db.h | 43 +++++++++++++++++++++++++++++++++++++++ src/core/resources_db.cpp | 37 ++++++++++++++++++++++++++++----- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/include/resources_db.h b/include/resources_db.h index cfb94797a..5c25daeea 100644 --- a/include/resources_db.h +++ b/include/resources_db.h @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -81,6 +82,48 @@ private: QDomElement & _de ); void loadTreeItem( ResourcesTreeItem * _i, QDomElement & _de ); + static inline QString typeName( ResourcesItem::Type _t ) + { + return s_typeNames[_t]; + } + + static inline QString baseDirName( ResourcesItem::BaseDirectory _bd ) + { + return s_baseDirNames[_bd]; + } + + static inline ResourcesItem::Type typeFromName( const QString & _n ) + { + for( TypeStringMap::ConstIterator it = s_typeNames.begin(); + it != s_typeNames.end(); ++it ) + { + if( it.value() == _n ) + { + return it.key(); + } + } + return ResourcesItem::TypeUnknown; + } + + static inline ResourcesItem::BaseDirectory baseDirFromName( + const QString & _n ) + { + for( BaseDirStringMap::ConstIterator it = + s_baseDirNames.begin(); + it != s_baseDirNames.end(); ++it ) + { + if( it.value() == _n ) + { + return it.key(); + } + } + return ResourcesItem::BaseRoot; + } + + typedef QMap TypeStringMap; + typedef QMap BaseDirStringMap; + static TypeStringMap s_typeNames; + static BaseDirStringMap s_baseDirNames; ResourcesProvider * m_provider; ItemList m_items; diff --git a/src/core/resources_db.cpp b/src/core/resources_db.cpp index ea83d8b2f..aa4cab6c6 100644 --- a/src/core/resources_db.cpp +++ b/src/core/resources_db.cpp @@ -30,6 +30,10 @@ #include "mmp.h" +QMap ResourcesDB::s_typeNames; +QMap ResourcesDB::s_baseDirNames; + + ResourcesDB::ResourcesDB( ResourcesProvider * _provider ) : m_provider( _provider ) @@ -37,6 +41,30 @@ ResourcesDB::ResourcesDB( ResourcesProvider * _provider ) : connect( m_provider, SIGNAL( itemsChanged() ), this, SIGNAL( itemsChanged() ) ); + if( s_typeNames.isEmpty() ) + { + s_typeNames[ResourcesItem::TypeUnknown] = "Unknown"; + s_typeNames[ResourcesItem::TypeDirectory] = "Directory"; + s_typeNames[ResourcesItem::TypeSample] = "Sample"; + s_typeNames[ResourcesItem::TypeSoundFont] = "SoundFont"; + s_typeNames[ResourcesItem::TypePreset] = "Preset"; + s_typeNames[ResourcesItem::TypeProject] = "Project"; + s_typeNames[ResourcesItem::TypeMidiFile] = "MidiFile"; + s_typeNames[ResourcesItem::TypeForeignProject] = "ForeignProject"; + s_typeNames[ResourcesItem::TypePlugin] = "Plugin"; + s_typeNames[ResourcesItem::TypeImage] = "Image"; + } + + if( s_baseDirNames.isEmpty() ) + { + s_baseDirNames[ResourcesItem::BaseRoot] = "Root"; + s_baseDirNames[ResourcesItem::BaseWorkingDir] = "WorkingDir"; + s_baseDirNames[ResourcesItem::BaseDataDir] = "DataDir"; + s_baseDirNames[ResourcesItem::BaseHome] = "Home"; + s_baseDirNames[ResourcesItem::BaseURL] = "URL"; + } + + } @@ -107,8 +135,8 @@ void ResourcesDB::saveTreeItem( const ResourcesTreeItem * _i, { const ResourcesItem * it = _i->item(); e.setAttribute( "name", it->name() ); - e.setAttribute( "type", it->type() ); - e.setAttribute( "basedir", it->baseDir() ); + e.setAttribute( "type", typeName( it->type() ) ); + e.setAttribute( "basedir", baseDirName( it->baseDir() ) ); e.setAttribute( "path", it->path() ); e.setAttribute( "hash", it->hash() ); e.setAttribute( "size", it->size() ); @@ -135,9 +163,8 @@ void ResourcesDB::loadTreeItem( ResourcesTreeItem * _i, QDomElement & _de ) { ResourcesItem * item = new ResourcesItem( m_provider, e.attribute( "name" ), - static_cast( e.attribute( "type" ).toInt() ), - static_cast( - e.attribute( "basedir" ).toInt() ), + typeFromName( e.attribute( "type" ) ), + baseDirFromName( e.attribute( "basedir" ) ), e.attribute( "path" ), h, e.attribute( "tags" ),