diff options
Diffstat (limited to 'sigmodr/SigmodTreeModel.cpp')
| -rw-r--r-- | sigmodr/SigmodTreeModel.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/sigmodr/SigmodTreeModel.cpp b/sigmodr/SigmodTreeModel.cpp index f4288e1c..f1d9b4a3 100644 --- a/sigmodr/SigmodTreeModel.cpp +++ b/sigmodr/SigmodTreeModel.cpp @@ -27,6 +27,7 @@ // Qt includes #include <QtCore/QMimeData> #include <QtCore/QStringList> +#include <QtCore/QUrl> #include <QtXml/QDomDocument> Sigmodr::SigmodTreeModel::SigmodTreeModel(QObject* parent) : @@ -125,7 +126,7 @@ Sigmodr::BaseModel* Sigmodr::SigmodTreeModel::getItem(const QModelIndex& index) QStringList Sigmodr::SigmodTreeModel::mimeTypes() const { - return QStringList() << "application/x-sigmod+xml"; + return QStringList() << "application/x-sigmod+xml" << "text/uri-list"; } QMimeData* Sigmodr::SigmodTreeModel::mimeData(const QModelIndexList& indexes) const @@ -144,13 +145,25 @@ bool Sigmodr::SigmodTreeModel::dropMimeData(const QMimeData* data, Qt::DropActio { if (action == Qt::IgnoreAction) return true; - if (!data->hasFormat("application/x-sigmod+xml")) - return false; - bool success; - if (parent.isValid()) - emit(layoutAboutToBeChanged()); - success = parent.isValid() ? setData(parent, data->data("application/x-sigmod+xml"), Sigmodr::BaseModel::XmlRole) : m_root->setData(data->data("application/x-sigmod+xml"), Sigmodr::BaseModel::XmlRole); - emit(layoutChanged()); + QString format; + bool success = false; + if (data->hasFormat("application/x-sigmod+xml")) + { + QByteArray mimeData = data->data("application/x-sigmod+xml"); + emit(layoutAboutToBeChanged()); + success = parent.isValid() ? setData(parent, mimeData, Sigmodr::BaseModel::XmlRole) : m_root->setData(mimeData, Sigmodr::BaseModel::XmlRole); + emit(layoutChanged()); + } + else if (data->hasFormat("text/uri-list")) + { + QList<QUrl> urls = data->urls(); + foreach (QUrl url, urls) + { + emit(layoutAboutToBeChanged()); + success = parent.isValid() ? setData(parent, url.toEncoded(), Sigmodr::BaseModel::XmlRole) : m_root->setData(url.toEncoded(), Sigmodr::BaseModel::XmlRole); + emit(layoutChanged()); + } + } if (success) emit(dirty(findSigmod(parent), true)); return success; |
