浏览代码

Connect query button to perform actual dicom query

Still does not support filters, but does iterate through
server nodes and performs the queries.  Results are in
the tree view (results)
Steve Pieper 14 年之前
父节点
当前提交
48800c3e91
共有 1 个文件被更改,包括 27 次插入47 次删除
  1. 27 47
      Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

+ 27 - 47
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -25,6 +25,7 @@ public:
   ctkDICOMQueryRetrieveWidgetPrivate(){}
 
   QMap<QString, ctkDICOMQuery*> queries;
+  ctkDICOMModel model;
 };
 
 //----------------------------------------------------------------------------
@@ -70,50 +71,7 @@ void ctkDICOMQueryRetrieveWidget::setRetrieveDatabaseFileName(const QString& fil
 void ctkDICOMQueryRetrieveWidget::processQuery()
 {
   Q_D(ctkDICOMQueryRetrieveWidget);
-
-  ctkDICOMQuery query;
-
-  // 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
+  
   ctkDICOMDatabase queryResultDatabase;
 
   try { queryResultDatabase.openDatabase( ":memory:" ); }
@@ -124,7 +82,29 @@ TODO: map the server node options to the query classes
     return;
   }
 
-  ctkDICOMModel model;
-  model.setDatabase(queryResultDatabase.database());
-  d->results->setModel(&model);
+  QStringList serverNodes = d->serverNodeWidget->nodes();
+  foreach (QString server, serverNodes)
+  {
+    d->queries[server] = new ctkDICOMQuery;
+    QMap<QString, QString> parameters = d->serverNodeWidget->nodeParameters(server);
+    d->queries[server]->setCallingAETitle(d->serverNodeWidget->callingAETitle());
+    d->queries[server]->setCalledAETitle(parameters["AETitle"]);
+    d->queries[server]->setHost(parameters["Address"]);
+    d->queries[server]->setPort(parameters["Port"].toInt());
+    // TODO: add interface to ctkDICOMQuery for specifying query params
+    // for now, query for everything
+
+    try
+    {
+      // run the query against the selected server and put results in database
+      d->queries[server]->query ( queryResultDatabase );
+    }
+    catch (std::exception e)
+    {
+      logger.error ( "Query error: " + parameters["Name"] );
+    }
+  }
+
+  d->model.setDatabase(queryResultDatabase.database());
+  d->results->setModel(&d->model);
 }