|
@@ -27,7 +27,10 @@ class ctkDICOMQueryRetrieveWidgetPrivate: public Ui_ctkDICOMQueryRetrieveWidget
|
|
|
public:
|
|
|
ctkDICOMQueryRetrieveWidgetPrivate(){}
|
|
|
|
|
|
- QMap<QString, ctkDICOMQuery*> queries;
|
|
|
+ QMap<QString, ctkDICOMQuery*> queriesByServer;
|
|
|
+ QMap<QString, ctkDICOMQuery*> queriesByStudyUID;
|
|
|
+ QMap<QString, ctkDICOMRetrieve*> retrievalsByStudyUID;
|
|
|
+ ctkDICOMDatabase queryResultDatabase;
|
|
|
ctkDICOMModel model;
|
|
|
};
|
|
|
|
|
@@ -47,6 +50,7 @@ ctkDICOMQueryRetrieveWidget::ctkDICOMQueryRetrieveWidget(QWidget* _parent):Super
|
|
|
d->setupUi(this);
|
|
|
|
|
|
connect(d->QueryButton, SIGNAL(clicked()), this, SLOT(processQuery()));
|
|
|
+ connect(d->RetrieveButton, SIGNAL(clicked()), this, SLOT(processRetrieve()));
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
@@ -77,14 +81,12 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
|
|
|
|
|
|
d->RetrieveButton->setEnabled(false);
|
|
|
|
|
|
- ctkDICOMDatabase queryResultDatabase;
|
|
|
-
|
|
|
// create a database in memory to hold query results
|
|
|
- try { queryResultDatabase.openDatabase( ":memory:" ); }
|
|
|
+ try { d->queryResultDatabase.openDatabase( ":memory:" ); }
|
|
|
catch (std::exception e)
|
|
|
{
|
|
|
- logger.error ( "Database error: " + queryResultDatabase.GetLastError() );
|
|
|
- queryResultDatabase.closeDatabase();
|
|
|
+ logger.error ( "Database error: " + d->queryResultDatabase.GetLastError() );
|
|
|
+ d->queryResultDatabase.closeDatabase();
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -96,24 +98,29 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
|
|
|
if ( parameters["CheckState"] == Qt::Checked )
|
|
|
{
|
|
|
// create a query for the current server
|
|
|
- d->queries[server] = new ctkDICOMQuery;
|
|
|
- d->queries[server]->setCallingAETitle(d->ServerNodeWidget->callingAETitle());
|
|
|
- d->queries[server]->setCalledAETitle(parameters["AETitle"].toString());
|
|
|
- d->queries[server]->setHost(parameters["Address"].toString());
|
|
|
- d->queries[server]->setPort(parameters["Port"].toInt());
|
|
|
+ d->queriesByServer[server] = new ctkDICOMQuery;
|
|
|
+ d->queriesByServer[server]->setCallingAETitle(d->ServerNodeWidget->callingAETitle());
|
|
|
+ d->queriesByServer[server]->setCalledAETitle(parameters["AETitle"].toString());
|
|
|
+ d->queriesByServer[server]->setHost(parameters["Address"].toString());
|
|
|
+ d->queriesByServer[server]->setPort(parameters["Port"].toInt());
|
|
|
|
|
|
// populate the query with the current search options
|
|
|
- d->queries[server]->setFilters( d->QueryWidget->parameters() );
|
|
|
+ d->queriesByServer[server]->setFilters( d->QueryWidget->parameters() );
|
|
|
|
|
|
try
|
|
|
{
|
|
|
// run the query against the selected server and put results in database
|
|
|
- d->queries[server]->query ( queryResultDatabase );
|
|
|
+ d->queriesByServer[server]->query ( d->queryResultDatabase );
|
|
|
}
|
|
|
catch (std::exception e)
|
|
|
{
|
|
|
logger.error ( "Query error: " + parameters["Name"].toString() );
|
|
|
}
|
|
|
+
|
|
|
+ foreach( QString studyUID, d->queriesByServer[server]->studyInstanceUIDQueried() )
|
|
|
+ {
|
|
|
+ d->queriesByStudyUID[studyUID] = d->queriesByServer[server];
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -128,7 +135,7 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
|
|
|
headerView->setPropagateToItems(true);
|
|
|
d->results->setHeader(headerView);
|
|
|
|
|
|
- d->model.setDatabase(queryResultDatabase.database());
|
|
|
+ d->model.setDatabase(d->queryResultDatabase.database());
|
|
|
d->results->setModel(&d->model);
|
|
|
|
|
|
if ( d->model.rowCount() > 0 )
|
|
@@ -136,3 +143,22 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
|
|
|
d->RetrieveButton->setEnabled(true);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+void ctkDICOMQueryRetrieveWidget::processRetrieve()
|
|
|
+{
|
|
|
+ Q_D(ctkDICOMQueryRetrieveWidget);
|
|
|
+
|
|
|
+ foreach( QString studyUID, d->queriesByStudyUID.keys() )
|
|
|
+ {
|
|
|
+ logger.debug("need to retrieve " + studyUID + " from " + d->queriesByStudyUID[studyUID]->host());
|
|
|
+ ctkDICOMQuery *query = d->queriesByStudyUID[studyUID];
|
|
|
+ ctkDICOMRetrieve *retrieve = new ctkDICOMRetrieve;
|
|
|
+ d->retrievalsByStudyUID[studyUID] = retrieve;
|
|
|
+ retrieve->setCallingAETitle( query->callingAETitle() );
|
|
|
+ retrieve->setCalledAETitle( query->calledAETitle() );
|
|
|
+ retrieve->setHost( query->host() );
|
|
|
+ //retrieve->setCallingPort( query->port() );
|
|
|
+ retrieve->setCalledPort( query->port() );
|
|
|
+ }
|
|
|
+}
|