summaryrefslogtreecommitdiffstats
path: root/data/inst/instanceloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'data/inst/instanceloader.cpp')
-rw-r--r--data/inst/instanceloader.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/data/inst/instanceloader.cpp b/data/inst/instanceloader.cpp
index 59fed951..bc43c061 100644
--- a/data/inst/instanceloader.cpp
+++ b/data/inst/instanceloader.cpp
@@ -15,7 +15,67 @@
#include "instanceloader.h"
+#include "instancetype.h"
+
InstanceLoader::InstanceLoader(QObject *parent) :
QObject(parent)
{
}
+
+
+InstanceLoader::InstTypeError InstanceLoader::registerInstanceType(InstanceType *type)
+{
+ // Check to see if the type ID exists.
+ if (m_typeMap.contains(type->typeID()))
+ return TypeIDExists;
+
+ // Set the parent to this.
+ type->setParent(this);
+
+ // Add it to the map.
+ m_typeMap.insert(type->typeID(), type);
+ return NoError;
+}
+
+InstanceLoader::InstTypeError InstanceLoader::createInstance(Instance *inst,
+ const InstanceType *type,
+ const QString &instDir)
+{
+ // Check if the type is registered.
+ if (!type || findType(type->typeID()) != type)
+ return TypeNotRegistered;
+
+ // Create the instance.
+ return type->createInstance(inst, instDir);
+}
+
+InstanceLoader::InstTypeError InstanceLoader::loadInstance(Instance *inst,
+ const InstanceType *type,
+ const QString &instDir)
+{
+ // Check if the type is registered.
+ if (!type || findType(type->typeID()) != type)
+ return TypeNotRegistered;
+
+ return type->loadInstance(inst, instDir);
+}
+
+const InstanceType *InstanceLoader::findType(const QString &id)
+{
+ if (!m_typeMap.contains(id))
+ return NULL;
+ else
+ return m_typeMap[id];
+}
+
+InstTypeList InstanceLoader::typeList()
+{
+ InstTypeList typeList;
+
+ for (auto iter = m_typeMap.begin(); iter != m_typeMap.end(); iter++)
+ {
+ typeList.append(*iter);
+ }
+
+ return typeList;
+}