浏览代码

Get server nodes from widget for query

Expose accessors in server node widget to get server nodes and
parameters.  Update Q/R widget to use this info (work in
progress).
Steve Pieper 14 年之前
父节点
当前提交
40a4f1eb3f

+ 3 - 35
Libs/DICOM/Widgets/Resources/UI/ctkDICOMQueryRetrieveWidget.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>977</width>
-    <height>769</height>
+    <width>843</width>
+    <height>530</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -136,33 +136,7 @@
     </widget>
    </item>
    <item>
-    <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>
-      </property>
-      <property name="sizePolicy">
-       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-        <horstretch>0</horstretch>
-        <verstretch>0</verstretch>
-       </sizepolicy>
-      </property>
-      <attribute name="title">
-       <string>Results</string>
-      </attribute>
-      <layout class="QHBoxLayout" name="horizontalLayout_2">
-       <item>
-        <widget class="QTreeView" name="treeView"/>
-       </item>
-      </layout>
-     </widget>
-    </widget>
+    <widget class="QTreeView" name="results"/>
    </item>
   </layout>
  </widget>
@@ -179,12 +153,6 @@
    <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/>

+ 70 - 19
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -3,11 +3,18 @@
 #include <QTabBar>
 #include <QSettings>
 
+// ctkDICOMCore includes
+#include "ctkDICOM.h"
+#include "ctkDICOMModel.h"
+#include "ctkDICOMQuery.h"
+#include "ctkDICOMRetrieve.h"
+
 // ctkDICOMWidgets includes
 #include "ctkDICOMQueryRetrieveWidget.h"
 #include "ctkDICOMQueryResultsTabWidget.h"
 #include "ui_ctkDICOMQueryRetrieveWidget.h"
 
+
 #include <ctkLogger.h>
 static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryRetrieveWidget");
 
@@ -16,6 +23,8 @@ class ctkDICOMQueryRetrieveWidgetPrivate: public Ui_ctkDICOMQueryRetrieveWidget
 {
 public:
   ctkDICOMQueryRetrieveWidgetPrivate(){}
+
+  QMap<QString, ctkDICOMQuery*> queries;
 };
 
 //----------------------------------------------------------------------------
@@ -33,9 +42,7 @@ 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)));
 }
 
 //----------------------------------------------------------------------------
@@ -44,24 +51,19 @@ ctkDICOMQueryRetrieveWidget::~ctkDICOMQueryRetrieveWidget()
 }
 
 //----------------------------------------------------------------------------
-void ctkDICOMQueryRetrieveWidget::onDatabaseDirectoryChanged(const QString& directory)
+void ctkDICOMQueryRetrieveWidget::setRetrieveDirectory(const QString& directory)
 {
   QSettings settings;
-  settings.setValue("DatabaseDirectory", directory);
+  settings.setValue("RetrieveDirectory", directory);
   settings.sync();
 }
 
 //----------------------------------------------------------------------------
-void ctkDICOMQueryRetrieveWidget::onTabCloseRequested(int index)
+void ctkDICOMQueryRetrieveWidget::setRetrieveDatabaseFileName(const QString& fileName)
 {
-  Q_D(ctkDICOMQueryRetrieveWidget);
-
-  if (index == 0)
-  {
-    return;
-  }
-
-  d->results->removeTab(index);
+  QSettings settings;
+  settings.setValue("RetrieveDatabaseFileName", fileName);
+  settings.sync();
 }
 
 //----------------------------------------------------------------------------
@@ -69,11 +71,60 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
 {
   Q_D(ctkDICOMQueryRetrieveWidget);
 
-  d->serverNodeWidget->populateQuery();
-  d->queryWidget->populateQuery();
+  ctkDICOMQuery query;
 
-  QTreeView *queryResults = new QTreeView;
-  int tabIndex = d->results->addTab(queryResults, tr("Query Results"));
-  d->results->setCurrentIndex(tabIndex);
-}
+  // TODO: convert widget to query parameters
+  // TODO: add interface to ctkDICOMQuery for specifying query params
+  //d->queryWidget->populateQuery();
 
