Browse Source

ENH: better GUI for ctkDICOM application

Steve Pieper 15 years ago
parent
commit
c84780bb54

+ 1 - 0
Applications/ctkDICOM/ctkDICOM.cpp

@@ -78,5 +78,6 @@ int main(int argc, char** argv)
   treeView->setModel(&model);
 
   queryRetrieve.show();
+  queryRetrieve.raise();
   return app.exec();
 }

+ 3 - 3
Libs/DICOM/Core/CMakeLists.txt

@@ -24,19 +24,19 @@ SET(KIT_include_directories
 SET(KIT_SRCS
   ctkDICOM.cpp
   ctkDICOM.h
-  ctkDICOMQuery.cpp
-  ctkDICOMQuery.h
   ctkDICOMIndexer.cpp
   ctkDICOMIndexer.h
   ctkDICOMModel.cpp
   ctkDICOMModel.h
+  ctkDICOMFind.cpp
+  ctkDICOMFind.h
   )
 
 # Headers that should run through moc
 SET(KIT_MOC_SRCS
   ctkDICOM.h
   ctkDICOMModel.h
-  ctkDICOMQuery.h
+  ctkDICOMFind.h
   )
 
 # UI files

+ 2 - 0
Libs/DICOM/Widgets/CMakeLists.txt

@@ -20,6 +20,8 @@ SET(KIT_SRCS
   ctkDICOMServerNodeWidget.h
   ctkDICOMQueryWidget.cpp
   ctkDICOMQueryWidget.h
+  ctkDICOMQueryResultsTabWidget.cpp
+  ctkDICOMQueryResultsTabWidget.h
   )
 
 # Headers that should run through moc

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

@@ -24,7 +24,7 @@
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
-       <widget class="ctkDICOMServerNodeWidget" name="locationWidget" native="true">
+       <widget class="ctkDICOMServerNodeWidget" name="serverNodeWidget" native="true">
         <property name="minimumSize">
          <size>
           <width>300</width>
@@ -118,10 +118,13 @@
     </widget>
    </item>
    <item>
-    <widget class="QTabWidget" name="results">
+    <widget class="ctkDICOMQueryResultsTabWidget" name="results">
      <property name="currentIndex">
       <number>0</number>
      </property>
+     <property name="tabsClosable">
+      <bool>true</bool>
+     </property>
      <widget class="QWidget" name="tab">
       <property name="enabled">
        <bool>true</bool>
@@ -157,6 +160,12 @@
    <header>ctkDICOMServerNodeWidget.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>ctkDICOMQueryResultsTabWidget</class>
+   <extends>QTabWidget</extends>
+   <header>ctkDICOMQueryResultsTabWidget.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>

+ 2 - 2
Libs/DICOM/Widgets/Resources/UI/ctkDICOMQueryWidget.ui

@@ -179,7 +179,7 @@
         </property>
         <layout class="QVBoxLayout" name="verticalLayout_5">
          <item>
-          <widget class="QCheckBox" name="checkBox">
+          <widget class="QCheckBox" name="CT">
            <property name="text">
             <string>CT</string>
            </property>
@@ -189,7 +189,7 @@
           </widget>
          </item>
          <item>
-          <widget class="QCheckBox" name="checkBox_5">
+          <widget class="QCheckBox" name="MR">
            <property name="text">
             <string>MR</string>
            </property>

+ 2 - 2
Libs/DICOM/Widgets/Resources/UI/ctkDICOMServerNodeWidget.ui

@@ -37,7 +37,7 @@
       </property>
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
-        <widget class="QTableWidget" name="tableWidget">
+        <widget class="QTableWidget" name="nodeTable">
          <row>
           <property name="text">
            <string>Localhost</string>
@@ -45,7 +45,7 @@
          </row>
          <column>
           <property name="text">
-           <string>Select</string>
+           <string/>
           </property>
          </column>
          <column>

+ 29 - 2
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -1,10 +1,15 @@
-
+#include <QDebug>
 #include <QTreeView>
+#include <QTabBar>
 
 // ctkDICOMWidgets includes
 #include "ctkDICOMQueryRetrieveWidget.h"
+#include "ctkDICOMQueryResultsTabWidget.h"
 #include "ui_ctkDICOMQueryRetrieveWidget.h"
 
+#include <ctkLogger.h>
+static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryRetrieveWidget");
+
 //----------------------------------------------------------------------------
 class ctkDICOMQueryRetrieveWidgetPrivate: public ctkPrivate<ctkDICOMQueryRetrieveWidget>,
                                           public Ui_ctkDICOMQueryRetrieveWidget
@@ -28,7 +33,9 @@ ctkDICOMQueryRetrieveWidget::ctkDICOMQueryRetrieveWidget(QWidget* _parent):Super
   
   d->setupUi(this);
 
+  d->results->disableCloseOnTab(0);
   connect(d->queryButton, SIGNAL(clicked()), this, SLOT(processQuery()));
+  connect(d->results, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequested(int)));
 }
 
 //----------------------------------------------------------------------------
