Преглед изворни кода

Only query checked servers in query

Pay attention to the checkstate of the server node
Steve Pieper пре 14 година
родитељ
комит
edad438a90

+ 32 - 15
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -3,6 +3,9 @@
 #include <QTabBar>
 #include <QSettings>
 
+/// CTK includes
+#include <ctkCheckableHeaderView.h>
+
 // ctkDICOMCore includes
 #include "ctkDICOMDatabase.h"
 #include "ctkDICOMModel.h"
@@ -85,26 +88,40 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
   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)
+    if ( parameters["CheckState"] == QVariant(Qt::Checked).toString() )
     {
-      logger.error ( "Query error: " + parameters["Name"] );
+      d->queries[server] = new ctkDICOMQuery;
+      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"] );
+      }
     }
   }
 
+  // checkable headers.
+  d->results->setModel(&d->model);
+  d->model.setHeaderData(0, Qt::Horizontal, Qt::Unchecked, Qt::CheckStateRole);
+  QHeaderView* previousHeaderView = d->results->header();
+  ctkCheckableHeaderView* headerView = new ctkCheckableHeaderView(Qt::Horizontal, d->results);
+  headerView->setClickable(previousHeaderView->isClickable());
+  headerView->setMovable(previousHeaderView->isMovable());
+  headerView->setHighlightSections(previousHeaderView->highlightSections());
+  headerView->setPropagateToItems(true);
+  d->results->setHeader(headerView);
+
   d->model.setDatabase(queryResultDatabase.database());
   d->results->setModel(&d->model);
 }

+ 1 - 1
Libs/DICOM/Widgets/ctkDICOMServerNodeWidget.cpp

@@ -231,7 +231,7 @@ QMap<QString, QString> ctkDICOMServerNodeWidget::nodeParameters(QString &node)
         {
           parameters[keys.at(k)] = d->nodeTable->item(row,k)->text();
         }
-        parameters["CheckState"] = d->nodeTable->item(row,0)->checkState();
+        parameters["CheckState"] = QVariant(d->nodeTable->item(row,0)->checkState()).toString();
       }
     }
   }