+  QStringList nodes = d->serverNodeWidget->nodes();
+  foreach (QString node, nodes)
+  {
+    d->queries[node] = new ctkDICOMQuery;
+    QMap<QString, QString> parameters = d->serverNodeWidget->nodeParameters(node);
+    d->queries[node]->setCallingAETitle(node);
+  }
+
+#if 0
+TODO: map the server node options to the query classes
+
+  query.setCallingAETitle ( QString ( argv[2] ) );
+  query.setCalledAETitle ( QString ( argv[3] ) );
+  query.setHost ( QString ( argv[4] ) );
+  int port;
+  bool ok;
+  port = QString ( argv[5] ).toInt ( &ok );
+  if ( !ok )
+    {
+    std::cerr << "Could not convert " << argv[5] << " to an integer" << std::endl;
+    print_usage();
+    return EXIT_FAILURE;
+    }
+  query.setPort ( port );
+
+  try
+    {
+    query.query ( myCTK.database() );
+    }
+  catch (std::exception e)
+  {
+    return EXIT_FAILURE;
+  }
+  return EXIT_SUCCESS;
+#endif
+
+  // TODO: create a map of server locations to query results in the private class
+  ctkDICOM queryResultDatabase;
+
+  try { queryResultDatabase.openDatabase( ":memory:" ); }
+  catch (std::exception e)
+  {
+    logger.error ( "Database error: " + queryResultDatabase.GetLastError() );
+    queryResultDatabase.closeDatabase();
+    return;
+  }
+
+  ctkDICOMModel model;
+  model.setDatabase(queryResultDatabase.database());
+  d->results->setModel(&model);
+}

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

@@ -37,9 +37,9 @@ public:
   virtual ~ctkDICOMQueryRetrieveWidget();
 
 public slots:
-    void onDatabaseDirectoryChanged(const QString& directory);
+    void setRetrieveDirectory(const QString& directory);
+    void setRetrieveDatabaseFileName(const QString& fileName);
     void processQuery();
-    void onTabCloseRequested(int index);
 
 protected:
   QScopedPointer<ctkDICOMQueryRetrieveWidgetPrivate> d_ptr;

+ 33 - 3
Libs/DICOM/Widgets/ctkDICOMServerNodeWidget.cpp

@@ -199,11 +199,41 @@ void ctkDICOMServerNodeWidget::saveSettings()
 }
 
 //----------------------------------------------------------------------------
-void ctkDICOMServerNodeWidget::populateQuery(/*ctkDICOMQuery &query*/)
+QStringList ctkDICOMServerNodeWidget::nodes()
 {
-  //Q_D(ctkDICOMServerNodeWidget);
+  Q_D(ctkDICOMServerNodeWidget);
 
-  std::cerr << "server node populate\n";
+  int count = d->nodeTable->rowCount();
+  QStringList nodes;
+  for (int row = 0; row < count; row++)
+  {
+    nodes << d->nodeTable->item(row,0)->text();
+  }
+  return nodes;
 }
 
+//----------------------------------------------------------------------------
+QMap<QString, QString> ctkDICOMServerNodeWidget::nodeParameters(QString &node)
+{
+  Q_D(ctkDICOMServerNodeWidget);
 
+  QMap<QString, QString> parameters;
+  int count = d->nodeTable->rowCount();
+  QStringList keys;
+  keys << "Name" << "AETitle" << "Address" << "Port";
+  for (int row = 0; row < count; row++)
+  {
+    if ( d->nodeTable->item(row,0)->text() == node )
+    {
+      for (int k = 0; k < keys.size(); ++k)
+      {
+        if ( d->nodeTable->item(row,k) )
+        {
+          parameters[keys.at(k)] = d->nodeTable->item(row,k)->text();
+        }
+        parameters["CheckState"] = d->nodeTable->item(row,0)->checkState();
+      }
+    }
+  }
+  return parameters;
+}

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

@@ -23,6 +23,9 @@
 
 // Qt includes 
 #include <QWidget>
+#include <QString>
+#include <QList>
+#include <QMap>
 
 #include "ctkDICOMWidgetsExport.h"
 
@@ -37,9 +40,8 @@ public:
   explicit ctkDICOMServerNodeWidget(QWidget* parent=0);
   virtual ~ctkDICOMServerNodeWidget();
 
-
-  /// set properties of query based on current widget state
-  void populateQuery (/*ctkDICOMQuery &query*/);
+  QStringList nodes();
+  QMap<QString,QString> nodeParameters(QString &node);
 
 public slots:
   void addNode ();