浏览代码

Improve implementation of ctkThumbnailWidget, ctkThumbnailListWidget, and ctkDICOMThumbnailListWidget

- add ctkThumbnailListWidget_p.h
- add "selected" property to ctkthumbnailWidget
- remove sourceIndex from ctkThumbnailWidget, and implement into ctkDICOMThumbnailListWidget using dynamic property
- make "thumbnailWidth" a property in ctkThumbnailListWidget
- use QPersistentModelIndex instead of QModelIndex in ctkDICOMThumbnailListWidget
- remove warnings
nherlambang 14 年之前
父节点
当前提交
15604c6f56

+ 3 - 0
Libs/DICOM/Core/ctkDICOMModel.cpp

@@ -37,6 +37,9 @@
 static ctkLogger logger ( "org.commontk.dicom.DICOMModel" );
 struct Node;
 
+Q_DECLARE_METATYPE(Qt::CheckState);
+Q_DECLARE_METATYPE(QStringList);
+
 //------------------------------------------------------------------------------
 class ctkDICOMModelPrivate
 {

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

@@ -86,7 +86,4 @@ private:
   Q_DISABLE_COPY(ctkDICOMModel);
 };
 
-Q_DECLARE_METATYPE(Qt::CheckState);
-Q_DECLARE_METATYPE(QStringList);
-
 #endif

+ 15 - 2
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -27,7 +27,9 @@
 #include <QAction>
 #include <QCheckBox>
 #include <QDebug>
+#include <QMetaType>
 #include <QModelIndex>
+#include <QPersistentModelIndex>
 #include <QSettings>
 #include <QSlider>
 #include <QTabBar>
@@ -59,6 +61,8 @@
 #include <ctkLogger.h>
 static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMAppWidget");
 
