diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-09-16 06:36:17 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-09-16 06:36:17 +0000 |
| commit | b5e31868dc0d4d5094752ab2dba127311434e66f (patch) | |
| tree | 9ffa57312ec216426059ec16d011865e4c1af72f /sigmodr/models/BaseModel.cpp | |
| parent | 0f0dbfb0395810c1c205a1dc10cf1f226669fd00 (diff) | |
| download | sigen-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.cpp | 56 |
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; |
