XMLClassFactory provides creation of instances of classes from their XML tag. More...
#include <XMLClassFactory.h>
Public Member Functions | |
XMLClass * | create (const QString &tag) const |
XMLClass * | create (int id) const |
XMLClassCreator * | creator (const QString &tag) const |
XMLClassCreator * | creator (int id) const |
int | id (const QString &tag) const |
int | registerClass (const QString &tag, XMLClassCreator *creator) |
QList< int > | registeredIds () const |
QStringList | registeredTags () const |
void | registerTag (const QString &tag, int id) |
void | registerTag (const QString &tag, const QString &destTag) |
XMLClassFactory () | |
~XMLClassFactory () | |
Static Public Member Functions | |
static void | clearFactories () |
static void | registerFactory (XMLClassFactory *f) |
Protected Member Functions | |
int | newId () |
XMLClassFactory provides creation of instances of classes from their XML tag.
QGpCoreTools::XMLClassFactory::XMLClassFactory | ( | ) | [inline] |
{_nextId=0;}
Destructor
{ // Registered classes are not deleted. If the macros are correctly used, // each class creator is a static object. The class factory does not have // ownership of these blocks. }
void QGpCoreTools::XMLClassFactory::clearFactories | ( | ) | [static] |
Clear all factories. Used by CoreApplicationPrivate::~CoreApplicationPrivate().
Referenced by QGpCoreTools::CoreApplicationPrivate::destructorCleanUp().
{ qDeleteAll(_factories); _factories.clear(); }
XMLClass * QGpCoreTools::XMLClassFactory::create | ( | const QString & | tag | ) | const |
Returns a new class corresponding to tag or null if it is not registered.
Reimplemented in GeopsyCore::MetaDataFactory, SciFigs::GraphicObjectFactory, SciFigs::GraphContentLayerFactory, SciFigs::LineFactory, GeopsyCore::SignalGroupFactory, and GeopsyCore::SignalResultsFactory.
{ QMap<QString, int>::const_iterator it; it=_registeredTags.find(tag); if(it!=_registeredTags.end()) { return create(it.value()); } else { return 0; } }
XMLClass * QGpCoreTools::XMLClassFactory::create | ( | int | id | ) | const |
Returns a new class corresponding to id or null if it is not registered.
Reimplemented in GeopsyCore::MetaDataFactory, SciFigs::GraphicObjectFactory, SciFigs::GraphContentLayerFactory, SciFigs::LineFactory, GeopsyCore::SignalGroupFactory, and GeopsyCore::SignalResultsFactory.
References QGpCoreTools::XMLClassCreator::create(), and creator().
{ XMLClassCreator * c=creator(id); if(c) { return c->create(); } else { return 0; } }
XMLClassCreator * QGpCoreTools::XMLClassFactory::creator | ( | const QString & | tag | ) | const |
Returns creator corresponding to tag or 0 if not registered.
Reimplemented in SciFigs::GraphicObjectFactory.
Referenced by create(), and GeopsyCore::MetaDataFactory::registerClass().
{ QMap<QString, int>::const_iterator it; it=_registeredTags.find(tag); if(it!=_registeredTags.end()) { return creator(it.value()); } else { return 0; } }
XMLClassCreator * QGpCoreTools::XMLClassFactory::creator | ( | int | id | ) | const |
Returns creator corresponding to id or 0 if not registered.
{ QMap<int, XMLClassCreator *>::const_iterator it; it=_registeredClasses.find(id); if(it!=_registeredClasses.end()) { return it.value(); } else { return 0; } }
int QGpCoreTools::XMLClassFactory::id | ( | const QString & | tag | ) | const |
Returns id corresponfing to tag, or -1 if it does not exist.
Referenced by registerClass(), GeopsyCore::MetaDataFactory::registerClass(), GeopsyCore::AbstractSignalGroup::xml_member(), and GeopsyCore::Signal::xml_member().
{ QMap<QString, int>::const_iterator it; it=_registeredTags.find(tag); if(it!=_registeredTags.end()) { return it.value(); } else { return -1; } }
int QGpCoreTools::XMLClassFactory::newId | ( | ) | [inline, protected] |
Referenced by GeopsyCore::MetaDataFactory::MetaDataFactory().
{return _nextId++;}
int QGpCoreTools::XMLClassFactory::registerClass | ( | const QString & | tag, |
XMLClassCreator * | creator | ||
) |
Registers class with tag and its creator class. Returns its unique id.
Reimplemented in GeopsyCore::MetaDataFactory.
References id().
QList< int > QGpCoreTools::XMLClassFactory::registeredIds | ( | ) | const |
Returns the list of all registered ids
Referenced by GeopsyCore::MetaDataFactory::addScriptProperties(), and GeopsyCore::MetaDataFactory::registerScriptTypes().
{ QList<int> l; QMap<int, XMLClassCreator *>::const_iterator it; for(it=_registeredClasses.begin(); it!=_registeredClasses.end(); it++) { l.append(it.key()); } return l; }
QStringList QGpCoreTools::XMLClassFactory::registeredTags | ( | ) | const |
Returns the list of all registered tags
Referenced by SciFigs::GraphicSheet::addInsertActions().
{ QStringList l; QMap<QString, int>::const_iterator it; for(it=_registeredTags.begin(); it!=_registeredTags.end(); it++) { l.append(it.key()); } return l; }
void QGpCoreTools::XMLClassFactory::registerFactory | ( | XMLClassFactory * | f | ) | [static] |
Registers all factories to properly delete them upon exit.
Referenced by GeopsyCore::SignalGroupFactory::init(), GeopsyCore::SignalResultsFactory::init(), SciFigs::GraphContentLayerFactory::init(), SciFigs::LineFactory::init(), SciFigs::GraphicObjectFactory::init(), and GeopsyCore::MetaDataFactory::init().
{ _factories.append(f); }
void QGpCoreTools::XMLClassFactory::registerTag | ( | const QString & | tag, |
int | id | ||
) |
void QGpCoreTools::XMLClassFactory::registerTag | ( | const QString & | tag, |
const QString & | destTag | ||
) |
Registers a new tag for class id;
References registerTag().
{ QMap<QString, int>::const_iterator it; it=_registeredTags.find(destTag); if(it!=_registeredTags.end()) { registerTag(tag, it.value()); } else { qWarning("XMLClassFactory::registerTag: unknown destination tag '%s'", destTag.toAscii().data()); } }