summaryrefslogtreecommitdiffstats
path: root/sigmodr/models/BaseModel.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-09-16 06:36:17 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-09-16 06:36:17 +0000
commitb5e31868dc0d4d5094752ab2dba127311434e66f (patch)
tree9ffa57312ec216426059ec16d011865e4c1af72f /sigmodr/models/BaseModel.cpp
parent0f0dbfb0395810c1c205a1dc10cf1f226669fd00 (diff)
downloadsigen-b5e31868dc0d4d5094752ab2dba127311434e66f.tar.gz
sigen-b5e31868dc0d4d5094752ab2dba127311434e66f.tar.xz
sigen-b5e31868dc0d4d5094752ab2dba127311434e66f.zip
[FIX] Refactored out some code to ObjectModel
[FIX] Drag and drop now accepts URLs [FIX] The main window can now accept drops git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@265 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'sigmodr/models/BaseModel.cpp')
-rw-r--r--sigmodr/models/BaseModel.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/sigmodr/models/BaseModel.cpp b/sigmodr/models/BaseModel.cpp
index 8258fb0f..12c88711 100644
--- a/sigmodr/models/BaseModel.cpp
+++ b/sigmodr/models/BaseModel.cpp
@@ -21,6 +21,16 @@
// Sigmod includes
#include "../../sigmod/Object.h"
+// KDE includes
+#include <KApplication>
+#include <KMessageBox>
+#include <KUrl>
+#include <KIO/NetAccess>
+
+// Qt includes
+#include <QtCore/QFile>
+#include <QtXml/QDomDocument>
+
Sigmodr::BaseModel::BaseModel(BaseModel* parent, Sigmod::Object* object, const QString& name) :
m_parent(parent),
m_object(object),
@@ -63,6 +73,52 @@ const Sigmod::Object* Sigmodr::BaseModel::object() const
return m_object;
}
+bool Sigmodr::BaseModel::loadFromData(const QString& data, QDomDocument* xml) const
+{
+ bool loaded = false;
+ QString error;
+ int line;
+ int column;
+ KUrl url(data);
+ if (url.isValid())
+ {
+ QString path;
+ const bool local = url.isLocalFile();
+ if (local)
+ path = url.path();
+ else
+ {
+ if (!KIO::NetAccess::download(url, path, KApplication::kApplication()->activeWindow()))
+ {
+ KMessageBox::error(KApplication::kApplication()->activeWindow(), KIO::NetAccess::lastErrorString(), "KIO Error");
+ return false;
+ }
+ }
+ QFile file(path);
+ if (file.open(QIODevice::ReadOnly))
+ {
+ if (!xml->setContent(&file, &error, &line, &column))
+ {
+ KMessageBox::error(KApplication::kApplication()->activeWindow(), QString("%1 at line %2, column %3").arg(error).arg(line).arg(column), "XML Error");
+ loaded = false;
+ }
+ }
+ else
+ {
+ KMessageBox::error(KApplication::kApplication()->activeWindow(), file.errorString(), "File Error");
+ loaded = false;
+ }
+ file.close();
+ if (!local)
+ KIO::NetAccess::removeTempFile(path);
+ }
+ else if (xml->setContent(data, &error, &line, &column))
+ loaded = true;
+ else
+ KMessageBox::error(KApplication::kApplication()->activeWindow(), QString("%1 at line %2, column %3").arg(error).arg(line).arg(column), "XML Error");
+ return loaded;
+}
+
void Sigmodr::BaseModel::childRowChanged(const int row)
{
QList<int> indexes;