+Q_DECLARE_METATYPE(QPersistentModelIndex);
+
 //----------------------------------------------------------------------------
 class ctkDICOMAppWidgetPrivate: public Ui_ctkDICOMAppWidget
 {
@@ -295,7 +299,11 @@ void ctkDICOMAppWidget::onThumbnailSelected(const ctkThumbnailWidget& widget)
 {
     Q_D(ctkDICOMAppWidget);
 
-    d->ImagePreview->onModelSelected(widget.sourceIndex());
+  QModelIndex index = widget.property("sourceIndex").value<QPersistentModelIndex>();
+  if(index.isValid())
+    {
+    d->ImagePreview->onModelSelected(index);
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -303,7 +311,12 @@ void ctkDICOMAppWidget::onThumbnailDoubleClicked(const ctkThumbnailWidget& widge
 {
     Q_D(ctkDICOMAppWidget);
 
-    QModelIndex index = widget.sourceIndex();
+    QModelIndex index = widget.property("sourceIndex").value<QPersistentModelIndex>();
+
+    if(!index.isValid())
+      {
+      return;
+      }
 
     ctkDICOMModel* model = const_cast<ctkDICOMModel*>(qobject_cast<const ctkDICOMModel*>(index.model()));
     QModelIndex index0 = index.sibling(index.row(), 0);

+ 29 - 19
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp

@@ -24,6 +24,8 @@
 #include <QFile>
 #include <QFileInfo>
 #include <QGridLayout>
+#include <QMetaType>
+#include <QPersistentModelIndex>
 #include <QPixmap>
 #include <QPushButton>
 #include <QResizeEvent>
@@ -33,6 +35,7 @@
 
 // ctkWidgets includes
 #include "ctkFlowLayout.h"
+#include "ctkThumbnailListWidget_p.h"
 #include "ui_ctkThumbnailListWidget.h"
 
 //ctkDICOMCore includes
@@ -52,10 +55,14 @@
 
 static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMThumbnailListWidget");
 
+Q_DECLARE_METATYPE(QPersistentModelIndex);
+
 //----------------------------------------------------------------------------
-class ctkDICOMThumbnailListWidgetPrivate
+class ctkDICOMThumbnailListWidgetPrivate : ctkThumbnailListWidgetPrivate
 {
 public:
+  typedef ctkThumbnailListWidgetPrivate Superclass;
+
   ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent);
 
   QString DatabaseDirectory;
@@ -67,7 +74,6 @@ public:
   void onStudyModelSelected(const QModelIndex &index);
   void onSeriesModelSelected(const QModelIndex &index);
 
-  ctkDICOMThumbnailListWidget* const q_ptr;
   Q_DECLARE_PUBLIC(ctkDICOMThumbnailListWidget);
 };
 
@@ -75,7 +81,9 @@ public:
 // ctkDICOMThumbnailListWidgetPrivate methods
 
 //----------------------------------------------------------------------------
-ctkDICOMThumbnailListWidgetPrivate::ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent): q_ptr(parent){
+ctkDICOMThumbnailListWidgetPrivate::ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent):
+  Superclass(parent)
+{
 
 }
 
@@ -185,22 +193,27 @@ void ctkDICOMThumbnailListWidgetPrivate::addThumbnailWidget(const QModelIndex& i
                                 model->data(seriesIndex ,ctkDICOMModel::UIDRole).toString() + "/" +
                                 model->data(imageIndex, ctkDICOMModel::UIDRole).toString() + ".png";
 
-        ctkThumbnailWidget* widget = new ctkThumbnailWidget(q->ui->ScrollAreaContentWidget);
+        ctkThumbnailWidget* widget = new ctkThumbnailWidget(this->ScrollAreaContentWidget);
+
         QString widgetLabel = text;
         widget->setText( widgetLabel );
         QPixmap pix(thumbnailPath);
         logger.debug("Setting pixmap to " + thumbnailPath);
-        if(q->ThumbnailWidth > 0){
-          widget->setMaximumWidth(q->ThumbnailWidth);
-          widget->setMinimumWidth(q->ThumbnailWidth);
+        if(this->ThumbnailWidth > 0){
+          widget->setMaximumWidth(this->ThumbnailWidth);
+          widget->setMinimumWidth(this->ThumbnailWidth);
         }
         widget->setPixmap(pix);
-        widget->setSourceIndex(sourceIndex);
-        q->ui->ScrollAreaContentWidget->layout()->addWidget(widget);
+
+        QVariant var;
+        var.setValue(QPersistentModelIndex(sourceIndex));
+        widget->setProperty("sourceIndex", var);
+        this->ScrollAreaContentWidget->layout()->addWidget(widget);
 
         q->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), q, SLOT(onThumbnailSelected(ctkThumbnailWidget)));
         q->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), q, SIGNAL(selected(ctkThumbnailWidget)));
         q->connect(widget, SIGNAL(doubleClicked(ctkThumbnailWidget)), q, SIGNAL(doubleClicked(ctkThumbnailWidget)));
+
     }
 }
 