@@ -37,11 +44,31 @@ ctkDICOMQueryRetrieveWidget::~ctkDICOMQueryRetrieveWidget()
 }
 
 //----------------------------------------------------------------------------
+void ctkDICOMQueryRetrieveWidget::onTabCloseRequested(int index)
+{
+  CTK_D(ctkDICOMQueryRetrieveWidget);
+
+  if (index == 0)
+  {
+    return;
+  }
+
+  d->results->removeTab(index);
+}
+
+//----------------------------------------------------------------------------
 void ctkDICOMQueryRetrieveWidget::processQuery()
 {
   CTK_D(ctkDICOMQueryRetrieveWidget);
 
+  logger.setDebug();
+  logger.debug("initiating query");
+
+  d->serverNodeWidget->populateQuery();
+  d->queryWidget->populateQuery();
+
   QTreeView *queryResults = new QTreeView;
-  d->results->addTab(queryResults, "Query Results");
+  int tabIndex = d->results->addTab(queryResults, tr("Query Results"));
+  d->results->setCurrentIndex(tabIndex);
 }
 

+ 1 - 0
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.h

@@ -41,6 +41,7 @@ public:
 
 public slots:
     void processQuery();
+    void onTabCloseRequested(int index);
 
 private:
   CTK_DECLARE_PRIVATE(ctkDICOMQueryRetrieveWidget);

+ 18 - 0
Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp

@@ -1,3 +1,4 @@
+#include <iostream>
 
 // ctkDICOMWidgets includes
 #include "ctkDICOMQueryWidget.h"
@@ -33,3 +34,20 @@ ctkDICOMQueryWidget::~ctkDICOMQueryWidget()
 }
 
 
+//----------------------------------------------------------------------------
+void ctkDICOMQueryWidget::populateQuery(/*ctkDICOMQuery &query*/)
+{
+  CTK_D(ctkDICOMQueryWidget);
+  if ( d->CT->isChecked() )
+  {
+    std::cerr << "CT\n";
+    //query.addModality( "CT" );
+  }
+
+  if ( d->MR->isChecked() )
+  {
+    std::cerr << "MR\n";
+    //query.addModality( "CT" );
+  }
+
+}

+ 3 - 0
Libs/DICOM/Widgets/ctkDICOMQueryWidget.h

@@ -37,6 +37,9 @@ public:
   typedef QWidget Superclass;
   explicit ctkDICOMQueryWidget(QWidget* parent=0);
   virtual ~ctkDICOMQueryWidget();
+  
+  /// set properties of query based on current widget state
+  void populateQuery (/*ctkDICOMQuery &query*/);
 
 private:
   CTK_DECLARE_PRIVATE(ctkDICOMQueryWidget);

+ 24 - 0
Libs/DICOM/Widgets/ctkDICOMServerNodeWidget.cpp

