33 #include <QApplication>
34 #include <QDesktopWidget>
37 #include "ctkServiceTracker.h"
38 #include "ctkDICOMBrowser.h"
39 #include "ctkDICOMAppWidget.h"
41 #include "ctkDICOMTableManager.h"
42 #include "ctkDICOMObjectListWidget.h"
43 #include "ctkPluginContext.h"
59 mVerticalLayout(new QVBoxLayout(this)),
74 void DicomWidget::createUI()
79 this->setToolTip(
"Import DICOM data");
83 "View",
"View header info for first selected series",
84 SLOT(onViewHeader()));
87 "Import",
"Import selected series into application",
88 SLOT(onImportIntoCustusXAction()));
94 mVerticalLayout->setMargin(0);
95 mVerticalLayout->addWidget(mBrowser);
97 this->setupDatabaseDirectory();
104 void DicomWidget::setupDatabaseDirectory()
106 QString databaseDirectory =
profile()->getSettingsPath() +
"/DICOMDatabase";
108 QDir qdir(databaseDirectory);
109 if ( !qdir.exists(databaseDirectory) )
111 if ( !qdir.mkpath(databaseDirectory) )
123 QStringList DicomWidget::currentSeriesSelection()
128 void DicomWidget::onViewHeader()
130 QStringList series = this->currentSeriesSelection();
131 std::cout << series.join(
"\n").toStdString() << std::endl;
134 for (
int i=0; i<series.size(); ++i)
136 QStringList current = this->getDatabase()->filesForSeries(series[i]);
137 files.append(current);
143 ctkDICOMObjectListWidget* window =
new ctkDICOMObjectListWidget;
144 window->setWindowTitle(
"DICOM File Header");
145 window->setFileList(files);
147 QWidget* screen = qApp->desktop()->screen(qApp->desktop()->screenNumber(
this));
148 QRect rect = screen->geometry();
149 rect.setWidth(rect.width()*0.66);
150 window->setGeometry(rect);
155 void DicomWidget::onImportIntoCustusXAction()
157 QStringList series = this->currentSeriesSelection();
159 for (
unsigned i=0; i<series.size(); ++i)
161 this->importSeries(series[i]);
165 void DicomWidget::importSeries(QString seriesUid)
173 reportError(QString(
"Failed to convert DICOM series %1").arg(seriesUid));
177 this->loadIntoPatientModel(convertedImage, seriesUid);
180 void DicomWidget::loadIntoPatientModel(
ImagePtr image, QString seriesUid)
182 ctkServiceTracker<PatientModelService*> tracker(mContext);
184 PatientModelService* service = tracker.getService();
188 service->insertData(image);
189 report(QString(
"Loaded DICOM series %1 as %2").arg(seriesUid).arg(image->getName()));
193 reportWarning(QString(
"Failed to load DICOM series %1 as %2: no PatientModelService.").arg(seriesUid).arg(image->getName()));
197 ctkDICOMDatabase* DicomWidget::getDatabase()
const
cxResource_EXPORT ProfilePtr profile()
void reportError(QString msg)
boost::shared_ptr< class Image > ImagePtr
void setDicomDatabase(ctkDICOMDatabase *database)
ImagePtr convertToImage(QString seriesUid)
void reportWarning(QString msg)
#define CX_LOG_CHANNEL_ERROR(channel)