Переглянути джерело

Add textPosition and selectedColor to ctkThumbnailWidget

Julien Finet 13 роки тому
батько
коміт
08c9fbf025

+ 8 - 20
Libs/Widgets/Resources/UI/ctkThumbnailWidget.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>128</width>
-    <height>158</height>
+    <width>141</width>
+    <height>133</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -16,34 +16,22 @@
   <property name="styleSheet">
    <string notr="true">background-color:white</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,1">
-   <property name="spacing">
-    <number>0</number>
-   </property>
+  <layout class="QGridLayout" name="gridLayout" rowstretch="0,1" columnstretch="0,1">
    <property name="margin">
     <number>4</number>
    </property>
-   <item>
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <item row="0" column="1">
     <widget class="QLabel" name="TextLabel">
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>24</height>
-      </size>
-     </property>
      <property name="alignment">
       <set>Qt::AlignCenter</set>
      </property>
     </widget>
    </item>
-   <item>
+   <item row="1" column="1">
     <widget class="QLabel" name="PixmapLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Ignored" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
      <property name="alignment">
       <set>Qt::AlignCenter</set>
      </property>

+ 2 - 0
Libs/Widgets/Testing/Cpp/ctkThumbnailWidgetTest1.cpp

@@ -61,6 +61,8 @@ int ctkThumbnailWidgetTest1( int argc, char * argv [] )
               << widget.pixmap() << std::endl;
     return EXIT_FAILURE;
     }
+  widget.setTextPosition(Qt::AlignRight);
+  widget.setTextPosition(Qt::AlignBottom);
 
   widget.show();
 

+ 107 - 22
Libs/Widgets/ctkThumbnailWidget.cpp

@@ -42,8 +42,9 @@ public:
     // Constructor
     ctkThumbnailWidgetPrivate(ctkThumbnailWidget* parent);
 
+    Qt::Alignment TextPosition;
     bool SelectedFlag;
-    QColor BackgroundColor;
+    QColor SelectedColor;
     QModelIndex SourceIndex;
     QPixmap OriginalThumbnail;
 
@@ -55,18 +56,22 @@ public:
 // ctkThumbnailWidgetPrivate methods
 
 //----------------------------------------------------------------------------
-ctkThumbnailWidgetPrivate::ctkThumbnailWidgetPrivate(ctkThumbnailWidget* parent): q_ptr(parent){
-    Q_Q(ctkThumbnailWidget);
+ctkThumbnailWidgetPrivate::ctkThumbnailWidgetPrivate(ctkThumbnailWidget* parent)
+  : q_ptr(parent)
+{
+  Q_Q(ctkThumbnailWidget);
 
-    this->SelectedFlag = false;
-    this->BackgroundColor = q->palette().color(QPalette::Highlight);
+  this->SelectedFlag = false;
+  this->SelectedColor = q->palette().color(QPalette::Highlight);
+  this->TextPosition = Qt::AlignTop | Qt::AlignHCenter;
 }
 
 //----------------------------------------------------------------------------
-void ctkThumbnailWidgetPrivate::updateThumbnail(){
-    this->PixmapLabel->setPixmap(
-        this->OriginalThumbnail.isNull() ? QPixmap() :
-            this->OriginalThumbnail.scaledToWidth(this->PixmapLabel->width()));
+void ctkThumbnailWidgetPrivate::updateThumbnail()
+{
+  this->PixmapLabel->setPixmap(
+    this->OriginalThumbnail.isNull() ? QPixmap() :
+      this->OriginalThumbnail.scaledToWidth(this->PixmapLabel->width()));
 }
 
 //----------------------------------------------------------------------------
@@ -80,6 +85,7 @@ ctkThumbnailWidget::ctkThumbnailWidget(QWidget* parentWidget)
   Q_D(ctkThumbnailWidget);
 
   d->setupUi(this);
+  this->setTextPosition(Qt::AlignTop | Qt::AlignHCenter);
 }
 
 //----------------------------------------------------------------------------
@@ -103,6 +109,67 @@ QString ctkThumbnailWidget::text()const
 }
 
 //----------------------------------------------------------------------------
