Преглед изворни кода

Re-implement ctkDICOMThumbnailListWidget as a sub-class of ctkThumbnailListWidget

I made the UI instance a protected variable in ctkThumbnailListWidget so ctkDICOMThumbnailListWidget can use it too. Is this the correct thing to do?
nherlambang пре 14 година
родитељ
комит
6bc0cd3b8b

+ 0 - 1
Libs/DICOM/Widgets/CMakeLists.txt

@@ -75,7 +75,6 @@ SET(KIT_UI_FORMS
   Resources/UI/ctkDICOMQueryRetrieveWidget.ui
   Resources/UI/ctkDICOMQueryWidget.ui
   Resources/UI/ctkDICOMServerNodeWidget.ui
-  Resources/UI/ctkDICOMThumbnailListWidget.ui
 )
 
 # Resources

+ 0 - 38
Libs/DICOM/Widgets/Resources/UI/ctkDICOMThumbnailListWidget.ui

@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ctkDICOMThumbnailListWidget</class>
- <widget class="QWidget" name="ctkDICOMThumbnailListWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>224</width>
-    <height>237</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <widget class="QScrollArea" name="ScrollArea">
-     <property name="widgetResizable">
-      <bool>true</bool>
-     </property>
-     <widget class="QWidget" name="ScrollAreaContentWidget">
-      <property name="geometry">
-       <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>198</width>
-        <height>211</height>
-       </rect>
-      </property>
-     </widget>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 6 - 6
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -420,7 +420,7 @@ void ctkDICOMAppWidget::onNextImage(){
         QModelIndex nextIndex = currentIndex.sibling(imageID, 0);
 
         d->ImagePreview->onModelSelected(nextIndex);
-        d->ThumbnailsWidget->selectThumbnail(nextIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(nextIndex);
         }
       }
 }
@@ -454,7 +454,7 @@ void ctkDICOMAppWidget::onPreviousImage(){
         QModelIndex prevIndex = currentIndex.sibling(imageID, 0);
 
         d->ImagePreview->onModelSelected(prevIndex);
-        d->ThumbnailsWidget->selectThumbnail(prevIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(prevIndex);
         }
       }
 }
@@ -482,7 +482,7 @@ void ctkDICOMAppWidget::onNextSeries(){
         QModelIndex nextIndex = seriesIndex.sibling(seriesID, 0);
 
         d->ImagePreview->onModelSelected(nextIndex);
-        d->ThumbnailsWidget->selectThumbnail(nextIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(nextIndex);
         }
       }
 }
@@ -511,7 +511,7 @@ void ctkDICOMAppWidget::onPreviousSeries(){
         QModelIndex prevIndex = seriesIndex.sibling(seriesID, 0);
 
         d->ImagePreview->onModelSelected(prevIndex);
-        d->ThumbnailsWidget->selectThumbnail(prevIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(prevIndex);
         }
       }
 }
@@ -540,7 +540,7 @@ void ctkDICOMAppWidget::onNextStudy(){
         QModelIndex nextIndex = studyIndex.sibling(studyID, 0);
 
         d->ImagePreview->onModelSelected(nextIndex);
-        d->ThumbnailsWidget->selectThumbnail(nextIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(nextIndex);
         }
       }
 }
@@ -570,7 +570,7 @@ void ctkDICOMAppWidget::onPreviousStudy(){
         QModelIndex prevIndex = studyIndex.sibling(studyID, 0);
 
         d->ImagePreview->onModelSelected(prevIndex);
-        d->ThumbnailsWidget->selectThumbnail(prevIndex);
+        d->ThumbnailsWidget->selectThumbnailFromIndex(prevIndex);
         }
       }
 }

+ 15 - 103
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp

@@ -33,6 +33,7 @@
 
 // ctkWidgets includes
 #include "ctkFlowLayout.h"
+#include "ui_ctkThumbnailListWidget.h"
 
 //ctkDICOMCore includes
 #include "ctkDICOMDatabase.h"
