ctkDICOMAppWidget.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // std includes
  2. #include <iostream>
  3. // Qt includes
  4. #include <QDebug>
  5. #include <QTreeView>
  6. #include <QTabBar>
  7. #include <QSettings>
  8. #include <QAction>
  9. #include <QModelIndex>
  10. // ctkDICOMWidgets includes
  11. #include "ctkDICOMDatabase.h"
  12. #include "ctkDICOMModel.h"
  13. #include "ctkDICOMAppWidget.h"
  14. #include "ctkDICOMQueryResultsTabWidget.h"
  15. #include "ui_ctkDICOMAppWidget.h"
  16. #include "ctkDirectoryButton.h"
  17. #include "ctkDICOMQueryRetrieveWidget.h"
  18. #include "ctkDICOMImportWidget.h"
  19. //logger
  20. #include <ctkLogger.h>
  21. static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMAppWidget");
  22. //----------------------------------------------------------------------------
  23. class ctkDICOMAppWidgetPrivate: public Ui_ctkDICOMAppWidget
  24. {
  25. public:
  26. ctkDICOMAppWidgetPrivate();
  27. ctkDICOMImportWidget* ImportWidget;
  28. ctkDICOMQueryRetrieveWidget* QueryRetrieveWidget;
  29. ctkDICOMDatabase DICOMDatabase;
  30. ctkDICOMModel DICOMModel;
  31. };
  32. //----------------------------------------------------------------------------
  33. // ctkDICOMAppWidgetPrivate methods
  34. ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
  35. }
  36. //----------------------------------------------------------------------------
  37. // ctkDICOMAppWidget methods
  38. //----------------------------------------------------------------------------
  39. ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
  40. d_ptr(new ctkDICOMAppWidgetPrivate)
  41. {
  42. Q_D(ctkDICOMAppWidget);
  43. d->setupUi(this);
  44. //Set toolbar button style
  45. d->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  46. //Initialize Q/R widget
  47. d->QueryRetrieveWidget = new ctkDICOMQueryRetrieveWidget();
  48. connect(d->directoryButton, SIGNAL(directoryChanged(const QString&)), this, SLOT(setDatabaseDirectory(const QString&)));
  49. //Initialize import widget
  50. d->ImportWidget = new ctkDICOMImportWidget();
  51. //Set thumbnails width in thumbnail widget
  52. //d->thumbnailsWidget->setThumbnailWidth(128);
  53. //Test add thumbnails
  54. //d->thumbnailsWidget->addTestThumbnail();
  55. //connect signal and slots
  56. connect(d->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onDICOMModelSelected(const QModelIndex &)));
  57. connect(d->thumbnailsWidget, SIGNAL(selected(const ctkDICOMThumbnailWidget&)), this, SLOT(onThumbnailSelected(const ctkDICOMThumbnailWidget&)));
  58. }
  59. //----------------------------------------------------------------------------
  60. ctkDICOMAppWidget::~ctkDICOMAppWidget()
  61. {
  62. Q_D(ctkDICOMAppWidget);
  63. d->QueryRetrieveWidget->deleteLater();
  64. d->ImportWidget->deleteLater();
  65. }
  66. //----------------------------------------------------------------------------
  67. void ctkDICOMAppWidget::setDatabaseDirectory(const QString& directory)
  68. {
  69. Q_D(ctkDICOMAppWidget);
  70. QSettings settings;
  71. settings.setValue("DatabaseDirectory", directory);
  72. settings.sync();
  73. //close the active DICOM database
  74. d->DICOMDatabase.closeDatabase();
  75. //open DICOM database on the directory
  76. QString databaseFileName = directory + QString("/ctkDICOM.sql");
  77. try { d->DICOMDatabase.openDatabase( databaseFileName ); }
  78. catch (std::exception e)
  79. {
  80. std::cerr << "Database error: " << qPrintable(d->DICOMDatabase.GetLastError()) << "\n";
  81. d->DICOMDatabase.closeDatabase();
  82. return;
  83. }
  84. d->DICOMModel.setDatabase(d->DICOMDatabase.database());
  85. d->treeView->setModel(&d->DICOMModel);
  86. //pass DICOM database instance to Import widget
  87. d->ImportWidget->setDICOMDatabase(&d->DICOMDatabase);
  88. }
  89. void ctkDICOMAppWidget::onAddToDatabase()
  90. {
  91. //Q_D(ctkDICOMAppWidget);
  92. //d->
  93. }
  94. //----------------------------------------------------------------------------
  95. void ctkDICOMAppWidget::onImport(){
  96. Q_D(ctkDICOMAppWidget);
  97. d->ImportWidget->show();
  98. d->ImportWidget->raise();
  99. }
  100. void ctkDICOMAppWidget::onExport(){
  101. }
  102. void ctkDICOMAppWidget::onQuery(){
  103. Q_D(ctkDICOMAppWidget);
  104. d->QueryRetrieveWidget->show();
  105. d->QueryRetrieveWidget->raise();
  106. }
  107. void ctkDICOMAppWidget::onDICOMModelSelected(const QModelIndex& index){
  108. Q_D(ctkDICOMAppWidget);
  109. //TODO: update thumbnails and previewer
  110. d->thumbnailsWidget->setModelIndex(index);
  111. }
  112. void ctkDICOMAppWidget::onThumbnailSelected(const ctkDICOMThumbnailWidget& widget){
  113. //TODO: update previewer
  114. }