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