Browse Source

Merge remote-tracking branch 'danielknorr/xnatinterface-mitk-support' into xnat-support

Sascha Zelzer 11 years ago
parent
commit
080a649444

+ 3 - 3
Applications/ctkXNATBrowser/ctkXNATBrowserMainWindow.cpp

@@ -23,7 +23,7 @@
 #include "ui_ctkXNATBrowserMainWindow.h"
 
 #include "ctkXnatLoginDialog.h"
-#include "ctkXnatProjectListModel.h"
+#include "ctkXnatListModel.h"
 #include "ctkXnatSession.h"
 #include "ctkXnatDataModel.h"
 #include "ctkXnatProject.h"
@@ -34,8 +34,8 @@ ctkXNATBrowserMainWindow::ctkXNATBrowserMainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::ctkXNATBrowserMainWindow),
   m_Session(0),
-  m_ProjectsModel(new ctkXnatProjectListModel()),
-  m_SubjectsModel(new ctkXnatProjectListModel())
+  m_ProjectsModel(new ctkXnatListModel()),
+  m_SubjectsModel(new ctkXnatListModel())
 {
   ui->setupUi(this);
 

+ 3 - 3
Applications/ctkXNATBrowser/ctkXNATBrowserMainWindow.h

@@ -28,7 +28,7 @@ class QModelIndex;
 
 class ctkXnatSession;
 class ctkXnatSessionFactory;
-class ctkXnatProjectListModel;
+class ctkXnatListModel;
 class ctkXnatProject;
 
 namespace Ui {
@@ -54,8 +54,8 @@ private:
 
   ctkXnatSessionFactory* m_SessionFactory;
   ctkXnatSession* m_Session;
-  ctkXnatProjectListModel* m_ProjectsModel;
-  ctkXnatProjectListModel* m_SubjectsModel;
+  ctkXnatListModel* m_ProjectsModel;
+  ctkXnatListModel* m_SubjectsModel;
 };
 
 #endif // CTKXNATBROWSERMAINWINDOW_H

+ 5 - 0
Libs/XNAT/Core/ctkXnatDataModel.cpp

@@ -69,6 +69,11 @@ QString ctkXnatDataModel::resourceUri() const
   return "";
 }
 
+QString ctkXnatDataModel::childDataType() const
+{
+  return "Projects";
+}
+
 void ctkXnatDataModel::fetchImpl()
 {
   Q_D(ctkXnatDataModel);

+ 2 - 0
Libs/XNAT/Core/ctkXnatDataModel.h

@@ -41,6 +41,8 @@ public:
 
   ctkXnatSession* session() const;
 
+  virtual QString childDataType() const;
+
 private:
 
   QString resourceUri() const;

+ 5 - 0
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -86,6 +86,11 @@ void ctkXnatObject::setDescription(const QString& description)
   setProperty("description", description);
 }
 
+QString ctkXnatObject::childDataType() const
+{
+  return "Resources";
+}
+
 QString ctkXnatObject::property(const QString& name) const
 {
   Q_D(const ctkXnatObject);

+ 3 - 0
Libs/XNAT/Core/ctkXnatObject.h

@@ -99,6 +99,9 @@ public:
 
   QString schemaType() const;
 
+  /// Gets a human readable name of the child object type.
+  virtual QString childDataType() const;
+
   /// Resets the object so that its properties and children needs to be fetched
   /// again at the next request.
   virtual void reset();

+ 5 - 0
Libs/XNAT/Core/ctkXnatProject.cpp

@@ -64,6 +64,11 @@ QString ctkXnatProject::resourceUri() const
   return QString("%1/data/archive/projects/%2").arg(parent()->resourceUri(), this->id());
 }
 
