diff --git a/Modules/XNAT/CMakeLists.txt b/Modules/XNAT/CMakeLists.txt index 2b036eacb5..7ebf7a6c6a 100644 --- a/Modules/XNAT/CMakeLists.txt +++ b/Modules/XNAT/CMakeLists.txt @@ -1,5 +1,6 @@ MITK_CREATE_MODULE( + DEPENDS MitkCore MitkQtWidgets PACKAGE_DEPENDS PUBLIC CTK|CTKXNATCore PRIVATE Qt4|QtGui Qt5|UiTools+XmlPatterns ) diff --git a/Modules/XNAT/include/QmitkXnatTreeModel.h b/Modules/XNAT/include/QmitkXnatTreeModel.h index 2bc7ad596b..ad4ab5fd47 100644 --- a/Modules/XNAT/include/QmitkXnatTreeModel.h +++ b/Modules/XNAT/include/QmitkXnatTreeModel.h @@ -1,37 +1,51 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QMITKXNATTREEMODEL_H #define QMITKXNATTREEMODEL_H // CTK includes #include // MITK includes #include "MitkXNATExports.h" +namespace mitk { +class DataNode; +} + class MITKXNAT_EXPORT QmitkXnatTreeModel : public ctkXnatTreeModel { Q_OBJECT public: QmitkXnatTreeModel(); virtual QVariant data(const QModelIndex& index, int role) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + + using QAbstractItemModel::supportedDropActions; + virtual Qt::DropActions supportedDropActions(); + + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + + signals: + void ResourceDropped(const QList&, ctkXnatObject*); + }; #endif // QMITKXNATTREEMODEL_H diff --git a/Modules/XNAT/src/QmitkXnatTreeModel.cpp b/Modules/XNAT/src/QmitkXnatTreeModel.cpp index fa6da20b34..64703ceed4 100644 --- a/Modules/XNAT/src/QmitkXnatTreeModel.cpp +++ b/Modules/XNAT/src/QmitkXnatTreeModel.cpp @@ -1,63 +1,111 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkXnatTreeModel.h" +#include + #include #include #include #include #include QmitkXnatTreeModel::QmitkXnatTreeModel () : ctkXnatTreeModel() { } QVariant QmitkXnatTreeModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DecorationRole) { ctkXnatObject* xnatObject = this->xnatObject(index); QString path; if(dynamic_cast(xnatObject)) { path = ":/xnat/server.ico"; } else if(dynamic_cast(xnatObject)) { path = ":/xnat/project.ico"; } else if(dynamic_cast(xnatObject)) { path = ":/xnat/subject.ico"; } else if(dynamic_cast(xnatObject)) { path = ":/xnat/experiment.ico"; } return QIcon(path); } return ctkXnatTreeModel::data(index, role); } + +bool QmitkXnatTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int /*row*/, int /*column*/, const QModelIndex &parent) +{ + if (action == Qt::IgnoreAction) + return true; + + // Return true if data can be handled + bool returnVal (false); + + if (data->hasFormat(QmitkMimeTypes::DataNodePtrs)) + { + returnVal = true; + QList droppedNodes = QmitkMimeTypes::ToDataNodePtrList(data); + ctkXnatObject* parentObj = this->xnatObject(parent); + emit ResourceDropped(droppedNodes, parentObj); + } + return returnVal; +} + +Qt::DropActions QmitkXnatTreeModel::supportedDropActions() +{ + return Qt::CopyAction; +} + +Qt::ItemFlags QmitkXnatTreeModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = ctkXnatTreeModel::flags(index); + + + if (index.isValid()) + { + ctkXnatProject* xnatProj = dynamic_cast(this->xnatObject(index)); + + // No dropping at project level allowed + if (xnatProj == NULL) + { + return Qt::ItemIsDropEnabled | defaultFlags; + } + else + { + return defaultFlags; + } + } + else + return defaultFlags; +}