diff --git a/Modules/ModuleList.cmake b/Modules/ModuleList.cmake index d2e2f659ec..e8c8e06df4 100644 --- a/Modules/ModuleList.cmake +++ b/Modules/ModuleList.cmake @@ -1,72 +1,71 @@ # The entries in the mitk_modules list must be # ordered according to their dependencies. set(mitk_modules Core AppUtil DCMTesting RDF LegacyIO DataTypesExt Overlays LegacyGL AlgorithmsExt MapperExt DICOMReader DICOMTesting Qt4Qt5TestModule SceneSerializationBase PlanarFigure ImageDenoising ImageExtraction ImageStatistics LegacyAdaptors SceneSerialization GraphAlgorithms Multilabel ContourModel SurfaceInterpolation Segmentation PlanarFigureSegmentation OpenViewCore QmlItems QtWidgets QtWidgetsExt SegmentationUI DiffusionImaging GPGPU OpenIGTLink IGTBase IGT CameraCalibration RigidRegistration RigidRegistrationUI DeformableRegistration DeformableRegistrationUI OpenCL OpenCVVideoSupport QtOverlays InputDevices ToFHardware ToFProcessing ToFUI US USUI DicomUI Simulation Remeshing Python Persistence OpenIGTLinkUI IGTUI VtkShaders DicomRT IOExt XNAT - XNATUI TubeGraph ) if(MITK_ENABLE_PIC_READER) list(APPEND mitk_modules IpPicSupportIO) endif() diff --git a/Modules/XNAT/CMakeLists.txt b/Modules/XNAT/CMakeLists.txt index 37c14d6c2b..781a937d0d 100644 --- a/Modules/XNAT/CMakeLists.txt +++ b/Modules/XNAT/CMakeLists.txt @@ -1,5 +1,5 @@ MITK_CREATE_MODULE( PACKAGE_DEPENDS PUBLIC CTK|CTKXNATCore - PRIVATE Qt4 Qt5|UiTools+XmlPatterns + PRIVATE Qt4 Qt5|UiTools+XmlPatterns+Widgets ) diff --git a/Modules/XNAT/files.cmake b/Modules/XNAT/files.cmake index 766d942c9e..92a5df99d1 100644 --- a/Modules/XNAT/files.cmake +++ b/Modules/XNAT/files.cmake @@ -1,9 +1,21 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES mitkXnatSessionTracker.cpp + QmitkXnatProjectInfoWidget.cpp + QmitkXnatSubjectInfoWidget.cpp + QmitkXnatExperimentInfoWidget.cpp ) set(MOC_H_FILES include/mitkXnatSessionTracker.h + include/QmitkXnatProjectInfoWidget.h + include/QmitkXnatSubjectInfoWidget.h + include/QmitkXnatExperimentInfoWidget.h +) + +set(UI_FILES + src/QmitkXnatProjectInfoWidgetControls.ui + src/QmitkXnatSubjectInfoWidgetControls.ui + src/QmitkXnatExperimentInfoWidgetControls.ui ) diff --git a/Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidget.h b/Modules/XNAT/include/QmitkXnatExperimentInfoWidget.h similarity index 87% rename from Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidget.h rename to Modules/XNAT/include/QmitkXnatExperimentInfoWidget.h index f7294e136e..0ab20dc767 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidget.h +++ b/Modules/XNAT/include/QmitkXnatExperimentInfoWidget.h @@ -1,48 +1,48 @@ /*=================================================================== 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 QMITKXNATEXPERIMENTINFOWIDGET_H #define QMITKXNATEXPERIMENTINFOWIDGET_H // XNATUI -#include "ui_QmitkXnatExperimentInfoWidgetControls.h" -#include "MitkXNATUIExports.h" +#include +#include // Qt #include // CTK XNAT Core class ctkXnatExperiment; -class MITKXNATUI_EXPORT QmitkXnatExperimentInfoWidget : public QWidget +class MITKXNAT_EXPORT QmitkXnatExperimentInfoWidget : public QWidget { Q_OBJECT public: QmitkXnatExperimentInfoWidget(ctkXnatExperiment* experiment = 0, QWidget* parent = 0); ~QmitkXnatExperimentInfoWidget(); void SetExperiment(ctkXnatExperiment* experiment); ctkXnatExperiment* GetExperiment() const; protected: Ui::QmitkXnatExperimentInfoWidgetControls m_Controls; private: ctkXnatExperiment* m_Experiment; }; #endif // QMITKXNATEXPERIMENTINFOWIDGET_H diff --git a/Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidget.h b/Modules/XNAT/include/QmitkXnatProjectInfoWidget.h similarity index 86% rename from Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidget.h rename to Modules/XNAT/include/QmitkXnatProjectInfoWidget.h index 05aa9687df..91969824b0 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidget.h +++ b/Modules/XNAT/include/QmitkXnatProjectInfoWidget.h @@ -1,47 +1,47 @@ /*=================================================================== 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 QMITKXNATPROJECTINFOWIDGET_H #define QMITKXNATPROJECTINFOWIDGET_H // XNATUI -#include "ui_QmitkXnatProjectInfoWidgetControls.h" -#include "MitkXNATUIExports.h" +#include +#include // Qt #include // CTK XNAT Core class ctkXnatProject; -class MITKXNATUI_EXPORT QmitkXnatProjectInfoWidget : public QWidget +class MITKXNAT_EXPORT QmitkXnatProjectInfoWidget : public QWidget { Q_OBJECT public: QmitkXnatProjectInfoWidget(ctkXnatProject* project, QWidget* parent = 0); ~QmitkXnatProjectInfoWidget(); ctkXnatProject* GetProject() const; protected: Ui::QmitkXnatProjectInfoWidgetControls m_Controls; private: ctkXnatProject* m_Project; }; #endif // QMITKXNATPROJECTINFOWIDGET_H diff --git a/Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidget.h b/Modules/XNAT/include/QmitkXnatSubjectInfoWidget.h similarity index 87% rename from Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidget.h rename to Modules/XNAT/include/QmitkXnatSubjectInfoWidget.h index 805888b4c2..23674ee13e 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidget.h +++ b/Modules/XNAT/include/QmitkXnatSubjectInfoWidget.h @@ -1,48 +1,48 @@ /*=================================================================== 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 QMITKXNATSUBJECTINFOWIDGET_H #define QMITKXNATSUBJECTINFOWIDGET_H // XNATUI -#include "ui_QmitkXnatSubjectInfoWidgetControls.h" -#include "MitkXNATUIExports.h" +#include +#include // Qt #include // CTK XNAT Core class ctkXnatSubject; -class MITKXNATUI_EXPORT QmitkXnatSubjectInfoWidget : public QWidget +class MITKXNAT_EXPORT QmitkXnatSubjectInfoWidget : public QWidget { Q_OBJECT public: QmitkXnatSubjectInfoWidget(ctkXnatSubject* subject, QWidget* parent = 0); ~QmitkXnatSubjectInfoWidget(); void SetSubject(ctkXnatSubject* subject); ctkXnatSubject* GetSubject() const; protected: Ui::QmitkXnatSubjectInfoWidgetControls m_Controls; private: ctkXnatSubject* m_Subject; }; #endif // QMITKXNATSUBJECTINFOWIDGET_H diff --git a/Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidget.cpp b/Modules/XNAT/src/QmitkXnatExperimentInfoWidget.cpp similarity index 100% rename from Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidget.cpp rename to Modules/XNAT/src/QmitkXnatExperimentInfoWidget.cpp diff --git a/Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidgetControls.ui b/Modules/XNAT/src/QmitkXnatExperimentInfoWidgetControls.ui similarity index 97% rename from Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidgetControls.ui rename to Modules/XNAT/src/QmitkXnatExperimentInfoWidgetControls.ui index 79481e9cff..a66c097e16 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatExperimentInfoWidgetControls.ui +++ b/Modules/XNAT/src/QmitkXnatExperimentInfoWidgetControls.ui @@ -1,97 +1,97 @@ QmitkXnatExperimentInfoWidgetControls true 0 0 350 107 Qmitk Template Time: Date: Scanner: 75 false true Experiment Information - Qt::AlignCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Modality: diff --git a/Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidget.cpp b/Modules/XNAT/src/QmitkXnatProjectInfoWidget.cpp similarity index 100% rename from Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidget.cpp rename to Modules/XNAT/src/QmitkXnatProjectInfoWidget.cpp diff --git a/Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidgetControls.ui b/Modules/XNAT/src/QmitkXnatProjectInfoWidgetControls.ui similarity index 96% rename from Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidgetControls.ui rename to Modules/XNAT/src/QmitkXnatProjectInfoWidgetControls.ui index 9d7b6d3521..5121ae8e43 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatProjectInfoWidgetControls.ui +++ b/Modules/XNAT/src/QmitkXnatProjectInfoWidgetControls.ui @@ -1,82 +1,82 @@ QmitkXnatProjectInfoWidgetControls true 0 0 350 88 Qmitk Template Description: ID: PI: 75 true Project Information - Qt::AlignCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidget.cpp b/Modules/XNAT/src/QmitkXnatSubjectInfoWidget.cpp similarity index 100% rename from Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidget.cpp rename to Modules/XNAT/src/QmitkXnatSubjectInfoWidget.cpp diff --git a/Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidgetControls.ui b/Modules/XNAT/src/QmitkXnatSubjectInfoWidgetControls.ui similarity index 97% rename from Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidgetControls.ui rename to Modules/XNAT/src/QmitkXnatSubjectInfoWidgetControls.ui index 843a2e3062..06ec58bdc9 100644 --- a/Modules/XNATUI/Qmitk/QmitkXnatSubjectInfoWidgetControls.ui +++ b/Modules/XNAT/src/QmitkXnatSubjectInfoWidgetControls.ui @@ -1,110 +1,110 @@ QmitkXnatSubjectInfoWidgetControls true 0 0 350 126 Qmitk Template Gender: Birthdate: Handedness: Heigth (inches): Weight (lbs) 75 true Subject Information - Qt::AlignCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/Modules/XNATUI/CMakeLists.txt b/Modules/XNATUI/CMakeLists.txt deleted file mode 100644 index b397f77c21..0000000000 --- a/Modules/XNATUI/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -MITK_CREATE_MODULE( - INCLUDE_DIRS Qmitk - PACKAGE_DEPENDS CTK|CTKXNATCore - DEPENDS MitkQtWidgetsExt -) diff --git a/Modules/XNATUI/files.cmake b/Modules/XNATUI/files.cmake deleted file mode 100644 index 538165d622..0000000000 --- a/Modules/XNATUI/files.cmake +++ /dev/null @@ -1,17 +0,0 @@ -set( CPP_FILES -Qmitk/QmitkXnatProjectInfoWidget.cpp -Qmitk/QmitkXnatSubjectInfoWidget.cpp -Qmitk/QmitkXnatExperimentInfoWidget.cpp -) - -set(MOC_H_FILES -Qmitk/QmitkXnatProjectInfoWidget.h -Qmitk/QmitkXnatSubjectInfoWidget.h -Qmitk/QmitkXnatExperimentInfoWidget.h -) - -set(UI_FILES -Qmitk/QmitkXnatProjectInfoWidgetControls.ui -Qmitk/QmitkXnatSubjectInfoWidgetControls.ui -Qmitk/QmitkXnatExperimentInfoWidgetControls.ui -) diff --git a/Plugins/org.mitk.gui.qt.xnat/CMakeLists.txt b/Plugins/org.mitk.gui.qt.xnat/CMakeLists.txt index b221c1d9cb..8a4a4fa2db 100644 --- a/Plugins/org.mitk.gui.qt.xnat/CMakeLists.txt +++ b/Plugins/org.mitk.gui.qt.xnat/CMakeLists.txt @@ -1,8 +1,8 @@ project(org_mitk_gui_qt_xnat) mitk_create_plugin( PACKAGE_DEPENDS Poco|Zip - MODULE_DEPENDS MitkXNAT MitkXNATUI + MODULE_DEPENDS MitkXNAT EXPORT_DIRECTIVE XNAT_EXPORT EXPORTED_INCLUDE_SUFFIXES src ) diff --git a/Plugins/org.mitk.gui.qt.xnat/src/internal/QmitkXnatTreeBrowserView.cpp b/Plugins/org.mitk.gui.qt.xnat/src/internal/QmitkXnatTreeBrowserView.cpp index fc07d82654..b842b65f00 100644 --- a/Plugins/org.mitk.gui.qt.xnat/src/internal/QmitkXnatTreeBrowserView.cpp +++ b/Plugins/org.mitk.gui.qt.xnat/src/internal/QmitkXnatTreeBrowserView.cpp @@ -1,458 +1,452 @@ /*=================================================================== 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 "QmitkXnatTreeBrowserView.h" // Qmitk #include "QmitkXnatObjectEditorInput.h" #include "QmitkXnatEditor.h" #include "org_mitk_gui_qt_xnatinterface_Activator.h" // Blueberry #include #include // CTK XNAT Core #include #include #include #include // MITK XNAT UI #include #include #include // Qt #include #include #include #include // MITK #include #include // Poco #include const std::string QmitkXnatTreeBrowserView::VIEW_ID = "org.mitk.views.xnat.treebrowser"; QmitkXnatTreeBrowserView::QmitkXnatTreeBrowserView() : m_TreeModel(new ctkXnatTreeModel()), m_Tracker(0), m_DownloadPath(berry::Platform::GetPreferencesService()->GetSystemPreferences()->Node("/XnatConnection")->Get("Download Path", "")), m_DataStorageServiceTracker(mitk::org_mitk_gui_qt_xnatinterface_Activator::GetContext()) { m_DataStorageServiceTracker.open(); // Set DownloadPath if (m_DownloadPath.isEmpty()) { QString xnatFolder = "XNAT_DOWNLOADS"; QDir dir(mitk::org_mitk_gui_qt_xnatinterface_Activator::GetContext()->getDataFile("").absoluteFilePath()); dir.mkdir(xnatFolder); dir.setPath(dir.path() + "/" + xnatFolder); m_DownloadPath = dir.path() + "/"; } } QmitkXnatTreeBrowserView::~QmitkXnatTreeBrowserView() { m_DataStorageServiceTracker.close(); delete m_TreeModel; delete m_Tracker; } void QmitkXnatTreeBrowserView::SetFocus() { } void QmitkXnatTreeBrowserView::CreateQtPartControl(QWidget *parent) { // Create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi(parent); m_Controls.treeView->setModel(m_TreeModel); m_Controls.treeView->header()->hide(); m_Controls.labelError->setText("Please use the 'Connect' button in the Preferences."); m_Controls.labelError->setStyleSheet("QLabel { color: red; }"); m_SelectionProvider = new berry::QtSelectionProvider(); this->SetSelectionProvider(); m_Controls.treeView->setSelectionMode(QAbstractItemView::SingleSelection); m_Controls.treeView->setContextMenuPolicy(Qt::CustomContextMenu); m_Tracker = new mitk::XnatSessionTracker(mitk::org_mitk_gui_qt_xnatinterface_Activator::GetXnatModuleContext()); m_NodeMenu = new QMenu(m_Controls.treeView); connect(m_Controls.treeView, SIGNAL(clicked(const QModelIndex&)), SLOT(itemSelected(const QModelIndex&))); connect(m_Controls.treeView, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(NodeTableViewContextMenuRequested(const QPoint&))); connect(m_Tracker, SIGNAL(AboutToBeClosed(ctkXnatSession*)), this, SLOT(CleanTreeModel(ctkXnatSession*))); connect(m_Tracker, SIGNAL(Opened(ctkXnatSession*)), this, SLOT(UpdateSession(ctkXnatSession*))); m_Tracker->Open(); ctkXnatSession* session; try { session = mitk::org_mitk_gui_qt_xnatinterface_Activator::GetXnatModuleContext()->GetService( mitk::org_mitk_gui_qt_xnatinterface_Activator::GetXnatModuleContext()->GetServiceReference()); } catch (std::invalid_argument) { session = 0; } if (session != 0) { m_Controls.labelError->setVisible(false); } else { m_Controls.labelError->setVisible(true); } connect(m_Controls.treeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(OnActivatedNode(const QModelIndex&))); } void QmitkXnatTreeBrowserView::OnActivatedNode(const QModelIndex& index) { if (!index.isValid()) return; berry::IWorkbenchPage::Pointer page = GetSite()->GetPage(); QmitkXnatObjectEditorInput::Pointer oPtr(new QmitkXnatObjectEditorInput(index.data(Qt::UserRole).value())); berry::IEditorInput::Pointer editorInput(oPtr); berry::IEditorPart::Pointer reuseEditor = page->FindEditor(editorInput); if (reuseEditor) { // Just set it activ page->Activate(reuseEditor); } else { QList editors = page->FindEditors(berry::IEditorInput::Pointer(0), QmitkXnatEditor::EDITOR_ID, berry::IWorkbenchPage::MATCH_ID); if (editors.isEmpty()) { ctkXnatFile* file = dynamic_cast(oPtr->GetXnatObject()); if (file != NULL) { // If the selected node is a file, so show it in MITK InternalFileDownload(index, true); } else { // No XnatEditor is currently open, create a new one page->OpenEditor(editorInput, QmitkXnatEditor::EDITOR_ID); } } else { // Reuse an existing editor reuseEditor = editors.front()->GetEditor(true); page->ReuseEditor(reuseEditor.Cast(), editorInput); page->Activate(reuseEditor); } } } void QmitkXnatTreeBrowserView::SetSelectionProvider() { GetSite()->SetSelectionProvider(m_SelectionProvider); } void QmitkXnatTreeBrowserView::UpdateSession(ctkXnatSession* session) { if (session != 0 && session->isOpen()) { m_Controls.labelError->setVisible(false); // Fill model and show in the GUI m_TreeModel->addDataModel(session->dataModel()); m_Controls.treeView->reset(); m_SelectionProvider->SetItemSelectionModel(m_Controls.treeView->selectionModel()); } } void QmitkXnatTreeBrowserView::CleanTreeModel(ctkXnatSession* session) { if (session != 0) { m_TreeModel->removeDataModel(session->dataModel()); m_Controls.treeView->reset(); } } void QmitkXnatTreeBrowserView::InternalFileDownload(const QModelIndex& index, bool loadData) { QVariant variant = m_TreeModel->data(index, Qt::UserRole); if (variant.isValid()) { ctkXnatFile* file = dynamic_cast(variant.value()); if (file != NULL) { QDir downDir(m_DownloadPath); QString filePath = m_DownloadPath + file->name(); // Testing if the file exists already if (downDir.exists(file->name())) { MITK_INFO << "File '" << file->name().toStdString() << "' already exists!"; } else { if (file->property("collection") == QString("DICOM")) { ctkXnatObject* parent = file->parent(); filePath = m_DownloadPath + parent->property("label") + ".zip"; parent->download(filePath); std::ifstream in(filePath.toStdString().c_str(), std::ios::binary); poco_assert(in); // decompress to XNAT_DOWNLOAD dir Poco::Zip::Decompress dec(in, Poco::Path(m_DownloadPath.toStdString())); dec.decompressAllFiles(); in.close(); QFile::remove(filePath); } else { MITK_INFO << "Download started ..."; MITK_INFO << "..."; file->download(filePath); // Testing if the file exists now if (downDir.exists(file->name())) { MITK_INFO << "Download of " << file->name().toStdString() << " was completed!"; } else { MITK_INFO << "Download of " << file->name().toStdString() << " failed!"; } } } if (downDir.exists(file->name()) || file->property("collection") == "DICOM") { if (loadData) { if (file->property("collection") == "DICOM") { // Search for the downloaded file an its file path QDirIterator it(m_DownloadPath, QStringList() << file->name(), QDir::Files, QDirIterator::Subdirectories); while (it.hasNext()) { it.next(); filePath = it.filePath(); } } if (filePath.isEmpty()) { MITK_INFO << "Decompressing failed!"; return; } else if (!QFile(filePath).exists()) { MITK_INFO << "Decompressing failed!"; return; } mitk::IDataStorageService* dsService = m_DataStorageServiceTracker.getService(); mitk::DataStorage::Pointer dataStorage = dsService->GetDataStorage()->GetDataStorage(); QStringList list; list << filePath; try { QmitkIOUtil::Load(list, *dataStorage); } catch (const mitk::Exception& e) { MITK_INFO << e; return; } mitk::RenderingManager::GetInstance()->InitializeViewsByBoundingObjects( dsService->GetDataStorage()->GetDataStorage()); } } } else { MITK_INFO << "Selection was not a file!"; } } } void QmitkXnatTreeBrowserView::OnContextMenuDownloadFile() { QModelIndex index = m_Controls.treeView->currentIndex(); InternalFileDownload(index, false); } void QmitkXnatTreeBrowserView::OnContextMenuDownloadAndOpenFile() { QModelIndex index = m_Controls.treeView->currentIndex(); InternalFileDownload(index, true); } void QmitkXnatTreeBrowserView::NodeTableViewContextMenuRequested(const QPoint & pos) { m_NodeMenu->clear(); QModelIndex index = m_Controls.treeView->indexAt(pos); QVariant variant = m_TreeModel->data(index, Qt::UserRole); if (variant.isValid()) { ctkXnatFile* file = dynamic_cast(variant.value()); if (file != NULL) { QAction* actShow = new QAction("Download and Open", m_NodeMenu); QAction* actDownload = new QAction("Download", m_NodeMenu); m_NodeMenu->addAction(actShow); m_NodeMenu->addAction(actDownload); connect(actShow, SIGNAL(triggered()), this, SLOT(OnContextMenuDownloadAndOpenFile())); connect(actDownload, SIGNAL(triggered()), this, SLOT(OnContextMenuDownloadFile())); m_NodeMenu->popup(QCursor::pos()); } } } void QmitkXnatTreeBrowserView::itemSelected(const QModelIndex& index) { QLayout* layout = m_Controls.infoVerticalLayout; QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { delete child->widget(); } QVariant variant = m_TreeModel->data(index, Qt::UserRole); if (variant.isValid()) { ctkXnatSession *session = mitk::org_mitk_gui_qt_xnatinterface_Activator::GetXnatModuleContext()->GetService( mitk::org_mitk_gui_qt_xnatinterface_Activator::GetXnatModuleContext()->GetServiceReference()); ctkXnatObject* object = variant.value(); ctkXnatProject* project = dynamic_cast(object); ctkXnatSubject* subject = dynamic_cast(object); ctkXnatExperiment* experiment = dynamic_cast(object); if (project != NULL) { QmitkXnatProjectInfoWidget* widget = new QmitkXnatProjectInfoWidget(project); layout->addWidget(widget); } else if (subject != NULL) { QMap paramMap; paramMap.insert("columns", "dob,gender,handedness,weight,height"); QUuid requestID = session->httpGet(QString("%1/subjects").arg(subject->parent()->resourceUri()), paramMap); QList results = session->httpSync(requestID); foreach(const QVariantMap& propertyMap, results) { QMapIterator it(propertyMap); bool isConcretSubject = false; if (it.hasNext()) { it.next(); QString str = it.key().toLatin1().data(); QVariant var = it.value(); - MITK_INFO << str.toStdString() << ": " << var.toString().toStdString(); - // After CTK Change (subjectID = name) to (subjectID = ID) // CHANGE TO: if (var == subject->property("ID")) if (var == subject->property("URI").right(11)) { isConcretSubject = true; } else { isConcretSubject = false; } it.toFront(); } while (it.hasNext() && isConcretSubject) { it.next(); QString str = it.key().toLatin1().data(); QVariant var = it.value(); subject->setProperty(str, var); } } QmitkXnatSubjectInfoWidget* widget = new QmitkXnatSubjectInfoWidget(subject); layout->addWidget(widget); } else if (experiment != NULL) { QMap paramMap; paramMap.insert("columns", "date,time,scanner,modality"); QUuid requestID = session->httpGet(QString("%1/experiments").arg(experiment->parent()->resourceUri()), paramMap); QList results = session->httpSync(requestID); foreach(const QVariantMap& propertyMap, results) { QMapIterator it(propertyMap); bool isConcretExperiment = false; if (it.hasNext()) { it.next(); QString str = it.key().toLatin1().data(); QVariant var = it.value(); - MITK_INFO << str.toStdString() << ": " << var.toString().toStdString(); - MITK_INFO << experiment->property("ID").toStdString(); - if (var == experiment->property("URI")) { isConcretExperiment = true; } else { isConcretExperiment = false; } it.toFront(); } while (it.hasNext() && isConcretExperiment) { it.next(); QString str = it.key().toLatin1().data(); QVariant var = it.value(); - MITK_INFO << str.toStdString() << ": " << var.toString().toStdString(); experiment->setProperty(str, var); } } QmitkXnatExperimentInfoWidget* widget = new QmitkXnatExperimentInfoWidget(experiment); layout->addWidget(widget); } } }