All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions | Protected Member Functions
QGpCoreTools::XMLClassFactory Class Reference

XMLClassFactory provides creation of instances of classes from their XML tag. More...

#include <XMLClassFactory.h>

Inheritance diagram for QGpCoreTools::XMLClassFactory:
GeopsyCore::MetaDataFactory GeopsyCore::SignalGroupFactory GeopsyCore::SignalResultsFactory SciFigs::GraphContentLayerFactory SciFigs::GraphicObjectFactory SciFigs::LineFactory

List of all members.

Public Member Functions

XMLClasscreate (const QString &tag) const
XMLClasscreate (int id) const
XMLClassCreatorcreator (const QString &tag) const
XMLClassCreatorcreator (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 ()

Detailed Description

XMLClassFactory provides creation of instances of classes from their XML tag.


Constructor & Destructor Documentation

{_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.
  }

Member Function Documentation

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

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

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().

  {
    int id=_nextId++;
    _registeredClasses.insert(id, creator);
    _registeredTags.insert(tag, id);
    return id;
  }

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

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::registerTag ( const QString &  tag,
int  id 
)

Registers a new tag for class id;

Referenced by registerTag().

  {
    _registeredTags.insert(tag, 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());
    }
  }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines