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;
109 ctkDICOMModel* model =
const_cast<ctkDICOMModel*
>(
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);
129 QModelIndex studyIndex = index;
131 ctkDICOMModel* model =
const_cast<ctkDICOMModel*
>(qobject_cast<
const ctkDICOMModel*>(index.model()));
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;
166 ctkDICOMModel* model =
const_cast<ctkDICOMModel*
>(qobject_cast<
const ctkDICOMModel*>(index.model()));
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();
321 ctkDICOMModel* model =
const_cast<ctkDICOMModel*
>(qobject_cast<
const ctkDICOMModel*>(index.model()));
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);
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
virtual void fetchMore(const QModelIndex &parent)
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Namespace for all CustusX production code.