Переглянути джерело

Enhanced xnatTreeBrowser so that resource creation and file upload can be tested

Andreas Fetzer 10 роки тому
батько
коміт
7b7c65448f

+ 64 - 8
Applications/ctkXnatTreeBrowser/ctkXnatTreeBrowserMainWindow.cpp

@@ -22,19 +22,26 @@
 #include "ctkXnatTreeBrowserMainWindow.h"
 #include "ui_ctkXnatTreeBrowserMainWindow.h"
 
-#include "ctkXnatLoginDialog.h"
-#include "ctkXnatTreeModel.h"
-#include "ctkXnatSession.h"
+#include "ctkXnatAssessor.h"
+#include "ctkXnatAssessorFolder.h"
 #include "ctkXnatDataModel.h"
-#include "ctkXnatProject.h"
+#include "ctkXnatException.h"
+#include "ctkXnatExperiment.h"
 #include "ctkXnatFile.h"
+#include "ctkXnatLoginDialog.h"
+#include "ctkXnatProject.h"
+#include "ctkXnatReconstruction.h"
+#include "ctkXnatReconstructionFolder.h"
 #include "ctkXnatResource.h"
+#include "ctkXnatResourceFolder.h"
 #include "ctkXnatScan.h"
 #include "ctkXnatScanFolder.h"
-#include "ctkXnatAssessor.h"
-#include "ctkXnatAssessorFolder.h"
-#include "ctkXnatReconstruction.h"
-#include "ctkXnatReconstructionFolder.h"
+#include "ctkXnatSession.h"
+#include "ctkXnatSubject.h"
+#include "ctkXnatTreeModel.h"
+
+#include <QMessageBox>
+#include <QFileDialog>
 
 ctkXnatTreeBrowserMainWindow::ctkXnatTreeBrowserMainWindow(QWidget *parent) :
   QMainWindow(parent),
@@ -50,6 +57,8 @@ ctkXnatTreeBrowserMainWindow::ctkXnatTreeBrowserMainWindow(QWidget *parent) :
   this->connect(ui->loginButton, SIGNAL(clicked()), SLOT(loginButtonPushed()));
   this->connect(ui->treeView, SIGNAL(clicked(const QModelIndex&)), SLOT(itemSelected(const QModelIndex&)));
   this->connect(ui->downloadButton, SIGNAL(clicked()), SLOT(downloadButtonClicked()));
+  this->connect(ui->addResourceButton, SIGNAL(clicked()), SLOT(addResourceClicked()));
+  this->connect(ui->uploadFileButton, SIGNAL(clicked()), SLOT(uploadFileClicked()));
 }
 
 ctkXnatTreeBrowserMainWindow::~ctkXnatTreeBrowserMainWindow()
@@ -110,6 +119,16 @@ void ctkXnatTreeBrowserMainWindow::itemSelected(const QModelIndex &index)
   downloadable |= dynamic_cast<ctkXnatReconstructionFolder*>(xnatObject)!=NULL;
   ui->downloadButton->setEnabled(downloadable);
   ui->downloadLabel->setVisible(!downloadable);
+  bool canHaveFolder = false;
+  canHaveFolder |= dynamic_cast<ctkXnatProject*>(xnatObject) != NULL;
+  canHaveFolder |=  dynamic_cast<ctkXnatSubject*>(xnatObject) != NULL;
+  canHaveFolder |=  dynamic_cast<ctkXnatExperiment*>(xnatObject) != NULL;
+  ui->addResourceButton->setEnabled(canHaveFolder);
+  bool uploadFilePossible = false;
+  uploadFilePossible |= dynamic_cast<ctkXnatResource*>(xnatObject) != NULL;
+  uploadFilePossible |=  dynamic_cast<ctkXnatScan*>(xnatObject) != NULL;
+  uploadFilePossible |=  dynamic_cast<ctkXnatAssessor*>(xnatObject) != NULL;
+  ui->uploadFileButton->setEnabled(uploadFilePossible);
 }
 
 void ctkXnatTreeBrowserMainWindow::downloadButtonClicked()
@@ -122,3 +141,40 @@ void ctkXnatTreeBrowserMainWindow::downloadButtonClicked()
     m_TreeModel->downloadFile(index, fileName);
   }
 }
