ctkDICOMAppWidget.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. QSharedPointer<ctkDICOMDatabase> DICOMDatabase;
  30. ctkDICOMModel DICOMModel;
  31. };
  32. //----------------------------------------------------------------------------
  33. // ctkDICOMAppWidgetPrivate methods
  34. ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
  35. DICOMDatabase = QSharedPointer<ctkDICOMDatabase> (new ctkDICOMDatabase);
  36. }
  37. //----------------------------------------------------------------------------
  38. // ctkDICOMAppWidget methods
  39. //----------------------------------------------------------------------------
  40. ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
  41. d_ptr(new ctkDICOMAppWidgetPrivate)
  42. {
  43. Q_D(ctkDICOMAppWidget);
  44. d->setupUi(this);
  45. //Set toolbar button style
  46. d->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  47. //Initialize Q/R widget
  48. d->QueryRetrieveWidget = new ctkDICOMQueryRetrieveWidget();
  49. connect(d->directoryButton, SIGNAL(directoryChanged(const QString&)), this, SLOT(setDatabaseDirectory(const QString&)));
  50. //Initialize import widget
  51. d->ImportWidget = new ctkDICOMImportWidget();
  52. //Set thumbnails width in thumbnail widget
  53. //d->thumbnailsWidget->setThumbnailWidth(128);
  54. //Test add thumbnails
  55. //d->thumbnailsWidget->addTestThumbnail();
  56. //connect signal and slots
  57. connect(d->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onDICOMModelSelected(const QModelIndex &)));
  58. connect(d->thumbnailsWidget, SIGNAL(selected(const ctkDICOMThumbnailWidget&)), this, SLOT(onThumbnailSelected(const ctkDICOMThumbnailWidget&)));
  59. }
  60. //----------------------------------------------------------------------------
  61. ctkDICOMAppWidget::~ctkDICOMAppWidget()
  62. {
  63. Q_D(ctkDICOMAppWidget);
  64. d->QueryRetrieveWidget->deleteLater();
  65. d->ImportWidget->deleteLater();
  66. }
  67. //----------------------------------------------------------------------------
  68. void ctkDICOMAppWidget::setDatabaseDirectory(const QString& directory)
  69. {
  70. Q_D(ctkDICOMAppWidget);
  71. QSettings settings;
  72. settings.setValue("DatabaseDirectory", directory);
  73. settings.sync();
  74. //close the active DICOM database
  75. d->DICOMDatabase->closeDatabase();
  76. //open DICOM database on the directory
  77. QString databaseFileName = directory + QString("/ctkDICOM.sql");
  78. try { d->DICOMDatabase->openDatabase( databaseFileName ); }
  79. catch (std::exception e)
  80. {
  81. std::cerr << "Database error: " << qPrintable(d->DICOMDatabase->lastError()) << "\n";
  82. d->DICOMDatabase->closeDatabase();
  83. return;
  84. }
  85. d->DICOMModel.setDatabase(d->DICOMDatabase->database());
  86. d->treeView->setModel(&d->DICOMModel);
  87. //pass DICOM database instance to Import widget
  88. d->ImportWidget->setDICOMDatabase(d->DICOMDatabase);
  89. }
  90. void ctkDICOMAppWidget::onAddToDatabase()
  91. {
  92. //Q_D(ctkDICOMAppWidget);
  93. //d->
  94. }
  95. //----------------------------------------------------------------------------
  96. void ctkDICOMAppWidget::onImport(){
  97. Q_D(ctkDICOMAppWidget);
  98. d->ImportWidget->show();
  99. d->ImportWidget->raise();
  100. }
  101. void ctkDICOMAppWidget::onExport(){
  102. }
  103. void ctkDICOMAppWidget::onQuery(){
  104. Q_D(ctkDICOMAppWidget);
  105. d->QueryRetrieveWidget->show();
  106. d->QueryRetrieveWidget->raise();
  107. }
  108. void ctkDICOMAppWidget::onDICOMModelSelected(const QModelIndex& index){
  109. Q_D(ctkDICOMAppWidget);
  110. //TODO: update thumbnails and previewer
  111. d->thumbnailsWidget->setModelIndex(index);
  112. }
  113. void ctkDICOMAppWidget::onThumbnailSelected(const ctkDICOMThumbnailWidget& widget){
  114. //TODO: update previewer
  115. }