소스 검색

ENH: replaced query results tree view with DICOM table manager and added the ability to retrieve selection of individual studies

Alireza Mehrtash 11 년 전
부모
커밋
ec8237ef86

+ 8 - 2
Libs/DICOM/Widgets/Resources/UI/ctkDICOMQueryRetrieveWidget.ui

@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>843</width>
-    <height>613</height>
+    <height>815</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -114,12 +114,18 @@
     </widget>
    </item>
    <item>
-    <widget class="QTreeView" name="results"/>
+    <widget class="ctkDICOMTableManager" name="dicomTableManager"/>
    </item>
   </layout>
  </widget>
  <customwidgets>
   <customwidget>
+   <class>ctkDICOMTableManager</class>
+   <extends>QWidget</extends>
+   <header>ctkDICOMTableManager.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
    <class>ctkDICOMQueryWidget</class>
    <extends>QWidget</extends>
    <header>ctkDICOMQueryWidget.h</header>

+ 9 - 25
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -29,6 +29,7 @@
 
 /// CTK includes
 #include <ctkCheckableHeaderView.h>
+#include <ctkDICOMTableManager.h>
 #include <ctkCheckableModelHelper.h>
 #include <ctkLogger.h>
 
@@ -106,13 +107,6 @@ void ctkDICOMQueryRetrieveWidgetPrivate::init()
   QObject::connect(this->RetrieveButton, SIGNAL(clicked()), q, SLOT(retrieve()));
   QObject::connect(this->CancelButton, SIGNAL(clicked()), q, SLOT(cancel()));
 
-  this->results->setModel(&this->Model);
-  this->results->setSelectionMode(QAbstractItemView::NoSelection);
-  this->results->setSelectionBehavior(QAbstractItemView::SelectRows);
-
-  QObject::connect(this->results->selectionModel(), 
-    SIGNAL(selectionChanged (const QItemSelection &, const QItemSelection &)), 
-    q, SLOT(onSelectionChanged(const QItemSelection &, const QItemSelection &)));
 }
 
 //----------------------------------------------------------------------------
@@ -239,6 +233,8 @@ void ctkDICOMQueryRetrieveWidget::query()
   if (!progress.wasCanceled())
     {
     d->Model.setDatabase(d->QueryResultDatabase.database());
+    
+    d->dicomTableManager->setDICOMDatabase(&(d->QueryResultDatabase));
     }
   d->RetrieveButton->setEnabled(d->QueriesByStudyUID.keys().size() != 0);
 
@@ -285,8 +281,10 @@ void ctkDICOMQueryRetrieveWidget::retrieve()
 
   // do the rerieval for each selected series
   // that is selected in the tree view
-  foreach( QString studyUID, d->QueriesByStudyUID.keys() )
+  QStringList selectedSeriesUIDs = d->dicomTableManager->currentStudiesSelection();
+  foreach( QString studyUID, selectedSeriesUIDs )
     {
+    std::cout<<studyUID.toUtf8().constData()<<std::endl;
     if(d->UseProgressDialog)
       {
       if (progress.wasCanceled())
@@ -434,22 +432,8 @@ void ctkDICOMQueryRetrieveWidget::updateRetrieveProgress(int value)
 }
 
 //----------------------------------------------------------------------------
-void ctkDICOMQueryRetrieveWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+ctkDICOMTableManager* ctkDICOMQueryRetrieveWidget::dicomTableManager()
 {
-  Q_UNUSED(selected);
-  Q_UNUSED(deselected);
-  //Q_D(ctkDICOMQueryRetrieveWidget);
-
-  logger.debug("Selection change");
-  // TODO: allow selection of individual studies to retrieve.  Requires
-  // monitoring the selection and mapping to the study list (which is not
-  // straightforward because the dataroles of patient and series don't
-  // map directly to studies).
-  //d->RetrieveButton->setEnabled(d->results->selectionModel()->hasSelection());
-}
-
-QMap<QString,QVariant> ctkDICOMQueryRetrieveWidget::getServerParameters()
-{
-    Q_D(ctkDICOMQueryRetrieveWidget);
-    return d->ServerNodeWidget->parameters();
+  Q_D(ctkDICOMQueryRetrieveWidget);
+    return d->dicomTableManager;
 }

+ 4 - 2
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.h

@@ -30,7 +30,7 @@
 #include <QVariant>
 #include <QString>
 
-
+class ctkDICOMTableManager;
 // CTK includes
 #include <ctkDICOMDatabase.h>
 
@@ -40,12 +40,15 @@ class ctkDICOMQueryRetrieveWidgetPrivate;
 class CTK_DICOM_WIDGETS_EXPORT ctkDICOMQueryRetrieveWidget : public QWidget
 {
 Q_OBJECT;
+Q_PROPERTY(ctkDICOMTableManager* dicomTableManager READ dicomTableManager)
 public:
   typedef QWidget Superclass;
   explicit ctkDICOMQueryRetrieveWidget(QWidget* parent=0);
   virtual ~ctkDICOMQueryRetrieveWidget();
   QMap<QString,QVariant> getServerParameters();
 
+  ctkDICOMTableManager* dicomTableManager();
+
   QSharedPointer<ctkDICOMDatabase> retrieveDatabase()const;
 
   /// enable or disable ctk progress bars
@@ -56,7 +59,6 @@ public Q_SLOTS:
   void query();
   void retrieve();
   void cancel();
-  void onSelectionChanged(const QItemSelection &, const QItemSelection &);
 
 Q_SIGNALS:
   /// Signal emit when studies have been retrieved (user clicked on the