+void ctkThumbnailWidget::setTextPosition(const Qt::Alignment& position)
+{
+  Q_D(ctkThumbnailWidget);
+  d->TextPosition = position;
+  int textIndex = -1;
+  for (textIndex = 0; textIndex < this->layout()->count(); ++textIndex)
+    {
+    if (this->layout()->itemAt(textIndex)->widget() == d->TextLabel)
+      {
+      break;
+      }
+    }
+  if (textIndex > -1 && textIndex < this->layout()->count())
+    {
+    this->layout()->takeAt(textIndex);
+    }
+  int row = 1;
+  int col = 1;
+  QGridLayout* gridLayout = qobject_cast<QGridLayout*>(this->layout());
+  if (position & Qt::AlignTop)
+    {
+    row = 0;
+    }
+  else if (position &Qt::AlignBottom)
+    {
+    row = 2;
+    }
+  else
+    {
+    row = 1;
+    }
+  if (position & Qt::AlignLeft)
+    {
+    col = 0;
+    }
+  else if (position & Qt::AlignRight)
+    {
+    col = 2;
+    }
+  else
+    {
+    col = 1;
+    }
+  if (row == 1 && col == 1)
+    {
+    d->TextLabel->setVisible(false);
+    }
+  else
+    {
+    gridLayout->addWidget(d->TextLabel,row, col);
+    }
+}
+
+//----------------------------------------------------------------------------
+Qt::Alignment ctkThumbnailWidget::textPosition()const
+{
+  Q_D(const ctkThumbnailWidget);
+  return d->TextPosition;
+}
+
+//----------------------------------------------------------------------------
 void ctkThumbnailWidget::setPixmap(const QPixmap &pixmap)
 {
   Q_D(ctkThumbnailWidget);
@@ -120,28 +187,46 @@ const QPixmap* ctkThumbnailWidget::pixmap()const
 }
 
 //----------------------------------------------------------------------------
-void ctkThumbnailWidget::setSelected(bool flag){
-    Q_D(ctkThumbnailWidget);
+void ctkThumbnailWidget::setSelected(bool flag)
+{
+  Q_D(ctkThumbnailWidget);
 
-    if(flag)
+  if(flag && d->SelectedColor.isValid())
     {
-        QPalette p(this->palette());
-        p.setColor(QPalette::Window, d->BackgroundColor);
-        this->setPalette(p);
-        this->setAutoFillBackground(true);
+    QPalette p(this->palette());
+    p.setColor(QPalette::Window, d->SelectedColor);
+    this->setPalette(p);
+    this->setAutoFillBackground(true);
     }
-    else
+  else
     {
-        this->setAutoFillBackground(false);
+    this->setAutoFillBackground(false);
     }
 
-    d->SelectedFlag = flag;
+  d->SelectedFlag = flag;
 }
 
 //----------------------------------------------------------------------------
-bool ctkThumbnailWidget::isSelected(){
-    Q_D(ctkThumbnailWidget);
-    return d->SelectedFlag;
+bool ctkThumbnailWidget::isSelected()const
+{
+  Q_D(const ctkThumbnailWidget);
+  return d->SelectedFlag;
+}
+
+//----------------------------------------------------------------------------
+void ctkThumbnailWidget::setSelectedColor(const QColor& color)
+{
+  Q_D(ctkThumbnailWidget);
+  d->SelectedColor = color;
+  // repaint if the color has changed.
+  this->setSelected(this->isSelected());
+}
+
+//----------------------------------------------------------------------------
+QColor ctkThumbnailWidget::selectedColor()const
+{
+  Q_D(const ctkThumbnailWidget);
+  return d->SelectedColor;
 }
 
 //----------------------------------------------------------------------------

+ 11 - 1
Libs/Widgets/ctkThumbnailWidget.h

@@ -33,8 +33,12 @@ class CTK_WIDGETS_EXPORT ctkThumbnailWidget : public QWidget
 {
   Q_OBJECT
   Q_PROPERTY(QString text READ text WRITE setText)
+  /// Position of the text relative to the pixmap.
+  /// Qt::AlignTop | Qt::AlignHCenter by default.
+  Q_PROPERTY(Qt::Alignment textPosition READ textPosition WRITE setTextPosition)
   Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
   Q_PROPERTY(bool selected READ isSelected WRITE setSelected)
+  Q_PROPERTY(QColor selectedColor READ selectedColor WRITE setSelectedColor)
 public:
   typedef QWidget Superclass;
   explicit ctkThumbnailWidget(QWidget* parent=0);
@@ -43,11 +47,17 @@ public:
   void setText(const QString& text);
   QString text()const;
 
+  void setTextPosition(const Qt::Alignment& alignment);
+  Qt::Alignment textPosition()const;
+
   void setPixmap(const QPixmap& pixmap);
   const QPixmap* pixmap()const;
 
   void setSelected(bool selected);
-  bool isSelected();
+  bool isSelected()const;
+
+  void setSelectedColor(const QColor& color);
+  QColor selectedColor()const;
 
 protected:
   QScopedPointer<ctkThumbnailWidgetPrivate> d_ptr;