summaryrefslogtreecommitdiffstats
path: root/src/Instance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Instance.cpp')
-rw-r--r--src/Instance.cpp58
1 files changed, 49 insertions, 9 deletions
diff --git a/src/Instance.cpp b/src/Instance.cpp
index c3ac17c..eb4d9dd 100644
--- a/src/Instance.cpp
+++ b/src/Instance.cpp
@@ -26,7 +26,7 @@ namespace ZoomEdit {
guint Instance::instances = 0;
-Instance::Instance() : window(NULL), levelXml(NULL), level(NULL) {
+Instance::Instance(const Glib::ustring &file) : window(NULL), levelXml(NULL), level(NULL) {
instances++;
#ifdef GLIBMM_EXCEPTIONS_ENABLED
@@ -57,11 +57,10 @@ Instance::Instance() : window(NULL), levelXml(NULL), level(NULL) {
window->signal_hide().connect(sigc::mem_fun(this, &Instance::destroy));
- levelXml = new xmlpp::DomParser("level.lvl");
- xmlpp::Document *doc = levelXml->get_document();
-
- if(doc && doc->get_root_node())
- level = new Data::Level(doc->get_root_node());
+ if(file.empty())
+ createLevel();
+ else
+ loadLevel(file);
window->show();
}
@@ -81,10 +80,51 @@ Instance::~Instance() {
Gtk::Main::quit();
}
-bool Instance::create() {
- Instance *instance = new Instance();
+void Instance::createLevel() {
+ if(level)
+ delete level;
+
+ if(levelXml)
+ delete levelXml;
+
+ levelXml = new xmlpp::DomParser;
+ xmlpp::Document *doc = levelXml->get_document();
+
+ xmlpp::Element *root = doc->create_root_node("level");
+
+ xmlpp::Element *info = root->add_child("info");
+ info->add_child("name");
+ info->add_child("desc");
+ xmlpp::Element *start = info->add_child("start");
+ start->set_attribute("x", "0");
+ start->set_attribute("y", "0");
+ start->set_attribute("z", "0");
+
+ root->add_child("rooms");
+ root->add_child("gates");
+ root->add_child("textures");
+}
+
+bool Instance::loadLevel(const Glib::ustring &file) {
+ if(level)
+ delete level;
+
+ if(levelXml)
+ delete levelXml;
+
+ levelXml = new xmlpp::DomParser(file);
+ xmlpp::Document *doc = levelXml->get_document();
+
+ if(doc && doc->get_root_node())
+ level = new Data::Level(doc->get_root_node());
+
+ return (level != NULL);
+}
+
+bool Instance::create(const Glib::ustring &file) {
+ Instance *instance = new Instance(file);
- if(!instance->xml) {
+ if(!instance->level) {
delete instance;
return false;
}