소스 검색

Merge branch 'dicom-thumbnails'

Conflicts:
	Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp
Marco Nolden 14 년 전
부모
커밋
33cabac5b8
3개의 변경된 파일47개의 추가작업 그리고 20개의 파일을 삭제
  1. 11 17
      Libs/DICOM/Core/ctkDICOMModel.cpp
  2. 8 0
      Libs/DICOM/Core/ctkDICOMModel.h
  3. 28 3
      Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

+ 11 - 17
Libs/DICOM/Core/ctkDICOMModel.cpp

@@ -49,13 +49,7 @@ public:
   virtual ~ctkDICOMModelPrivate();
   void init();
 
-  enum IndexType{
-    RootType,
-    PatientType,
-    StudyType,
-    SeriesType,
-    ImageType
-  };
+
  
   void fetch(const QModelIndex& indexValue, int limit);
   Node* createNode(int row, const QModelIndex& parentValue)const;
@@ -88,7 +82,7 @@ struct Node
       }
     this->Children.clear();
     }
-  ctkDICOMModelPrivate::IndexType Type;
+  ctkDICOMModel::IndexType Type;
   Node*                           Parent;
   QVector<Node*>                  Children;
   int                             Row;
@@ -219,7 +213,7 @@ Node* ctkDICOMModelPrivate::createNode(int row, const QModelIndex& parentValue)c
   Node* nodeParent = 0;
   if (row == -1)
     {// root node
-    node->Type = ctkDICOMModelPrivate::RootType;
+    node->Type = ctkDICOMModel::RootType;
     node->Parent = 0;
     }
   else
@@ -227,10 +221,10 @@ Node* ctkDICOMModelPrivate::createNode(int row, const QModelIndex& parentValue)c
     nodeParent = this->nodeFromIndex(parentValue); 
     nodeParent->Children.push_back(node);
     node->Parent = nodeParent;
-    node->Type = ctkDICOMModelPrivate::IndexType(nodeParent->Type + 1);
+    node->Type = ctkDICOMModel::IndexType(nodeParent->Type + 1);
     }
   node->Row = row;
-  if (node->Type != ctkDICOMModelPrivate::RootType)
+  if (node->Type != ctkDICOMModel::RootType)
     {
     int field = 0;//nodeParent->Query.record().indexOf("UID");
     node->UID = this->value(parentValue, row, field).toString();
@@ -299,29 +293,29 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const
   switch(node->Type)
     {
     default:
-      Q_ASSERT(node->Type == ctkDICOMModelPrivate::RootType);
+      Q_ASSERT(node->Type == ctkDICOMModel::RootType);
       break;
-    case ctkDICOMModelPrivate::RootType:
+    case ctkDICOMModel::RootType:
       //query = QString("SELECT  FROM ");
       query = this->generateQuery("UID as UID, PatientsName as Name, PatientsAge as Age, PatientsBirthDate as Date, PatientID as \"Subject ID\"","Patients");
       logger.debug ( "ctkDICOMModelPrivate::updateQueries for Root: query is: " + query );
       break;
-    case ctkDICOMModelPrivate::PatientType:
+    case ctkDICOMModel::PatientType:
       //query = QString("SELECT  FROM Studies WHERE PatientsUID='%1'").arg(node->UID);
       query = this->generateQuery("StudyInstanceUID as UID, StudyDescription as Name, ModalitiesInStudy as Scan, StudyDate as Date, AccessionNumber as Number, ReferringPhysician as Institution, ReferringPhysician as Referrer, PerformingPhysiciansName as Performer", "Studies",QString("PatientsUID='%1'").arg(node->UID));
       logger.debug ( "ctkDICOMModelPrivate::updateQueries for Patient: query is: " + query );
       break;
-    case ctkDICOMModelPrivate::StudyType:
+    case ctkDICOMModel::StudyType:
       //query = QString("SELECT SeriesInstanceUID as UID, SeriesDescription as Name, BodyPartExamined as Scan, SeriesDate as Date, AcquisitionNumber as Number FROM Series WHERE StudyInstanceUID='%1'").arg(node->UID);
       query = this->generateQuery("SeriesInstanceUID as UID, SeriesDescription as Name, BodyPartExamined as Scan, SeriesDate as Date, AcquisitionNumber as Number","Series",QString("StudyInstanceUID='%1'").arg(node->UID));
       logger.debug ( "ctkDICOMModelPrivate::updateQueries for Study: query is: " + query );
       break;
-    case ctkDICOMModelPrivate::SeriesType:
+    case ctkDICOMModel::SeriesType:
       //query = QString("SELECT Filename as UID, Filename as Name, SeriesInstanceUID as Date FROM Images WHERE SeriesInstanceUID='%1'").arg(node->UID);
       query = this->generateQuery("SOPInstanceUID as UID, Filename as Name, SeriesInstanceUID as Date", "Images", QString("SeriesInstanceUID='%1'").arg(node->UID));
       logger.debug ( "ctkDICOMModelPrivate::updateQueries for Series: query is: " + query );
       break;
-    case ctkDICOMModelPrivate::ImageType:
+    case ctkDICOMModel::ImageType:
       break;
     }
   node->Query = QSqlQuery(query, this->DataBase);

+ 8 - 0
Libs/DICOM/Core/ctkDICOMModel.h

@@ -38,6 +38,14 @@ public:
     TypeRole
   };
 