@@ -18,6 +18,11 @@
  
 =========================================================================*/
 
+#include <iostream>
+
+/// CTK includes
+#include <ctkCheckableHeaderView.h>
+
 // ctkDICOMWidgets includes
 #include "ctkDICOMServerNodeWidget.h"
 #include "ui_ctkDICOMServerNodeWidget.h"
@@ -44,6 +49,18 @@ ctkDICOMServerNodeWidget::ctkDICOMServerNodeWidget(QWidget* _parent):Superclass(
   CTK_D(ctkDICOMServerNodeWidget);
   
   d->setupUi(this);
+
+  // checkable headers.
+  d->nodeTable->model()->setHeaderData(0, Qt::Horizontal, Qt::Unchecked, Qt::CheckStateRole);
+  QHeaderView* previousHeaderView = d->nodeTable->horizontalHeader();
+  ctkCheckableHeaderView* headerView = new ctkCheckableHeaderView(Qt::Horizontal, d->nodeTable);
+  headerView->setClickable(previousHeaderView->isClickable());
+  headerView->setMovable(previousHeaderView->isMovable());
+  headerView->setHighlightSections(previousHeaderView->highlightSections());
+  //headerView->setModel(previousHeaderView->model());
+  //headerView->setSelectionModel(previousHeaderView->selectionModel());
+  headerView->setPropagateToItems(true);
+  d->nodeTable->setHorizontalHeader(headerView);
 }
 
 //----------------------------------------------------------------------------
@@ -52,3 +69,10 @@ ctkDICOMServerNodeWidget::~ctkDICOMServerNodeWidget()
 }
 
 
+//----------------------------------------------------------------------------
+void ctkDICOMServerNodeWidget::populateQuery(/*ctkDICOMQuery &query*/)
+{
+  CTK_D(ctkDICOMServerNodeWidget);
+
+  std::cerr << "server node\n";
+}

+ 3 - 0
Libs/DICOM/Widgets/ctkDICOMServerNodeWidget.h

@@ -38,6 +38,9 @@ public:
   explicit ctkDICOMServerNodeWidget(QWidget* parent=0);
   virtual ~ctkDICOMServerNodeWidget();
 
+  /// set properties of query based on current widget state
+  void populateQuery (/*ctkDICOMQuery &query*/);
+
 private:
   CTK_DECLARE_PRIVATE(ctkDICOMServerNodeWidget);
 };

+ 1 - 0
Libs/DICOM/Widgets/target_libraries.cmake

@@ -6,4 +6,5 @@
 
 SET(target_libraries
   CTKDICOMCore
+  CTKWidgets
   )

+ 3 - 1
Libs/Widgets/Testing/Cpp/CMakeLists.txt

@@ -16,6 +16,7 @@ CREATE_TEST_SOURCELIST(Tests ${KIT}CppTests.cxx
   ctkSliderSpinBoxWidgetTest1.cpp
   ctkTitleComboBoxTest1.cpp
   ctkTreeComboBoxTest1.cpp
+  ctkCheckableHeaderViewTest1.cpp
   #EXTRA_INCLUDE TestingMacros.h
   )
 
@@ -51,8 +52,9 @@ SIMPLE_TEST( ctkDoubleRangeSliderTest1 )
 SIMPLE_TEST( ctkDoubleSliderTest1 )
 SIMPLE_TEST( ctkFittedTextBrowserTest1 )
 SIMPLE_TEST( ctkMatrixWidgetTest1 )
+SIMPLE_TEST( ctkCheckableHeaderViewTest1 )
 SIMPLE_TEST( ctkRangeSliderTest1 )
 SIMPLE_TEST( ctkRangeWidgetTest1 )
 SIMPLE_TEST( ctkSliderSpinBoxWidgetTest1 )
 SIMPLE_TEST( ctkTitleComboBoxTest1 )
-SIMPLE_TEST( ctkTreeComboBoxTest1 )
+SIMPLE_TEST( ctkTreeComboBoxTest1 )