+
+void ctkXnatTreeBrowserMainWindow::addResourceClicked()
+{
+  const QModelIndex index = ui->treeView->selectionModel()->currentIndex();
+  ctkXnatObject* parentObject = m_TreeModel->xnatObject(index);
+  parentObject->addResource("data", "xml", "clinical parameters", "heart, liver");
+}
+
+void ctkXnatTreeBrowserMainWindow::uploadFileClicked()
+{
+  QString filename = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath());
+  const QModelIndex index = ui->treeView->selectionModel()->currentIndex();
+  ctkXnatResource* resource = dynamic_cast<ctkXnatResource*>(m_TreeModel->xnatObject(index));
+  if (resource)
+  {
+    ctkXnatFile* file = new ctkXnatFile();
+    file->setLocalFilePath(/*filename*/"");
+    file->setName("lset.nrrd");
+    file->setFileFormat("xml");
+    file->setFileContent("clinical parameters");
+    file->setFileTags("testproj, onto");
+    resource->add(file);
+    try
+    {
+      file->save();
+    }
+    catch (ctkXnatException &e)
+    {
+      QMessageBox msgbox;
+      msgbox.setText(e.what());
+      msgbox.setIcon(QMessageBox::Critical);
+      msgbox.exec();
+    }
+
+  }
+
+}

+ 2 - 0
Applications/ctkXnatTreeBrowser/ctkXnatTreeBrowserMainWindow.h

@@ -46,6 +46,8 @@ private Q_SLOTS:
   void loginButtonPushed();
   void itemSelected(const QModelIndex&);
   void downloadButtonClicked();
+  void addResourceClicked();
+  void uploadFileClicked();
 
 private:
   Ui::ctkXnatTreeBrowserMainWindow* ui;

+ 26 - 3
Applications/ctkXnatTreeBrowser/ctkXnatTreeBrowserMainWindow.ui

@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>409</width>
+    <width>553</width>
     <height>325</height>
    </rect>
   </property>
@@ -25,6 +25,29 @@
        </widget>
       </item>
       <item>
+       <widget class="QPushButton" name="addResourceButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="toolTip">
+         <string>Creates a new resource folder</string>
+        </property>
+        <property name="text">
+         <string>Add Resource</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="uploadFileButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="text">
+         <string>Upload File</string>
+        </property>
+       </widget>
+      </item>
+      <item>
        <widget class="QPushButton" name="downloadButton">
         <property name="enabled">
          <bool>false</bool>
@@ -85,8 +108,8 @@ font: 75 10pt &quot;Lucida Grande&quot;;</string>
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>409</width>
-     <height>21</height>
+     <width>553</width>
+     <height>22</height>
     </rect>
    </property>
    <widget class="QMenu" name="menu_File">

+ 1 - 0
Libs/XNAT/Widgets/ctkXnatLoginDialog.cpp

@@ -212,6 +212,7 @@ void ctkXnatLoginDialog::accept()
     return;
     }
   d->Session = session.take();
+  d->Session->setDefaultFilePath(ui->edtDownloadDir->text());
 
   QDialog::accept();
 }

+ 11 - 2
Libs/XNAT/Widgets/ctkXnatLoginDialog.ui

@@ -156,13 +156,23 @@
            </property>
           </widget>
          </item>
-         <item row="5" column="1">
+         <item row="5" column="0">
+          <widget class="QLabel" name="lblDownloadDir">
+           <property name="text">
+            <string>Download Dir.:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="6" column="1">
           <widget class="QCheckBox" name="cbxDefaultProfile">
            <property name="text">
             <string>Use as default</string>
            </property>
           </widget>
          </item>
+         <item row="5" column="1">
+          <widget class="QLineEdit" name="edtDownloadDir"/>
+         </item>
         </layout>
        </widget>
       </item>
@@ -186,7 +196,6 @@
   <tabstop>edtServerUri</tabstop>
   <tabstop>edtUserName</tabstop>
   <tabstop>edtPassword</tabstop>
-  <tabstop>cbxDefaultProfile</tabstop>
   <tabstop>btnSave</tabstop>
   <tabstop>btnDelete</tabstop>
   <tabstop>lstProfiles</tabstop>