summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-02 14:06:06 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-02 14:06:06 +0000
commit4a56b453e43a53508f13d263cde7cf083f00cd26 (patch)
treebec14d62085ac818a0e89744c8febb75c7c88222
parentAdded constructors to SP classes. (diff)
downloadinkscape-4a56b453e43a53508f13d263cde7cf083f00cd26.tar.gz
inkscape-4a56b453e43a53508f13d263cde7cf083f00cd26.zip
Added new factory for SPObject tree objects.
(bzr r11608.1.68)
-rw-r--r--src/Makefile_insert1
-rw-r--r--src/sp-factory.cpp28
-rw-r--r--src/sp-factory.h22
3 files changed, 51 insertions, 0 deletions
diff --git a/src/Makefile_insert b/src/Makefile_insert
index 226364b49..ef076a242 100644
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
@@ -155,6 +155,7 @@ ink_common_sources += \
sp-defs.cpp sp-defs.h \
sp-desc.cpp sp-desc.h \
sp-ellipse.cpp sp-ellipse.h \
+ sp-factory.cpp sp-factory.h \
sp-filter.cpp sp-filter.h number-opt-number.h \
sp-filter-primitive.cpp sp-filter-primitive.h \
sp-filter-reference.cpp sp-filter-reference.h \
diff --git a/src/sp-factory.cpp b/src/sp-factory.cpp
new file mode 100644
index 000000000..192f092ed
--- /dev/null
+++ b/src/sp-factory.cpp
@@ -0,0 +1,28 @@
+#include "sp-factory.h"
+
+#include <stdexcept>
+
+#include "sp-object.h"
+
+SPFactory& SPFactory::instance() {
+ static SPFactory factory;
+ return factory;
+}
+
+bool SPFactory::registerObject(std::string id, CreateObjectMethod* createFunction) {
+ return this->objectMap.insert(std::make_pair(id, createFunction)).second;
+}
+
+SPObject* SPFactory::createObject(std::string id) const {
+ std::map<std::string, CreateObjectMethod*>::const_iterator entry = this->objectMap.find(id);
+
+ if (entry == objectMap.end()) {
+ //g_warning("Factory: Type \"%s\" not registered!", id.c_str());
+// SPObject* o = new SPObject();
+//
+// return o;
+ return 0;
+ }
+
+ return (entry->second)();
+}
diff --git a/src/sp-factory.h b/src/sp-factory.h
new file mode 100644
index 000000000..d4639836f
--- /dev/null
+++ b/src/sp-factory.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include <map>
+#include <string>
+
+class SPObject;
+
+/**
+ * Factory for creating objects from the SPObject tree.
+ */
+class SPFactory {
+public:
+ static SPFactory& instance();
+
+ typedef SPObject* CreateObjectMethod();
+ bool registerObject(std::string id, CreateObjectMethod* createFunction);
+
+ SPObject* createObject(std::string id) const;
+
+private:
+ std::map<std::string, CreateObjectMethod*> objectMap;
+};