ctkDICOMAppWidget.cpp 4.5 KB

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