@@ -42,7 +43,6 @@
 // ctkDICOMWidgets includes
 #include "ctkDICOMThumbnailListWidget.h"
 #include "ctkThumbnailWidget.h"
-#include "ui_ctkDICOMThumbnailListWidget.h"
 
 // STD includes
 #include <iostream>
@@ -53,7 +53,7 @@
 static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMThumbnailListWidget");
 
 //----------------------------------------------------------------------------
-class ctkDICOMThumbnailListWidgetPrivate: public Ui_ctkDICOMThumbnailListWidget
+class ctkDICOMThumbnailListWidgetPrivate
 {
 public:
   ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent);
@@ -61,9 +61,6 @@ public:
   QString DatabaseDirectory;
   QModelIndex CurrentSelectedModel;
 
-  int ThumbnailWidth;
-
-  void clearAllThumbnails();
   void addThumbnailWidget(const QModelIndex &imageIndex, const QModelIndex& sourceIndex, const QString& text);
 
   void onPatientModelSelected(const QModelIndex &index);
@@ -79,7 +76,7 @@ public:
 
 //----------------------------------------------------------------------------
 ctkDICOMThumbnailListWidgetPrivate::ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent): q_ptr(parent){
-  this->ThumbnailWidth = -1;
+
 }
 
 //----------------------------------------------------------------------------
@@ -173,24 +170,6 @@ void ctkDICOMThumbnailListWidgetPrivate::onSeriesModelSelected(const QModelIndex
     }
 }
 
-void ctkDICOMThumbnailListWidgetPrivate::clearAllThumbnails(){
-    Q_Q(ctkDICOMThumbnailListWidget);
-
-    // Remove previous displayed thumbnails
-    QLayoutItem* item;
-    while((item = this->ScrollAreaContentWidget->layout()->takeAt(0)))
-    {
-        ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(item->widget());
-        if(thumbnailWidget)
-        {
-            q->disconnect(thumbnailWidget, SIGNAL(selected(ctkThumbnailWidget)), q, SLOT(onThumbnailSelected(ctkThumbnailWidget)));
-            q->disconnect(thumbnailWidget, SIGNAL(selected(ctkThumbnailWidget)), q, SIGNAL(selected(ctkThumbnailWidget)));
-            q->disconnect(thumbnailWidget, SIGNAL(doubleClicked(ctkThumbnailWidget)), q, SIGNAL(doubleClicked(ctkThumbnailWidget)));
-        }
-        item->widget()->deleteLater();
-    }
-}
-
 void ctkDICOMThumbnailListWidgetPrivate::addThumbnailWidget(const QModelIndex& imageIndex, const QModelIndex& sourceIndex, const QString &text){
     Q_Q(ctkDICOMThumbnailListWidget);
 
@@ -206,18 +185,18 @@ void ctkDICOMThumbnailListWidgetPrivate::addThumbnailWidget(const QModelIndex& i
                                 model->data(seriesIndex ,ctkDICOMModel::UIDRole).toString() + "/" +
                                 model->data(imageIndex, ctkDICOMModel::UIDRole).toString() + ".png";
 
-        ctkThumbnailWidget* widget = new ctkThumbnailWidget(this->ScrollAreaContentWidget);
+        ctkThumbnailWidget* widget = new ctkThumbnailWidget(q->ui->ScrollAreaContentWidget);
         QString widgetLabel = text;
         widget->setText( widgetLabel );
         QPixmap pix(thumbnailPath);
         logger.debug("Setting pixmap to " + thumbnailPath);
-        if(this->ThumbnailWidth > 0){
-          widget->setMaximumWidth(this->ThumbnailWidth);
-          widget->setMinimumWidth(this->ThumbnailWidth);
+        if(q->ThumbnailWidth > 0){
+          widget->setMaximumWidth(q->ThumbnailWidth);
+          widget->setMinimumWidth(q->ThumbnailWidth);
         }
         widget->setPixmap(pix);
         widget->setSourceIndex(sourceIndex);
-        this->ScrollAreaContentWidget->layout()->addWidget(widget);
+        q->ui->ScrollAreaContentWidget->layout()->addWidget(widget);
 
         q->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), q, SLOT(onThumbnailSelected(ctkThumbnailWidget)));
         q->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), q, SIGNAL(selected(ctkThumbnailWidget)));
