Browse Source

Prototype application for querying XNAT servers.

Sascha Zelzer 12 years ago
parent
commit
5cdf87d9d2

+ 65 - 1
Applications/ctkXNATBrowser/ctkXNATBrowserMainWindow.cpp

@@ -22,14 +22,78 @@
 #include "ctkXNATBrowserMainWindow.h"
 #include "ui_ctkXNATBrowserMainWindow.h"
 
+#include "ctkXnatLoginDialog.h"
+#include "ctkXnatProjectListModel.h"
+#include "ctkXnatConnection.h"
+#include "ctkXnatServer.h"
+#include "ctkXnatProject.h"
+
+#include <QDebug>
+
 ctkXNATBrowserMainWindow::ctkXNATBrowserMainWindow(QWidget *parent) :
   QMainWindow(parent),
-  ui(new Ui::ctkXNATBrowserMainWindow)
+  ui(new Ui::ctkXNATBrowserMainWindow),
+  xnatConnection(NULL),
+  projectsModel(new ctkXnatProjectListModel()),
+  subjectsModel(new ctkXnatProjectListModel())
 {
   ui->setupUi(this);
+
+  ui->projectsList->setModel(projectsModel);
+  ui->subjectsList->setModel(subjectsModel);
+
+  connect(ui->projectsList, SIGNAL(clicked(QModelIndex)), SLOT(projectSelected(QModelIndex)));
+  connect(ui->loginButton, SIGNAL(clicked()), SLOT(loginButtonPushed()));
 }
 
 ctkXNATBrowserMainWindow::~ctkXNATBrowserMainWindow()
 {
   delete ui;
 }
+
+void ctkXNATBrowserMainWindow::loginButtonPushed()
+{
+  if (xnatConnection)
+  {
+    delete xnatConnection;
+    xnatConnection = NULL;
+    ui->loginButton->setText("Login");
+    ui->loginLabel->setText("Disconnected");
+
+    projectsModel->setRootObject(ctkXnatObject::Pointer());
+    ui->projectsList->reset();
+  }
+  else
+  {
+    ctkXnatLoginDialog loginDialog(xnatConnectionFactory);
+    if (loginDialog.exec() == QDialog::Accepted)
+    {
+      xnatConnection = loginDialog.getConnection();
+      if (xnatConnection)
+      {
+        ui->loginButton->setText("Logout");
+        ui->loginLabel->setText(QString("Connected: %1").arg(xnatConnection->url()));
+
+        ctkXnatServer::Pointer server = xnatConnection->server();
+        //xnatConnection->fetch(server);
+        server->fetch();
+        projectsModel->setRootObject(server);
+        ui->projectsList->reset();
+      }
+    }
+  }
+}
+
+void ctkXNATBrowserMainWindow::projectSelected(const QModelIndex& index)
+{
+  qDebug() << "Project selected";
+  QVariant variant = projectsModel->data(index, Qt::UserRole);
+  if (variant.isValid())
+  {
+    ctkXnatObject::Pointer project = variant.value<ctkXnatObject::Pointer>();
+    qDebug() << "selected project id:" << project->getId();
+    project->fetch();
+    subjectsModel->setRootObject(project);
+    ui->subjectsList->reset();
+  }
+}

+ 19 - 0
Applications/ctkXNATBrowser/ctkXNATBrowserMainWindow.h

@@ -24,6 +24,14 @@
 
 #include <QMainWindow>
 
+class QModelIndex;
+
+#include "ctkXnatConnectionFactory.h"
+
+class ctkXnatConnection;
+class ctkXnatProjectListModel;
+class ctkXnatProject;
+
 namespace Ui {
 class ctkXNATBrowserMainWindow;
 }
@@ -36,8 +44,19 @@ public:
   explicit ctkXNATBrowserMainWindow(QWidget *parent = 0);
   ~ctkXNATBrowserMainWindow();
 
+private Q_SLOTS:
+
+  void loginButtonPushed();
+
+  void projectSelected(const QModelIndex& index);
+
 private:
   Ui::ctkXNATBrowserMainWindow *ui;
+
+  ctkXnatConnection* xnatConnection;
+  ctkXnatProjectListModel* projectsModel;
+  ctkXnatProjectListModel* subjectsModel;
+  ctkXnatConnectionFactory xnatConnectionFactory;
 };
 
 #endif // CTKXNATBROWSERMAINWINDOW_H

+ 27 - 3
Applications/ctkXNATBrowser/ctkXNATBrowserMainWindow.ui

@@ -16,6 +16,30 @@
   <widget class="QWidget" name="centralwidget">
    <layout class="QVBoxLayout" name="verticalLayout_3">
     <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QPushButton" name="loginButton">
+        <property name="text">
+         <string>Login</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="loginLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Not connected</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
        <layout class="QVBoxLayout" name="verticalLayout">
@@ -27,7 +51,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QListWidget" name="projectsList"/>
+         <widget class="QListView" name="projectsList"/>
         </item>
        </layout>
       </item>
@@ -36,12 +60,12 @@
         <item>
          <widget class="QLabel" name="label_2">
           <property name="text">
-           <string>Experiments</string>
+           <string>Subjects</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QListWidget" name="experimentsList"/>
+         <widget class="QListView" name="subjectsList"/>
         </item>
        </layout>
       </item>