+  enum IndexType{
+    RootType,
+    PatientType,
+    StudyType,
+    SeriesType,
+    ImageType
+  };
+
   explicit ctkDICOMModel(QObject* parent = 0);
   virtual ~ctkDICOMModel();
 

+ 28 - 3
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -165,6 +165,33 @@ void ctkDICOMAppWidget::onDICOMModelSelected(const QModelIndex& index)
 {
   Q_D(ctkDICOMAppWidget);
 
+  if ( d->DICOMModel.data(index,ctkDICOMModel::TypeRole) == ctkDICOMModel::SeriesType )
+  {
+    qDebug() << "Clicked on series";
+    QStringList thumbnails;
+    QString thumbnailPath = d->DICOMDatabase->databaseDirectory() +
+                            "/thumbs/" + d->DICOMModel.data(index.parent() ,ctkDICOMModel::UIDRole).toString() + "/" +
+                            d->DICOMModel.data(index ,ctkDICOMModel::UIDRole).toString() + "/";
+
+    QModelIndex studyIndex = index.parent();
+    QModelIndex seriesIndex = index;
+    int imageCount = d->DICOMModel.rowCount(index);
+    for (int i = 0 ; i < imageCount ; i++ )
+    {
+      QModelIndex imageIndex = index.child(i,0);
+      QString thumbnail = thumbnailPath + d->DICOMModel.data(imageIndex, ctkDICOMModel::UIDRole).toString() + ".png";
+      qDebug() << "Thumb: " << thumbnail;
+      if (QFile(thumbnail).exists())
+      {
+        thumbnails << thumbnail;
+      }
+      d->thumbnailsWidget->setThumbnailFiles(thumbnails);
+    }
+
+    //  thumbnailPath.append("/thumbs/").append(d->DICOMModel.data( studyIndex,ctkDICOMModel::UIDRole).toString() );
+    //  thumbnailPath.append(d->DICOMModel.data( seriesIndex,ctkDICOMModel::UIDRole).toString() );
+  }
+
 
   // TODO: this could check the type of the model entries
   QString thumbnailPath = d->DICOMDatabase->databaseDirectory();
@@ -181,9 +208,7 @@ void ctkDICOMAppWidget::onDICOMModelSelected(const QModelIndex& index)
     d->imagePreview->setText("No preview");
   }
 
-  // update thumbnails 
-  QStringList files = QStringList(thumbnailPath);
-  d->thumbnailsWidget->setThumbnailFiles(files);
+
 }
 
 void ctkDICOMAppWidget::onThumbnailSelected(const ctkDICOMThumbnailWidget& widget){