From b5e31868dc0d4d5094752ab2dba127311434e66f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 16 Sep 2008 06:36:17 +0000 Subject: [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 --- sigmodr/models/BaseModel.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'sigmodr/models/BaseModel.cpp') 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 +#include +#include +#include + +// Qt includes +#include +#include + 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 indexes; -- cgit