ctkDICOMQueryRetrieveWidget.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include <QDebug>
  2. #include <QTreeView>
  3. #include <QTabBar>
  4. #include <QSettings>
  5. // ctkDICOMCore includes
  6. #include "ctkDICOMDatabase.h"
  7. #include "ctkDICOMModel.h"
  8. #include "ctkDICOMQuery.h"
  9. #include "ctkDICOMRetrieve.h"
  10. // ctkDICOMWidgets includes
  11. #include "ctkDICOMQueryRetrieveWidget.h"
  12. #include "ctkDICOMQueryResultsTabWidget.h"
  13. #include "ui_ctkDICOMQueryRetrieveWidget.h"
  14. #include <ctkLogger.h>
  15. static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryRetrieveWidget");
  16. //----------------------------------------------------------------------------
  17. class ctkDICOMQueryRetrieveWidgetPrivate: public Ui_ctkDICOMQueryRetrieveWidget
  18. {
  19. public:
  20. ctkDICOMQueryRetrieveWidgetPrivate(){}
  21. QMap<QString, ctkDICOMQuery*> queries;
  22. ctkDICOMModel model;
  23. };
  24. //----------------------------------------------------------------------------
  25. // ctkDICOMQueryRetrieveWidgetPrivate methods
  26. //----------------------------------------------------------------------------
  27. // ctkDICOMQueryRetrieveWidget methods
  28. //----------------------------------------------------------------------------
  29. ctkDICOMQueryRetrieveWidget::ctkDICOMQueryRetrieveWidget(QWidget* _parent):Superclass(_parent),
  30. d_ptr(new ctkDICOMQueryRetrieveWidgetPrivate)
  31. {
  32. Q_D(ctkDICOMQueryRetrieveWidget);
  33. d->setupUi(this);
  34. connect(d->queryButton, SIGNAL(clicked()), this, SLOT(processQuery()));
  35. }
  36. //----------------------------------------------------------------------------
  37. ctkDICOMQueryRetrieveWidget::~ctkDICOMQueryRetrieveWidget()
  38. {
  39. }
  40. //----------------------------------------------------------------------------
  41. void ctkDICOMQueryRetrieveWidget::setRetrieveDirectory(const QString& directory)
  42. {
  43. QSettings settings;
  44. settings.setValue("RetrieveDirectory", directory);
  45. settings.sync();
  46. }
  47. //----------------------------------------------------------------------------
  48. void ctkDICOMQueryRetrieveWidget::setRetrieveDatabaseFileName(const QString& fileName)
  49. {
  50. QSettings settings;
  51. settings.setValue("RetrieveDatabaseFileName", fileName);
  52. settings.sync();
  53. }
  54. //----------------------------------------------------------------------------
  55. void ctkDICOMQueryRetrieveWidget::processQuery()
  56. {
  57. Q_D(ctkDICOMQueryRetrieveWidget);
  58. ctkDICOMDatabase queryResultDatabase;
  59. try { queryResultDatabase.openDatabase( ":memory:" ); }
  60. catch (std::exception e)
  61. {
  62. logger.error ( "Database error: " + queryResultDatabase.GetLastError() );
  63. queryResultDatabase.closeDatabase();
  64. return;
  65. }
  66. QStringList serverNodes = d->serverNodeWidget->nodes();
  67. foreach (QString server, serverNodes)
  68. {
  69. d->queries[server] = new ctkDICOMQuery;
  70. QMap<QString, QString> parameters = d->serverNodeWidget->nodeParameters(server);
  71. d->queries[server]->setCallingAETitle(d->serverNodeWidget->callingAETitle());
  72. d->queries[server]->setCalledAETitle(parameters["AETitle"]);
  73. d->queries[server]->setHost(parameters["Address"]);
  74. d->queries[server]->setPort(parameters["Port"].toInt());
  75. // TODO: add interface to ctkDICOMQuery for specifying query params
  76. // for now, query for everything
  77. try
  78. {
  79. // run the query against the selected server and put results in database
  80. d->queries[server]->query ( queryResultDatabase );
  81. }
  82. catch (std::exception e)
  83. {
  84. logger.error ( "Query error: " + parameters["Name"] );
  85. }
  86. }
  87. d->model.setDatabase(queryResultDatabase.database());
  88. d->results->setModel(&d->model);
  89. }