ctkDICOMDirectoryListWidget.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // Qt includes
  2. #include <QFileDialog>
  3. #include <QSqlQueryModel>
  4. #include <QSqlTableModel>
  5. #include <QSqlQuery>
  6. #include <QSqlRecord>
  7. #include <QSqlError>
  8. #include <QSqlField>
  9. #include <QDebug>
  10. // ctkDICOMWidgets includes
  11. #include "ctkDICOMDirectoryListWidget.h"
  12. #include "ui_ctkDICOMDirectoryListWidget.h"
  13. // STD includes
  14. #include <iostream>
  15. //----------------------------------------------------------------------------
  16. class ctkDICOMDirectoryListWidgetPrivate: public Ui_ctkDICOMDirectoryListWidget
  17. {
  18. public:
  19. ctkDICOMDirectoryListWidgetPrivate(){}
  20. ctkDICOMDatabase* database;
  21. QSqlTableModel* directoryListModel;
  22. };
  23. //----------------------------------------------------------------------------
  24. // ctkDICOMDirectoryListWidgetPrivate methods
  25. //---------------------------
  26. // ctkDICOMDirectoryListWidget methods
  27. //----------------------------------------------------------------------------
  28. ctkDICOMDirectoryListWidget::ctkDICOMDirectoryListWidget(QWidget* _parent):Superclass(_parent),
  29. d_ptr(new ctkDICOMDirectoryListWidgetPrivate)
  30. {
  31. Q_D(ctkDICOMDirectoryListWidget);
  32. d->setupUi(this);
  33. connect(d->addButton, SIGNAL(clicked()), this, SLOT(addDirectoryClicked()));
  34. connect(d->removeButton, SIGNAL(clicked()), this, SLOT(removeDirectoryClicked()));
  35. d->removeButton->setDisabled(true);
  36. }
  37. //----------------------------------------------------------------------------
  38. ctkDICOMDirectoryListWidget::~ctkDICOMDirectoryListWidget()
  39. {
  40. }
  41. //----------------------------------------------------------------------------
  42. void ctkDICOMDirectoryListWidget::addDirectoryClicked()
  43. {
  44. Q_D(ctkDICOMDirectoryListWidget);
  45. QString newDir = QFileDialog::getExistingDirectory(this, tr("Open Directory"));
  46. if ( !newDir.isEmpty() )
  47. {
  48. QSqlRecord newDirRecord;
  49. newDirRecord.append(QSqlField("Dirname",QVariant::String));
  50. newDirRecord.setValue("Dirname",newDir);
  51. /*bool success = */d->directoryListModel->insertRecord(-1,newDirRecord);
  52. bool success2 = d->directoryListModel->submitAll();
  53. if ( !success2 )
  54. {
  55. qDebug() << d->directoryListModel->lastError();
  56. }
  57. //addDirectoryQuery.prepare("insert into Directories VALUES ( :dirname )");
  58. //addDirectoryQuery.bindValue(":dirname",newDir);
  59. //addDirectoryQuery.exec();
  60. // d->directoryListModel;
  61. }
  62. //d->directoryListView->setModel(NULL);
  63. // d->tableView->setModel(NULL);
  64. }
  65. //----------------------------------------------------------------------------
  66. void ctkDICOMDirectoryListWidget::removeDirectoryClicked()
  67. {
  68. Q_D(ctkDICOMDirectoryListWidget);
  69. while ( ! d->directoryListView->selectionModel()->selectedIndexes().empty() )
  70. {
  71. d->directoryListModel->removeRow(
  72. d->directoryListView->selectionModel()->selectedIndexes().first().row()
  73. );
  74. }
  75. }
  76. //----------------------------------------------------------------------------
  77. void ctkDICOMDirectoryListWidget::setDICOMDatabase(ctkDICOMDatabase* dicomDatabase)
  78. {
  79. Q_D(ctkDICOMDirectoryListWidget);
  80. d->database = dicomDatabase;
  81. d->directoryListModel = new QSqlTableModel(this,d->database->database());
  82. d->directoryListModel->setTable("Directories");
  83. d->directoryListModel->setEditStrategy(QSqlTableModel::OnFieldChange);
  84. d->directoryListModel->select();
  85. d->directoryListView->setModel(d->directoryListModel);
  86. connect ( d->directoryListView->selectionModel(),
  87. SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
  88. this,
  89. SLOT(directorySelectionChanged(const QItemSelection & , const QItemSelection & )));
  90. }
  91. //----------------------------------------------------------------------------
  92. void ctkDICOMDirectoryListWidget::directorySelectionChanged( const QItemSelection & selected, const QItemSelection & deselected )
  93. {
  94. Q_UNUSED(deselected);
  95. Q_D(ctkDICOMDirectoryListWidget);
  96. d->removeButton->setEnabled( ! selected.empty() );
  97. }