@@ -208,13 +221,10 @@ void ctkDICOMThumbnailListWidgetPrivate::addThumbnailWidget(const QModelIndex& i
 // ctkDICOMThumbnailListWidget methods
 
 //----------------------------------------------------------------------------
-ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):Superclass(_parent), 
-									   d_ptr(new ctkDICOMThumbnailListWidgetPrivate(this))
+ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):
+  Superclass(new ctkDICOMThumbnailListWidgetPrivate(this), _parent)
 {
-    Q_D(ctkDICOMThumbnailListWidget);
 
-    ui->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
-    qobject_cast<ctkFlowLayout*>(ui->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
 }
 
 //----------------------------------------------------------------------------
@@ -247,14 +257,14 @@ void ctkDICOMThumbnailListWidget::selectThumbnailFromIndex(const QModelIndex &in
 
     if(model)
     {
-        int count = ui->ScrollAreaContentWidget->layout()->count();
+        int count = d->ScrollAreaContentWidget->layout()->count();
 
         for(int i=0; i<count; i++)
         {
-            ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-            if(thumbnailWidget->sourceIndex() == index){
+            ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+            if(thumbnailWidget->property("sourceIndex").value<QPersistentModelIndex>() == index){
                 thumbnailWidget->setSelected(true);
-                ui->ScrollArea->ensureWidgetVisible(thumbnailWidget);
+                d->ScrollArea->ensureWidgetVisible(thumbnailWidget);
             }
             else
             {
@@ -292,5 +302,5 @@ void ctkDICOMThumbnailListWidget::onModelSelected(const QModelIndex &index){
         }
     }
 
-    this->selectThumbnail(0);
+    this->setCurrentThumbnail(0);
 }

+ 0 - 3
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.h

@@ -40,9 +40,6 @@ public:
 
   void selectThumbnailFromIndex(const QModelIndex& index);
 
-protected:
-  QScopedPointer<ctkDICOMThumbnailListWidgetPrivate> d_ptr;
-
 private:
   Q_DECLARE_PRIVATE(ctkDICOMThumbnailListWidget);
   Q_DISABLE_COPY(ctkDICOMThumbnailListWidget);

+ 1 - 0
Libs/Widgets/CMakeLists.txt

@@ -105,6 +105,7 @@ SET(KIT_SRCS
   ctkTestApplication.h
   ctkThumbnailListWidget.cpp
   ctkThumbnailListWidget.h
+  ctkThumbnailListWidget_p.h
   ctkThumbnailWidget.cpp
   ctkThumbnailWidget.h
   ctkToolTipTrapper.cpp

+ 1 - 1
Libs/Widgets/Testing/Cpp/ctkThumbnailListWidgetTest1.cpp

@@ -66,7 +66,7 @@ int ctkThumbnailListWidgetTest1( int argc, char * argv [] )
 
   if (argc <= 1 || QString(argv[1]) != "-I")
     {
-    QTimer::singleShot(200, &app, SLOT(quit()));
+    QTimer::singleShot(20000, &app, SLOT(quit()));
     }
 
   return app.exec();

+ 72 - 56
Libs/Widgets/ctkThumbnailListWidget.cpp

@@ -36,8 +36,8 @@
 
 // ctkDICOMWidgets includes
 #include "ctkThumbnailListWidget.h"
+#include "ctkThumbnailListWidget_p.h"
 #include "ctkThumbnailWidget.h"
-#include "ui_ctkThumbnailListWidget.h"
 
 // STD includes
 #include <iostream>
@@ -45,31 +45,32 @@
 static ctkLogger logger("org.commontk.Widgets.ctkThumbnailListWidget");
 
 //----------------------------------------------------------------------------
-class ctkThumbnailListWidgetPrivate
-{
-public:
-  ctkThumbnailListWidgetPrivate(ctkThumbnailListWidget* parent);
-
-  void clearAllThumbnails();
- 
-  ctkThumbnailListWidget* const q_ptr;
-  Q_DECLARE_PUBLIC(ctkThumbnailListWidget);
-};
-
-//----------------------------------------------------------------------------
 // ctkThumbnailListWidgetPrivate methods
 
 //----------------------------------------------------------------------------
 ctkThumbnailListWidgetPrivate::ctkThumbnailListWidgetPrivate(ctkThumbnailListWidget* parent): q_ptr(parent){
-  
+
 }
 
+//----------------------------------------------------------------------------
+void ctkThumbnailListWidgetPrivate::init(){
+  Q_Q(ctkThumbnailListWidget);
+
+  this->setupUi(q);
+  this->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
+  qobject_cast<ctkFlowLayout*>(this->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
+
+  this->ThumbnailWidth = -1;
+  this->CurrentThumbnail = -1;
+}
+
+//----------------------------------------------------------------------------
 void ctkThumbnailListWidgetPrivate::clearAllThumbnails(){
     Q_Q(ctkThumbnailListWidget);
 
     // Remove previous displayed thumbnails
     QLayoutItem* item;
-    while((item = q->ui->ScrollAreaContentWidget->layout()->takeAt(0)))
+    while((item = this->ScrollAreaContentWidget->layout()->takeAt(0)))
     {
         ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(item->widget());
         if(thumbnailWidget)
@@ -82,22 +83,28 @@ void ctkThumbnailListWidgetPrivate::clearAllThumbnails(){
     }
 }
 
+
+
 //----------------------------------------------------------------------------
 // ctkThumbnailListWidget methods
 
 //----------------------------------------------------------------------------
-ctkThumbnailListWidget::ctkThumbnailListWidget(QWidget* _parent):Superclass(_parent), 
-								 d_ptr(new ctkThumbnailListWidgetPrivate(this)),
-								       ui(new Ui_ctkThumbnailListWidget)
+ctkThumbnailListWidget::ctkThumbnailListWidget(QWidget* _parent):
+  Superclass(_parent),
+  d_ptr(new ctkThumbnailListWidgetPrivate(this))
 {
-    Q_D(ctkThumbnailListWidget);
+  Q_D(ctkThumbnailListWidget);
 
-    ui->setupUi(this);
+  d->init();
+}
 
-    ui->ScrollAreaContentWidget->setLayout(new ctkFlowLayout);
-    qobject_cast<ctkFlowLayout*>(ui->ScrollAreaContentWidget->layout())->setHorizontalSpacing(4);
+ctkThumbnailListWidget::ctkThumbnailListWidget(ctkThumbnailListWidgetPrivate *_ptr, QWidget *_parent):
+  Superclass(_parent),
+  d_ptr(_ptr)
+{
+  Q_D(ctkThumbnailListWidget);
 
-    this->ThumbnailWidth = -1;
+  d->init();
 }
 
 //----------------------------------------------------------------------------
@@ -112,17 +119,16 @@ ctkThumbnailListWidget::~ctkThumbnailListWidget()
 void ctkThumbnailListWidget::addThumbnails(QList<QPixmap> thumbnails)
 {
   Q_D(ctkThumbnailListWidget);
-
   for(int i=0; i<thumbnails.count(); i++)
     {
-      ctkThumbnailWidget* widget = new ctkThumbnailWidget(ui->ScrollAreaContentWidget);
+      ctkThumbnailWidget* widget = new ctkThumbnailWidget(d->ScrollAreaContentWidget);
       widget->setText("");
-      if(this->ThumbnailWidth > 0){
-	widget->setMaximumWidth(this->ThumbnailWidth);
-	widget->setMinimumWidth(this->ThumbnailWidth);
+      if(d->ThumbnailWidth > 0){
+        widget->setMaximumWidth(d->ThumbnailWidth);
+        widget->setMinimumWidth(d->ThumbnailWidth);
       }
       widget->setPixmap(thumbnails[i]);
-      ui->ScrollAreaContentWidget->layout()->addWidget(widget);
+      d->ScrollAreaContentWidget->layout()->addWidget(widget);
 
       this->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), this, SLOT(onThumbnailSelected(ctkThumbnailWidget)));
       this->connect(widget, SIGNAL(selected(ctkThumbnailWidget)), this, SIGNAL(selected(ctkThumbnailWidget)));
@@ -131,49 +137,58 @@ void ctkThumbnailListWidget::addThumbnails(QList<QPixmap> thumbnails)
 }
 
 //----------------------------------------------------------------------------
-void ctkThumbnailListWidget::selectThumbnail(int index){
-    Q_D(ctkThumbnailListWidget);
+void ctkThumbnailListWidget::setCurrentThumbnail(int index){
+  Q_D(ctkThumbnailListWidget);
 
-    int count = ui->ScrollAreaContentWidget->layout()->count();
+  int count = d->ScrollAreaContentWidget->layout()->count();
 
-    logger.debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString());
+  logger.debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString());
 
-    if(index >= count)return;
+  if(index >= count)return;
 
-    for(int i=0; i<count; i++)
+  for(int i=0; i<count; i++)
+    {
+    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+    if(i == index)
       {
-      ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-      if(i == index)
-        {
-        thumbnailWidget->setSelected(true);
-        ui->ScrollArea->ensureWidgetVisible(thumbnailWidget);
-        }
-      else
-        {
-        thumbnailWidget->setSelected(false);
-        }
+      thumbnailWidget->setSelected(true);
+      d->ScrollArea->ensureWidgetVisible(thumbnailWidget);
       }
+    else
+      {
+      thumbnailWidget->setSelected(false);
+      }
+    }
+
+  d->CurrentThumbnail = index;
+}
+
+//----------------------------------------------------------------------------
+int ctkThumbnailListWidget::currentThumbnail(){
+  Q_D(ctkThumbnailListWidget);
+
+  return d->CurrentThumbnail;
 }
 
 //----------------------------------------------------------------------------
 void ctkThumbnailListWidget::onThumbnailSelected(const ctkThumbnailWidget &widget){
-    Q_D(ctkThumbnailListWidget);
-    for(int i=0; i<ui->ScrollAreaContentWidget->layout()->count(); i++)
+  Q_D(ctkThumbnailListWidget);
+  for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
     {
-        ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
-        if(thumbnailWidget && (&widget != thumbnailWidget))
-        {
-            thumbnailWidget->setSelected(false);
-        }
+    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+    if(thumbnailWidget && (&widget != thumbnailWidget))
+      {
+      thumbnailWidget->setSelected(false);
+      }
     }
 }
 
 //----------------------------------------------------------------------------
 void ctkThumbnailListWidget::setThumbnailWidth(int width){
   Q_D(ctkThumbnailListWidget);
-  for(int i=0; i<ui->ScrollAreaContentWidget->layout()->count(); i++)
+  for(int i=0; i<d->ScrollAreaContentWidget->layout()->count(); i++)
     {
-    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(ui->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
+    ctkThumbnailWidget* thumbnailWidget = qobject_cast<ctkThumbnailWidget*>(d->ScrollAreaContentWidget->layout()->itemAt(i)->widget());
     if(thumbnailWidget)
       {
         if(width > 0){
@@ -183,12 +198,13 @@ void ctkThumbnailListWidget::setThumbnailWidth(int width){
       }
     }
 
-  this->ThumbnailWidth = width;
+  d->ThumbnailWidth = width;
 }
 
 //----------------------------------------------------------------------------
 int ctkThumbnailListWidget::thumbnailWidth(){
-  return this->ThumbnailWidth;
+  Q_D(ctkThumbnailListWidget);
+  return d->ThumbnailWidth;
 }
 
 //----------------------------------------------------------------------------

+ 18 - 16
Libs/Widgets/ctkThumbnailListWidget.h

@@ -30,11 +30,11 @@ class QModelIndex;
 class ctkThumbnailListWidgetPrivate;
 class ctkThumbnailWidget;
 
-class Ui_ctkThumbnailListWidget;
-
 class CTK_WIDGETS_EXPORT ctkThumbnailListWidget : public QWidget
 {
   Q_OBJECT
+  Q_PROPERTY(int currentThumbnail READ currentThumbnail WRITE setCurrentThumbnail)
+  Q_PROPERTY(int thumbnailWidth READ thumbnailWidth WRITE setThumbnailWidth)
 public:
   typedef QWidget Superclass;
   explicit ctkThumbnailListWidget(QWidget* parent=0);
@@ -43,25 +43,18 @@ public:
   /// Add multiple thumbnails to the widget
   void addThumbnails(QList<QPixmap> thumbnails);
 
-  /// Select a thumbnail
-  void selectThumbnail(int index);
+  /// Set current thumbnail
+  void setCurrentThumbnail(int index);
+
+  /// Get current thumbnail
+  int currentThumbnail();
 
   /// Clear all the thumbnails
   void reset();
 
-  /// Get thumbnails width
+  /// Get thumbnail width
   int thumbnailWidth();
 
-protected:
-  Ui_ctkThumbnailListWidget* ui;
-  QScopedPointer<ctkThumbnailListWidgetPrivate> d_ptr;
-
-  int ThumbnailWidth;
-
-private:
-  Q_DECLARE_PRIVATE(ctkThumbnailListWidget);
-  Q_DISABLE_COPY(ctkThumbnailListWidget);
-
 signals:
   void selected(const ctkThumbnailWidget& widget);
   void doubleClicked(const ctkThumbnailWidget& widget);
@@ -69,8 +62,17 @@ signals:
 public slots:
   void onThumbnailSelected(const ctkThumbnailWidget& widget);
 
-  /// Set thumbnails width
+  /// Set thumbnail width
   void setThumbnailWidth(int width);
+
+protected:
+  explicit ctkThumbnailListWidget(ctkThumbnailListWidgetPrivate* ptr, QWidget* parent=0);
+  ctkThumbnailListWidgetPrivate* d_ptr;
+
+private:
+  Q_DECLARE_PRIVATE(ctkThumbnailListWidget);
+  Q_DISABLE_COPY(ctkThumbnailListWidget);
+
 };
 
 #endif

+ 47 - 0
Libs/Widgets/ctkThumbnailListWidget_p.h

@@ -0,0 +1,47 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.commontk.org/LICENSE
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+#ifndef __ctkThumbnailListWidget_p_h
+#define __ctkThumbnailListWidget_p_h
+
+#include "ctkWidgetsExport.h"
+#include "ui_ctkThumbnailListWidget.h"
+
+class ctkThumbnailListWidget;
+
+//----------------------------------------------------------------------------
+class CTK_WIDGETS_EXPORT ctkThumbnailListWidgetPrivate : public Ui_ctkThumbnailListWidget
+{
+public:
+  ctkThumbnailListWidgetPrivate(ctkThumbnailListWidget* parent);
+
+  /// Initialize
+  void init();
+
+  void clearAllThumbnails();
+
+  int CurrentThumbnail;
+  int ThumbnailWidth;
+
+  ctkThumbnailListWidget* const q_ptr;
+  Q_DECLARE_PUBLIC(ctkThumbnailListWidget);
+};
+
+#endif

+ 0 - 14
Libs/Widgets/ctkThumbnailWidget.cpp

@@ -118,20 +118,6 @@ const QPixmap* ctkThumbnailWidget::pixmap()const
 }
 
 //----------------------------------------------------------------------------
-void ctkThumbnailWidget::setSourceIndex(QModelIndex index){
-    Q_D(ctkThumbnailWidget);
-
-    d->SourceIndex = index;
-}
-
-//----------------------------------------------------------------------------
-QModelIndex ctkThumbnailWidget::sourceIndex() const{
-    Q_D(const ctkThumbnailWidget);
-
-    return d->SourceIndex;
-}
-
-//----------------------------------------------------------------------------
 void ctkThumbnailWidget::setSelected(bool flag){
     Q_D(ctkThumbnailWidget);
 

+ 1 - 3
Libs/Widgets/ctkThumbnailWidget.h

@@ -34,6 +34,7 @@ class CTK_WIDGETS_EXPORT ctkThumbnailWidget : public QWidget
   Q_OBJECT
   Q_PROPERTY(QString text READ text WRITE setText)
   Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
+  Q_PROPERTY(bool selected READ isSelected WRITE setSelected)
 public:
   typedef QWidget Superclass;
   explicit ctkThumbnailWidget(QWidget* parent=0);
@@ -48,9 +49,6 @@ public:
   void setSelected(bool selected);
   bool isSelected();
 
-  void setSourceIndex(QModelIndex index);
-  QModelIndex sourceIndex() const;
-
 protected:
   QScopedPointer<ctkThumbnailWidgetPrivate> d_ptr;