26 #include <QGridLayout>
28 #include <QPersistentModelIndex>
30 #include <QPushButton>
31 #include <QResizeEvent>
34 #include "ctkLogger.h"
37 #include "ctkFlowLayout.h"
38 #include "ctkThumbnailListWidget_p.h"
42 #include "ctkDICOMDatabase.h"
43 #include "ctkDICOMFilterProxyModel.h"
48 #include "ctkThumbnailLabel.h"
56 static ctkLogger logger(
"org.commontk.DICOM.Widgets.DICOMThumbnailListWidget");
84 void addThumbnailWidget(QString studyUid, QString seriesUid, QString imageUid, QString caption);
85 QStringList
getFilesForImage(QString studyUid, QString seriesUid, QString imageUid);
107 QModelIndex patientIndex = index;
110 qobject_cast<const ctkDICOMModel*>(index.model()));
115 const int studyCount = model->
rowCount(patientIndex);
117 for(
int i=0; i<studyCount; i++)
119 QModelIndex studyIndex = patientIndex.child(i, 0);
121 this->addStudyThumbnails(studyIndex);
129 QModelIndex studyIndex = index;
139 const int seriesCount = model->
rowCount(studyIndex);
141 for(
int i=0; i<seriesCount; i++)
143 QModelIndex seriesIndex = studyIndex.child(i, 0);
149 QString caption = model->
data(seriesIndex, Qt::DisplayRole).toString();
153 if (thumbnails.empty())
155 QString file = thumbnails[thumbnails.size()/2];
163 QModelIndex studyIndex = index.parent();
164 QModelIndex seriesIndex = index;
167 std::cout <<
"DICOMThumbnailListWidgetPrivate::addSeriesThumbnails " << model << std::endl;
179 std::cout <<
"Thumbnails: " << thumbnails.size() << std::endl;
181 for (
int i=0; i<thumbnails.size(); ++i)
184 int humanIndex = i+1;
185 QString caption = QString(
"Image %1").arg(humanIndex);
201 std::cout <<
"DICOMThumbnailListWidgetPrivate::getThumbnailsForSeries" << std::endl;
202 QStringList files =
Database->filesForSeries(seriesUid);
204 QStringList thumbnails;
205 for (
int i=0; i<files.size(); ++i)
207 QString imageUid =
Database->instanceForFile(files[i]);
208 QStringList filenames = this->
getFilesForImage(studyUid, seriesUid, imageUid);
209 thumbnails << filenames;
216 QStringList filenames = this->
getFilesForImage(studyUid, seriesUid, imageUid);
218 for (
int i=0; i<filenames.size(); ++i)
229 QString baseFilename = QString(
"%1/thumbs/%2/%3/%4.png")
237 QStringList splitPath = baseFilename.split(
".");
239 for (
int i=0;
true; ++i)
241 splitPath.back() = QString(
"frame_%1.png").arg(i);
242 QString frameFilename = splitPath.join(
".");
244 if(!QFileInfo(frameFilename).exists())
246 retval << frameFilename;
250 if(retval.empty() && QFileInfo(baseFilename).exists())
252 retval << baseFilename;
261 if(!QFileInfo(filename).exists())
267 ctkThumbnailLabel* widget =
new ctkThumbnailLabel(this->ScrollAreaContentWidget);
269 QString widgetLabel = text;
270 widget->setText( widgetLabel );
271 QPixmap pix(filename);
273 if(this->ThumbnailSize.isValid())
275 widget->setFixedSize(this->ThumbnailSize);
277 widget->setPixmap(pix);
279 this->addThumbnail(widget);
303 d->DatabaseDirectory = directory;
309 d->Database = database;
319 this->clearThumbnails();
325 QModelIndex index0 = index.sibling(index.row(), 0);
327 d->CurrentSelectedModel = index0;
331 d->addPatientThumbnails(index0);
335 d->addStudyThumbnails(index0);
339 d->addSeriesThumbnails(index0);
343 this->setCurrentThumbnail(0);