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.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <QtCore/QDateTime>
|
||||
#include <QtCore/QHash>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtXml/QDomDocument>
|
||||
|
||||
@@ -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<ResourcesItem::Type, QString> TypeStringMap;
|
||||
typedef QMap<ResourcesItem::BaseDirectory, QString> BaseDirStringMap;
|
||||
static TypeStringMap s_typeNames;
|
||||
static BaseDirStringMap s_baseDirNames;
|
||||
|
||||
ResourcesProvider * m_provider;
|
||||
ItemList m_items;
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
#include "mmp.h"
|
||||
|
||||
|
||||
QMap<ResourcesItem::Type, QString> ResourcesDB::s_typeNames;
|
||||
QMap<ResourcesItem::BaseDirectory, QString> 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<ResourcesItem::Type>( e.attribute( "type" ).toInt() ),
|
||||
static_cast<ResourcesItem::BaseDirectory>(
|
||||
e.attribute( "basedir" ).toInt() ),
|
||||
typeFromName( e.attribute( "type" ) ),
|
||||
baseDirFromName( e.attribute( "basedir" ) ),
|
||||
e.attribute( "path" ),
|
||||
h,
|
||||
e.attribute( "tags" ),
|
||||
|
||||
Reference in New Issue
Block a user