+QString ctkXnatProject::childDataType() const
+{
+  return "Subjects";
+}
+
 const QString& ctkXnatProject::secondaryId() const
 {
   Q_D(const ctkXnatProject);

+ 2 - 0
Libs/XNAT/Core/ctkXnatProject.h

@@ -41,6 +41,8 @@ public:
 
   virtual QString resourceUri() const;
 
+  virtual QString childDataType() const;
+
   const QString& secondaryId() const;
   void setSecondaryId(const QString& secondaryId);
 

+ 2 - 2
Libs/XNAT/Widgets/CMakeLists.txt

@@ -9,16 +9,16 @@ set(KIT_export_directive "CTK_XNAT_WIDGETS_EXPORT")
 set(KIT_SRCS
   ctkXnatLoginDialog.cpp
   ctkXnatTreeItem.cpp
-  ctkXnatProjectListModel.cpp
   ctkXnatTreeModel.cpp
   ctkXnatSettings.cpp
+  ctkXnatListModel.cpp
 )
 
 # Files which should be processed by Qts moc
 set(KIT_MOC_SRCS
   ctkXnatLoginDialog.h
-  ctkXnatProjectListModel.h
   ctkXnatTreeModel.h
+  ctkXnatListModel.h
 )
 
 

+ 30 - 17
Libs/XNAT/Widgets/ctkXnatProjectListModel.cpp

@@ -19,35 +19,48 @@
 
 =============================================================================*/
 
-#include "ctkXnatProjectListModel.h"
-
+#include "ctkXnatDataModel.h"
+#include "ctkXnatListModel.h"
 #include "ctkXnatProject.h"
+#include "ctkXnatSubject.h"
+#include "ctkXnatExperiment.h"
+#include "ctkXnatScanFolder.h"
+#include "ctkXnatScan.h"
+#include "ctkXnatScanResource.h"
+
+#include <iostream>
+#include <typeinfo>
 
 #include <QDebug>
 
-ctkXnatProjectListModel::ctkXnatProjectListModel()
-  : rootObject(0)
+ctkXnatListModel::ctkXnatListModel()
+  : RootObject(0)
 {
 }
 
-void ctkXnatProjectListModel::setRootObject(ctkXnatObject* root)
+void ctkXnatListModel::setRootObject(ctkXnatObject* root)
 {
-  rootObject = root;
+  RootObject = root;
 }
 
-int ctkXnatProjectListModel::rowCount(const QModelIndex& /*parent*/) const
+ctkXnatObject* ctkXnatListModel::rootObject()
 {
-  if (!rootObject) return 0;
-  return rootObject->children().size();
+  return RootObject;
 }
 
-QVariant ctkXnatProjectListModel::data(const QModelIndex& index, int role) const
+int ctkXnatListModel::rowCount(const QModelIndex& /*parent*/) const
 {
-  if (!rootObject) return QVariant();
+  if (!RootObject) return 0;
+  return RootObject->children().size();
+}
+
+QVariant ctkXnatListModel::data(const QModelIndex& index, int role) const
+{
+  if (!RootObject) return QVariant();
 
   if (role == Qt::DisplayRole)
   {
-    ctkXnatObject* child = rootObject->children().at(index.row());
+    ctkXnatObject* child = RootObject->children().at(index.row());
     if (!child)
     {
       qWarning() << "child at index" << index << "is NULL!";
@@ -64,18 +77,18 @@ QVariant ctkXnatProjectListModel::data(const QModelIndex& index, int role) const
   }
   else if (role == Qt::UserRole)
   {
-    return QVariant::fromValue(rootObject->children().at(index.row()));
+    return QVariant::fromValue(RootObject->children().at(index.row()));
   }
   return QVariant();
 }
 
-QVariant ctkXnatProjectListModel::headerData(int /*section*/, Qt::Orientation /*orientation*/, int role) const
+QVariant ctkXnatListModel::headerData(int /*section*/, Qt::Orientation /*orientation*/, int role) const
 {
   if (role == Qt::DisplayRole)
   {
-    if (!rootObject) return QString("Unavailable");
-    return QString("Bla");
+    if (!RootObject) return QString("Unavailable");
+
+    return RootObject->childDataType();
   }
   return QVariant();
 }
-

+ 7 - 8
Libs/XNAT/Widgets/ctkXnatProjectListModel.h

@@ -19,8 +19,8 @@
 
 =============================================================================*/
 
-#ifndef CTKXNATPROJECTLISTMODEL_H
-#define CTKXNATPROJECTLISTMODEL_H
+#ifndef CTKXNATLISTMODEL_H
+#define CTKXNATLISTMODEL_H
 
 #include "QAbstractListModel"
 
@@ -28,22 +28,21 @@
 
 class ctkXnatObject;
 
-class CTK_XNAT_WIDGETS_EXPORT ctkXnatProjectListModel : public QAbstractListModel
+class CTK_XNAT_WIDGETS_EXPORT ctkXnatListModel : public QAbstractListModel
 {
   Q_OBJECT
 
 public:
-  ctkXnatProjectListModel();
+  ctkXnatListModel();
   void setRootObject(ctkXnatObject* root);
+  ctkXnatObject* rootObject();
 
   int rowCount(const QModelIndex &parent) const;
   QVariant data(const QModelIndex &index, int role) const;
   QVariant headerData(int section, Qt::Orientation orientation, int role) const;
 
 private:
-
-  ctkXnatObject* rootObject;
-
+  ctkXnatObject* RootObject;
 };
 
-#endif // CTKXNATPROJECTLISTMODEL_H
+#endif // CTKXNATLISTMODEL_H

+ 7 - 5
Libs/XNAT/Widgets/ctkXnatTreeModel.cpp

@@ -20,9 +20,7 @@
 =============================================================================*/
 
 #include "ctkXnatTreeModel.h"
-
 #include "ctkXnatObject.h"
-#include "ctkXnatSubject.h"
 
 #include <QList>
 
@@ -64,6 +62,10 @@ QVariant ctkXnatTreeModel::data(const QModelIndex& index, int role) const
   {
     return this->xnatObject(index)->description();
   }
+  else if (role == Qt::UserRole)
+  {
+    return QVariant::fromValue<ctkXnatObject*>(this->xnatObject(index));
+  }
 
   return QVariant();
 }
@@ -148,7 +150,7 @@ bool ctkXnatTreeModel::hasChildren(const QModelIndex& index) const
   }
 
   ctkXnatTreeItem* item = this->itemAt(index);
-  return !item->xnatObject()->isFetched() || (item->childCount() > 0);
+  return !item->xnatObject()->isFetched() || !item->xnatObject()->children().isEmpty();
 }
 
 bool ctkXnatTreeModel::canFetchMore(const QModelIndex& index) const
@@ -157,8 +159,8 @@ bool ctkXnatTreeModel::canFetchMore(const QModelIndex& index) const
   {
     return false;
   }
-
-  return !this->xnatObject(index)->isFetched();
+  ctkXnatTreeItem* item = this->itemAt(index);
+  return !(item->childCount() > 0);
 }
 
 void ctkXnatTreeModel::fetchMore(const QModelIndex& index)

+ 1 - 0
Libs/XNAT/Widgets/ctkXnatTreeModel.h

@@ -61,6 +61,7 @@ private:
   ctkXnatTreeItem* itemAt(const QModelIndex& index) const;
 
   ctkXnatTreeItem* m_RootItem;
+
 };
 
 #endif