diff generator/typesystem.cpp @ 4:0a29ce1ae854

CMake build script. Small fixes in examples.
author SokoL_SD
date Wed, 13 May 2009 19:01:55 +0000
parents e78566595089
children 5015aede8edd
line wrap: on
line diff
--- a/generator/typesystem.cpp	Wed May 13 17:34:40 2009 +0000
+++ b/generator/typesystem.cpp	Wed May 13 19:01:55 2009 +0000
@@ -138,8 +138,8 @@
 class Handler : public QXmlDefaultHandler
 {
 public:
-    Handler(TypeDatabase *database, bool generate)
-        : m_database(database), m_generate(generate ? TypeEntry::GenerateAll : TypeEntry::GenerateForSubclass)
+    Handler(TypeDatabase *database, const QString &source_dir, bool generate)
+        : m_database(database), m_generate(generate ? TypeEntry::GenerateAll : TypeEntry::GenerateForSubclass), m_source_dir(source_dir)
     {
         m_current_enum = 0;
         current = 0;
@@ -215,6 +215,8 @@
     FieldModificationList m_field_mods;
 
     QHash<QString, StackElement::ElementType> tagNames;
+
+    QString m_source_dir;
 };
 
 bool Handler::error(const QXmlParseException &e)
@@ -840,7 +842,7 @@
                     return false;
                 }
 
-                if (!m_database->parseFile(name, convertBoolean(attributes["generate"], "generate", true))) {
+                if (!m_database->parseFile(name, m_source_dir, convertBoolean(attributes["generate"], "generate", true))) {
                     m_error = QString("Failed to parse: '%1'").arg(name);
                     return false;
                 }
@@ -1512,16 +1514,21 @@
     addRemoveFunctionToTemplates(this);
 }
 
-bool TypeDatabase::parseFile(const QString &filename, bool generate)
+bool TypeDatabase::parseFile(const QString &filename, const QString &source_dir, bool generate)
 {
-    QFile file(filename);
+    QString name;
+    if (source_dir.isEmpty())
+	name = filename;
+    else
+        name = source_dir + "/" + filename;
+    QFile file(name);
     Q_ASSERT(file.exists());
     QXmlInputSource source(&file);
 
     int count = m_entries.size();
 
     QXmlSimpleReader reader;
-    Handler handler(this, generate);
+    Handler handler(this, source_dir, generate);
 
     reader.setContentHandler(&handler);
     reader.setErrorHandler(&handler);