Selaa lähdekoodia

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 vuotta sitten
vanhempi
commit
48800c3e91
1 muutettua tiedostoa jossa 27 lisäystä ja 47 poistoa
  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);
 }