arenaelementtyperegistry.cpp
Go to the documentation of this file.
00001 #include "arenaelementtyperegistry.h"
00002 
00003 #include "arenaelementtype.h"
00004 #include "arenaelement.h"
00005 #include "xmlloadingexception.h"
00006 
00007 #include "../global.h"
00008 
00009 #include <QDebug>
00010 #include <QDir>
00011 
00012 ArenaElementTypeRegistry::ArenaElementTypeRegistry(const QString& dir)
00013 {
00014     load(dir);
00015 }
00016 
00017 QList<ArenaElementType*> ArenaElementTypeRegistry::elementTypes()
00018 {
00019     return m_elementTypes.values();
00020 }
00021 
00022 ArenaElementType* ArenaElementTypeRegistry::elementType(const QString &typeName)
00023 {
00024     return m_elementTypes[typeName];
00025 }
00026 
00027 bool ArenaElementTypeRegistry::hasElement(const QString &typeName)
00028 {
00029     return m_elementTypes.contains(typeName);
00030 }
00031 
00032 ArenaElement* ArenaElementTypeRegistry::instantiateElement(const QString &typeName)
00033 {
00034     ArenaElementType *type = elementType(typeName);
00035     if (!type)
00036         return 0;
00037     ArenaElement *element = type->createInstance();
00038     return element;
00039 }
00040 
00041 void ArenaElementTypeRegistry::load(const QString &dir)
00042 {
00043     QDir topDir(dir);
00044     QStringList entries = topDir.entryList(QDir::Dirs);
00045     //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: Loading elements.";
00046     foreach (QString entry, entries)
00047     {
00048         //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: Checking elements/" + entry;
00049         // These aren't really folders...
00050         if (entry == "." || entry == "..")
00051             continue;
00052 
00053         QDir entryDir(topDir.path() + "/" + entry);
00054         if (entryDir.exists("properties.xml"))
00055         {
00056             //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: properties.xml exists. Loading element.";
00057             ArenaElementType *t = new ArenaElementType();
00059             if (t->load(entryDir))
00060                 m_elementTypes[t->name()] = t;
00061             else
00062                 delete t;
00063         }
00064     }
00065 }


hector_nist_arena_designer
Author(s): Johannes Simon, Stefan Kohlbrecher
autogenerated on Mon Oct 6 2014 00:26:31