@@ -234,18 +213,14 @@ ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):Super
 {
     Q_D(ctkDICOMThumbnailListWidget);
 
-    d->setupUi(this);
-
-    d->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
-    qobject_cast<ctkFlowLayout*>(d->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
+    ui->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
+    qobject_cast<ctkFlowLayout*>(ui->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
 }
 
 //----------------------------------------------------------------------------
 ctkDICOMThumbnailListWidget::~ctkDICOMThumbnailListWidget()
 {
-    Q_D(ctkDICOMThumbnailListWidget);
 
-    d->clearAllThumbnails();
 }
 
 //----------------------------------------------------------------------------
@@ -256,32 +231,7 @@ void ctkDICOMThumbnailListWidget::setDatabaseDirectory(const QString &directory)
 }
 
 //----------------------------------------------------------------------------
-void ctkDICOMThumbnailListWidget::selectThumbnail(int index){
-    Q_D(ctkDICOMThumbnailListWidget);
-
-    int count = d->ScrollAreaContentWidget->layout()->count();
-
-    logger.debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString());
-
-    if(index >= count)return;
-
-    for(int i=0; i<count; i++)
-      {
-      ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-      if(i == index)
-        {
-        thumbnailWidget->setSelected(true);
-        d->ScrollArea->ensureWidgetVisible(thumbnailWidget);
-        }
-      else
-        {
-        thumbnailWidget->setSelected(false);
-        }
-      }
-}
-
-//----------------------------------------------------------------------------
-void ctkDICOMThumbnailListWidget::selectThumbnail(const QModelIndex &index){
+void ctkDICOMThumbnailListWidget::selectThumbnailFromIndex(const QModelIndex &index){
     Q_D(ctkDICOMThumbnailListWidget);
 
     if(!d->CurrentSelectedModel.isValid())
@@ -297,14 +247,14 @@ void ctkDICOMThumbnailListWidget::selectThumbnail(const QModelIndex &index){
 
     if(model)
     {
-        int count = d->ScrollAreaContentWidget->layout()->count();
+        int count = ui->ScrollAreaContentWidget->layout()->count();
 
         for(int i=0; i<count; i++)
         {
-            ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+            ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
             if(thumbnailWidget->sourceIndex() == index){
                 thumbnailWidget->setSelected(true);
-                d->ScrollArea->ensureWidgetVisible(thumbnailWidget);
+                ui->ScrollArea->ensureWidgetVisible(thumbnailWidget);
             }
             else
             {
@@ -318,7 +268,7 @@ void ctkDICOMThumbnailListWidget::selectThumbnail(const QModelIndex &index){
 void ctkDICOMThumbnailListWidget::onModelSelected(const QModelIndex &index){
     Q_D(ctkDICOMThumbnailListWidget);
 
-    d->clearAllThumbnails();
+    this->reset();
 
     ctkDICOMModel* model = const_cast<ctkDICOMModel*>(qobject_cast<const ctkDICOMModel*>(index.model()));
 
@@ -344,41 +294,3 @@ void ctkDICOMThumbnailListWidget::onModelSelected(const QModelIndex &index){
 
     this->selectThumbnail(0);
 }
-
-//----------------------------------------------------------------------------
-void ctkDICOMThumbnailListWidget::onThumbnailSelected(const ctkThumbnailWidget &widget){
-    Q_D(ctkDICOMThumbnailListWidget);
-    for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
-    {
-        ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-        if(thumbnailWidget && (&widget != thumbnailWidget))
-        {
-            thumbnailWidget->setSelected(false);
-        }
-    }
-}
-
-//----------------------------------------------------------------------------
-void ctkDICOMThumbnailListWidget::setThumbnailWidth(int width){
-  Q_D(ctkDICOMThumbnailListWidget);
-  for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
-    {
-    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-    if(thumbnailWidget)
-      {
-        if(width > 0){
-          thumbnailWidget->setMaximumWidth(width);
-          thumbnailWidget->setMinimumWidth(width);
-        }
-      }
-    }
-
-  d->ThumbnailWidth = width;
-}
-
-//----------------------------------------------------------------------------
-void ctkDICOMThumbnailListWidget::reset(){
-  Q_D(ctkDICOMThumbnailListWidget);
-
-  d->clearAllThumbnails();
-}

+ 6 - 18
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.h

@@ -18,32 +18,27 @@
 
 =========================================================================*/
 
-#ifndef __ctkDICOMThumbnailsListWidget_h
-#define __ctkDICOMThumbnailsListWidget_h
-
-// Qt includes 
-#include <QWidget>
+#ifndef __ctkDICOMThumbnailListWidget_h
+#define __ctkDICOMThumbnailListWidget_h
 
 #include "ctkDICOMWidgetsExport.h"
+#include "ctkThumbnailListWidget.h"
 
 class QModelIndex;
 class ctkDICOMThumbnailListWidgetPrivate;
 class ctkThumbnailWidget;
 
-class CTK_DICOM_WIDGETS_EXPORT ctkDICOMThumbnailListWidget : public QWidget
+class CTK_DICOM_WIDGETS_EXPORT ctkDICOMThumbnailListWidget : public ctkThumbnailListWidget
 {
   Q_OBJECT
 public:
-  typedef QWidget Superclass;
+  typedef ctkThumbnailListWidget Superclass;
   explicit ctkDICOMThumbnailListWidget(QWidget* parent=0);
   virtual ~ctkDICOMThumbnailListWidget();
 
   void setDatabaseDirectory(const QString& directory);
 
-  void selectThumbnail(int index);
-  void selectThumbnail(const QModelIndex& index);
-
-  void reset();
+  void selectThumbnailFromIndex(const QModelIndex& index);
 
 protected:
   QScopedPointer<ctkDICOMThumbnailListWidgetPrivate> d_ptr;
@@ -52,15 +47,8 @@ private:
   Q_DECLARE_PRIVATE(ctkDICOMThumbnailListWidget);
   Q_DISABLE_COPY(ctkDICOMThumbnailListWidget);
 
-signals:
-  void selected(const ctkThumbnailWidget& widget);
-  void doubleClicked(const ctkThumbnailWidget& widget);
-
 public slots:
   void onModelSelected(const QModelIndex& index);
-  void onThumbnailSelected(const ctkThumbnailWidget& widget);
-
-  void setThumbnailWidth(int width);
 };
 
 #endif

+ 4 - 0
Libs/Widgets/CMakeLists.txt

@@ -103,6 +103,8 @@ SET(KIT_SRCS
   ctkSliderWidget.h
   ctkTestApplication.cpp
   ctkTestApplication.h
+  ctkThumbnailListWidget.cpp
+  ctkThumbnailListWidget.h
   ctkThumbnailWidget.cpp
   ctkThumbnailWidget.h
   ctkToolTipTrapper.cpp
@@ -203,6 +205,7 @@ SET(KIT_MOC_SRCS
   ctkQImageView.h
   ctkSliderWidget.h
   ctkTestApplication.h
+  ctkThumbnailListWidget.h
   ctkThumbnailWidget.h
   ctkToolTipTrapper.h
   ctkTransferFunctionBarsItem.h
@@ -241,6 +244,7 @@ SET(KIT_UI_FORMS
   Resources/UI/ctkScreenshotDialog.ui
   Resources/UI/ctkSettingsDialog.ui
   Resources/UI/ctkSliderWidget.ui
+  Resources/UI/ctkThumbnailListWidget.ui
   Resources/UI/ctkThumbnailWidget.ui
   Resources/UI/ctkWorkflowGroupBox.ui
   )

+ 2 - 0
Libs/Widgets/Testing/Cpp/CMakeLists.txt

@@ -53,6 +53,7 @@ SET(TEST_SOURCES
   ctkSettingsDialogTest1.cpp
   ctkSliderWidgetTest1.cpp
   ctkSliderWidgetTest2.cpp
+  ctkThumbnailListWidgetTest1.cpp
   ctkThumbnailWidgetTest1.cpp
   ctkToolTipTrapperTest1.cpp
   ctkTreeComboBoxTest1.cpp
@@ -169,6 +170,7 @@ SIMPLE_TEST( ctkSettingsPanelTest2 )
 SIMPLE_TEST( ctkSettingsTest1 )
 SIMPLE_TEST( ctkSliderWidgetTest1 )
 SIMPLE_TEST( ctkSliderWidgetTest2 )
+SIMPLE_TEST( ctkThumbnailListWidgetTest1 )
 SIMPLE_TEST( ctkThumbnailWidgetTest1 )
 SIMPLE_TEST( ctkToolTipTrapperTest1 )
 SIMPLE_TEST( ctkTreeComboBoxTest1 )

+ 25 - 28
Libs/Widgets/ctkThumbnailListWidget.cpp

@@ -42,19 +42,14 @@
 // STD includes
 #include <iostream>
 
-static ctkLogger logger("org.commontk.DICOM.Widgets.ctkThumbnailListWidget");
+static ctkLogger logger("org.commontk.Widgets.ctkThumbnailListWidget");
 
 //----------------------------------------------------------------------------
-class ctkThumbnailListWidgetPrivate: public Ui_ctkThumbnailListWidget
+class ctkThumbnailListWidgetPrivate
 {
 public:
   ctkThumbnailListWidgetPrivate(ctkThumbnailListWidget* parent);
 
-  QString DatabaseDirectory;
-  QModelIndex CurrentSelectedModel;
-
-  int ThumbnailWidth;
-
   void clearAllThumbnails();
  
   ctkThumbnailListWidget* const q_ptr;
@@ -66,7 +61,7 @@ public:
 
 //----------------------------------------------------------------------------
 ctkThumbnailListWidgetPrivate::ctkThumbnailListWidgetPrivate(ctkThumbnailListWidget* parent): q_ptr(parent){
-  this->ThumbnailWidth = -1;
+  
 }
 
 void ctkThumbnailListWidgetPrivate::clearAllThumbnails(){
@@ -74,7 +69,7 @@ void ctkThumbnailListWidgetPrivate::clearAllThumbnails(){
 
     // Remove previous displayed thumbnails
     QLayoutItem* item;
-    while((item = this->ScrollAreaContentWidget->layout()->takeAt(0)))
+    while((item = q->ui->ScrollAreaContentWidget->layout()->takeAt(0)))
     {
         ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(item->widget());
         if(thumbnailWidget)
@@ -92,14 +87,17 @@ void ctkThumbnailListWidgetPrivate::clearAllThumbnails(){
 
 //----------------------------------------------------------------------------
 ctkThumbnailListWidget::ctkThumbnailListWidget(QWidget* _parent):Superclass(_parent), 
-									   d_ptr(new ctkThumbnailListWidgetPrivate(this))
+								 d_ptr(new ctkThumbnailListWidgetPrivate(this)),
+								       ui(new Ui_ctkThumbnailListWidget)
 {
     Q_D(ctkThumbnailListWidget);
 
-    d->setupUi(this);
+    ui->setupUi(this);
 
-    d->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
-    qobject_cast<ctkFlowLayout*>(d->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
+    ui->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
+    qobject_cast<ctkFlowLayout*>(ui->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
+
+    this->ThumbnailWidth = -1;
 }
 
 //----------------------------------------------------------------------------
@@ -117,14 +115,14 @@ void ctkThumbnailListWidget::addThumbnails(QList<QPixmap> thumbnails)
 
   for(int i=0; i<thumbnails.count(); i++)
     {
-      ctkThumbnailWidget* widget = new ctkThumbnailWidget(d->ScrollAreaContentWidget);
+      ctkThumbnailWidget* widget = new ctkThumbnailWidget(ui->ScrollAreaContentWidget);
       widget->setText("");
-      if(d->ThumbnailWidth > 0){
-	widget->setMaximumWidth(d->ThumbnailWidth);
-	widget->setMinimumWidth(d->ThumbnailWidth);
+      if(this->ThumbnailWidth > 0){
+	widget->setMaximumWidth(this->ThumbnailWidth);
+	widget->setMinimumWidth(this->ThumbnailWidth);
       }
       widget->setPixmap(thumbnails[i]);
-      d->ScrollAreaContentWidget->layout()->addWidget(widget);
+      ui->ScrollAreaContentWidget->layout()->addWidget(widget);
 
       this->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), this, SLOT(onThumbnailSelected(ctkThumbnailWidget)));
       this->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), this, SIGNAL(selected(ctkThumbnailWidget)));
@@ -136,7 +134,7 @@ void ctkThumbnailListWidget::addThumbnails(QList<QPixmap> thumbnails)
 void ctkThumbnailListWidget::selectThumbnail(int index){
     Q_D(ctkThumbnailListWidget);
 
-    int count = d->ScrollAreaContentWidget->layout()->count();
+    int count = ui->ScrollAreaContentWidget->layout()->count();
 
     logger.debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString());
 
@@ -144,11 +142,11 @@ void ctkThumbnailListWidget::selectThumbnail(int index){
 
     for(int i=0; i<count; i++)
       {
-      ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+      ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
       if(i == index)
         {
         thumbnailWidget->setSelected(true);
-        d->ScrollArea->ensureWidgetVisible(thumbnailWidget);
+        ui->ScrollArea->ensureWidgetVisible(thumbnailWidget);
         }
       else
         {
@@ -160,9 +158,9 @@ void ctkThumbnailListWidget::selectThumbnail(int index){
 //----------------------------------------------------------------------------
 void ctkThumbnailListWidget::onThumbnailSelected(const ctkThumbnailWidget &widget){
     Q_D(ctkThumbnailListWidget);
-    for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
+    for(int i=0; i<ui->ScrollAreaContentWidget->layout()->count(); i++)
     {
-        ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+        ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
         if(thumbnailWidget && (&widget != thumbnailWidget))
         {
             thumbnailWidget->setSelected(false);
@@ -173,9 +171,9 @@ void ctkThumbnailListWidget::onThumbnailSelected(const ctkThumbnailWidget &widge
 //----------------------------------------------------------------------------
 void ctkThumbnailListWidget::setThumbnailWidth(int width){
   Q_D(ctkThumbnailListWidget);
-  for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
+  for(int i=0; i<ui->ScrollAreaContentWidget->layout()->count(); i++)
     {
-    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
     if(thumbnailWidget)
       {
         if(width > 0){
@@ -185,13 +183,12 @@ void ctkThumbnailListWidget::setThumbnailWidth(int width){
       }
     }
 
-  d->ThumbnailWidth = width;
+  this->ThumbnailWidth = width;
 }
 
 //----------------------------------------------------------------------------
 int ctkThumbnailListWidget::thumbnailWidth(){
-  Q_D(ctkThumbnailListWidget);
-  return d->ThumbnailWidth;
+  return this->ThumbnailWidth;
 }
 
 //----------------------------------------------------------------------------

+ 5 - 0
Libs/Widgets/ctkThumbnailListWidget.h

@@ -30,6 +30,8 @@ class QModelIndex;
 class ctkThumbnailListWidgetPrivate;
 class ctkThumbnailWidget;
 
+class Ui_ctkThumbnailListWidget;
+
 class CTK_WIDGETS_EXPORT ctkThumbnailListWidget : public QWidget
 {
   Q_OBJECT
@@ -51,8 +53,11 @@ public:
   int thumbnailWidth();
 
 protected:
+  Ui_ctkThumbnailListWidget* ui;
   QScopedPointer<ctkThumbnailListWidgetPrivate> d_ptr;
 
+  int ThumbnailWidth;
+
 private:
   Q_DECLARE_PRIVATE(ctkThumbnailListWidget);
   Q_DISABLE_COPY(ctkThumbnailListWidget);