|
@@ -8,14 +8,20 @@
|
|
|
#include <QSettings>
|
|
|
#include <QAction>
|
|
|
#include <QModelIndex>
|
|
|
+#include <QCheckBox>
|
|
|
|
|
|
-// ctkDICOMWidgets includes
|
|
|
+// ctkDICOMCore includes
|
|
|
#include "ctkDICOMDatabase.h"
|
|
|
+#include "ctkDICOMIndexer.h"
|
|
|
+
|
|
|
+// ctkDICOMWidgets includes
|
|
|
#include "ctkDICOMModel.h"
|
|
|
#include "ctkDICOMAppWidget.h"
|
|
|
#include "ctkDICOMQueryResultsTabWidget.h"
|
|
|
#include "ui_ctkDICOMAppWidget.h"
|
|
|
#include "ctkDirectoryButton.h"
|
|
|
+#include "ctkFileDialog.h"
|
|
|
+
|
|
|
#include "ctkDICOMQueryRetrieveWidget.h"
|
|
|
#include "ctkDICOMImportWidget.h"
|
|
|
|
|
@@ -29,18 +35,22 @@ class ctkDICOMAppWidgetPrivate: public Ui_ctkDICOMAppWidget
|
|
|
public:
|
|
|
ctkDICOMAppWidgetPrivate();
|
|
|
|
|
|
- ctkDICOMImportWidget* ImportWidget;
|
|
|
+ ctkFileDialog* ImportDialog;
|
|
|
ctkDICOMQueryRetrieveWidget* QueryRetrieveWidget;
|
|
|
|
|
|
- ctkDICOMDatabase DICOMDatabase;
|
|
|
+ QSharedPointer<ctkDICOMDatabase> DICOMDatabase;
|
|
|
ctkDICOMModel DICOMModel;
|
|
|
+ QSharedPointer<ctkDICOMIndexer> DICOMIndexer;
|
|
|
+
|
|
|
};
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
// ctkDICOMAppWidgetPrivate methods
|
|
|
|
|
|
ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
|
|
|
-
|
|
|
+
|
|
|
+ DICOMDatabase = QSharedPointer<ctkDICOMDatabase> (new ctkDICOMDatabase);
|
|
|
+ DICOMIndexer = QSharedPointer<ctkDICOMIndexer> (new ctkDICOMIndexer);
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
@@ -62,7 +72,14 @@ ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
|
|
|
connect(d->directoryButton, SIGNAL(directoryChanged(const QString&)), this, SLOT(setDatabaseDirectory(const QString&)));
|
|
|
|
|
|
//Initialize import widget
|
|
|
- d->ImportWidget = new ctkDICOMImportWidget();
|
|
|
+ d->ImportDialog = new ctkFileDialog();
|
|
|
+ QCheckBox* importCheckbox = new QCheckBox("Copy on import", d->ImportDialog);
|
|
|
+ d->ImportDialog->setBottomWidget(importCheckbox);
|
|
|
+ d->ImportDialog->setFileMode(QFileDialog::Directory);
|
|
|
+ d->ImportDialog->setLabelText(QFileDialog::Accept,"Import");
|
|
|
+ d->ImportDialog->setWindowTitle("Import DICOM files from directory ...");
|
|
|
+ d->ImportDialog->setWindowModality(Qt::ApplicationModal);
|
|
|
+
|
|
|
|
|
|
//Set thumbnails width in thumbnail widget
|
|
|
//d->thumbnailsWidget->setThumbnailWidth(128);
|
|
@@ -72,6 +89,8 @@ ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
|
|
|
//connect signal and slots
|
|
|
connect(d->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onDICOMModelSelected(const QModelIndex &)));
|
|
|
connect(d->thumbnailsWidget, SIGNAL(selected(const ctkDICOMThumbnailWidget&)), this, SLOT(onThumbnailSelected(const ctkDICOMThumbnailWidget&)));
|
|
|
+ connect(d->ImportDialog, SIGNAL(fileSelected(QString)),this,SLOT(onImportDirectory(QString)));
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
@@ -80,7 +99,7 @@ ctkDICOMAppWidget::~ctkDICOMAppWidget()
|
|
|
Q_D(ctkDICOMAppWidget);
|
|
|
|
|
|
d->QueryRetrieveWidget->deleteLater();
|
|
|
- d->ImportWidget->deleteLater();
|
|
|
+ d->ImportDialog->deleteLater();
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
@@ -93,23 +112,24 @@ void ctkDICOMAppWidget::setDatabaseDirectory(const QString& directory)
|
|
|
settings.sync();
|
|
|
|
|
|
//close the active DICOM database
|
|
|
- d->DICOMDatabase.closeDatabase();
|
|
|
+ d->DICOMDatabase->closeDatabase();
|
|
|
|
|
|
//open DICOM database on the directory
|
|
|
QString databaseFileName = directory + QString("/ctkDICOM.sql");
|
|
|
- try { d->DICOMDatabase.openDatabase( databaseFileName ); }
|
|
|
+ try { d->DICOMDatabase->openDatabase( databaseFileName ); }
|
|
|
catch (std::exception e)
|
|
|
{
|
|
|
- std::cerr << "Database error: " << qPrintable(d->DICOMDatabase.GetLastError()) << "\n";
|
|
|
- d->DICOMDatabase.closeDatabase();
|
|
|
+ std::cerr << "Database error: " << qPrintable(d->DICOMDatabase->lastError()) << "\n";
|
|
|
+ d->DICOMDatabase->closeDatabase();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- d->DICOMModel.setDatabase(d->DICOMDatabase.database());
|
|
|
+ d->DICOMModel.setDatabase(d->DICOMDatabase->database());
|
|
|
d->treeView->setModel(&d->DICOMModel);
|
|
|
|
|
|
//pass DICOM database instance to Import widget
|
|
|
- d->ImportWidget->setDICOMDatabase(&d->DICOMDatabase);
|
|
|
+ // d->ImportDialog->setDICOMDatabase(d->DICOMDatabase);
|
|
|
+ d->directoryButton->setDirectory(directory);
|
|
|
}
|
|
|
|
|
|
void ctkDICOMAppWidget::onAddToDatabase()
|
|
@@ -123,8 +143,8 @@ void ctkDICOMAppWidget::onAddToDatabase()
|
|
|
void ctkDICOMAppWidget::onImport(){
|
|
|
Q_D(ctkDICOMAppWidget);
|
|
|
|
|
|
- d->ImportWidget->show();
|
|
|
- d->ImportWidget->raise();
|
|
|
+ d->ImportDialog->show();
|
|
|
+ d->ImportDialog->raise();
|
|
|
}
|
|
|
|
|
|
void ctkDICOMAppWidget::onExport(){
|
|
@@ -148,3 +168,17 @@ void ctkDICOMAppWidget::onDICOMModelSelected(const QModelIndex& index){
|
|
|
void ctkDICOMAppWidget::onThumbnailSelected(const ctkDICOMThumbnailWidget& widget){
|
|
|
//TODO: update previewer
|
|
|
}
|
|
|
+void ctkDICOMAppWidget::onImportDirectory(QString directory)
|
|
|
+{
|
|
|
+ Q_D(ctkDICOMAppWidget);
|
|
|
+ if (QDir(directory).exists())
|
|
|
+ {
|
|
|
+ QCheckBox* copyOnImport = qobject_cast<QCheckBox*>(d->ImportDialog->bottomWidget());
|
|
|
+ QString targetDirectory;
|
|
|
+ if (copyOnImport->isEnabled())
|
|
|
+ {
|
|
|
+ targetDirectory = d->DICOMDatabase->databaseDirectory();
|
|
|
+ }
|
|
|
+ d->DICOMIndexer->addDirectory(*d->DICOMDatabase,directory,targetDirectory);
|
|
|
+ }
|
|
|
+}
|