[vlc-commits] Qt: implement the color selector button

Jean-Baptiste Kempf git at videolan.org
Mon Oct 31 00:42:32 CET 2011


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Sun Oct 30 00:08:39 2011 +0200| [c35da63efe19a485945d8f793a5178b4a652e9fb] | committer: Jean-Baptiste Kempf

Qt: implement the color selector button

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c35da63efe19a485945d8f793a5178b4a652e9fb
---

 modules/gui/qt4/components/preferences_widgets.cpp |   77 +++++++++++++++++++-
 modules/gui/qt4/components/preferences_widgets.hpp |   30 +++++++--
 2 files changed, 99 insertions(+), 8 deletions(-)

diff --git a/modules/gui/qt4/components/preferences_widgets.cpp b/modules/gui/qt4/components/preferences_widgets.cpp
index 7415094..f26faf3 100644
--- a/modules/gui/qt4/components/preferences_widgets.cpp
+++ b/modules/gui/qt4/components/preferences_widgets.cpp
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * preferences_widgets.cpp : Widgets for preferences displays
  ****************************************************************************
- * Copyright (C) 2006-2007 the VideoLAN team
+ * Copyright (C) 2006-2011 the VideoLAN team
  * $Id$
  *
  * Authors: Clément Stenac <zorglub at videolan.org>
@@ -52,6 +52,7 @@
 #include <QSignalMapper>
 #include <QDialogButtonBox>
 #include <QKeyEvent>
+#include <QColorDialog>
 
 #define MINWIDTH_BOX 90
 #define LAST_COLUMN 10
@@ -113,6 +114,9 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
             p_control = new StringListConfigControl( p_this, p_item,
                                             parent, l, line );
         break;
+    case CONFIG_ITEM_RGB:
+        p_control = new ColorConfigControl( p_this, p_item, parent, l, line );
+        break;
     case CONFIG_ITEM_INTEGER:
         if( p_item->i_list )
             p_control = new IntegerListConfigControl( p_this, p_item,
@@ -167,7 +171,7 @@ InterfacePreviewWidget::InterfacePreviewWidget ( QWidget *parent ) : QLabel( par
 
 void InterfacePreviewWidget::setNormalPreview( bool b_minimal )
 {
-    setPreview( ( b_minimal )?MINIMAL:COMPLETE );
+    setPreview( ( b_minimal ) ? MINIMAL : COMPLETE );
 }
 
 void InterfacePreviewWidget::setPreview( enum_style e_style )
@@ -193,7 +197,6 @@ void InterfacePreviewWidget::setPreview( enum_style e_style )
 }
 
 
-
 /**************************************************************************
  * String-based controls
  *************************************************************************/
@@ -1113,6 +1116,74 @@ int BoolConfigControl::getValue() const
     return checkbox->isChecked();
 }
 
+/************* Color *************/
+ColorConfigControl::ColorConfigControl( vlc_object_t *_p_this,
+                                            module_config_t *_p_item,
+                                            QWidget *_parent, QGridLayout *l,
+                                            int line ) :
+                           VIntConfigControl( _p_this, _p_item, _parent )
+{
+    label = new QLabel;
+    color_but = new QToolButton;
+    finish();
+
+    if( !l )
+    {
+        QHBoxLayout *layout = new QHBoxLayout();
+        layout->addWidget( label, 0 ); layout->addWidget( color_but, LAST_COLUMN );
+        widget->setLayout( layout );
+    }
+    else
+    {
+        l->addWidget( label, line, 0 );
+        l->addWidget( color_but, line, LAST_COLUMN, Qt::AlignRight );
+    }
+}
+
+ColorConfigControl::ColorConfigControl( vlc_object_t *_p_this,
+                                            module_config_t *_p_item,
+                                            QLabel *_label, QAbstractButton *_color ):
+                                      VIntConfigControl( _p_this, _p_item )
+{
+    label = _label;
+    color_but = _color;
+    finish();
+}
+
+void ColorConfigControl::finish()
+{
+    i_color = p_item->value.i;
+
+    color_px = new QPixmap( 34, 20 );
+    color_px->fill( QColor( i_color ) );
+    color_but->setIcon( QIcon( *color_px ) );
+    color_but->setMinimumWidth( 40 );
+
+    label->setText( qtr(p_item->psz_text) );
+    if( p_item->psz_longtext )
+    {
+        label->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );
+        color_but->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );
+    }
+
+    BUTTONACT( color_but, selectColor() );
+}
+
+int ColorConfigControl::getValue() const
+{
+    return i_color;
+}
+
+void ColorConfigControl::selectColor()
+{
+    QColor color = QColorDialog::getColor( QColor( i_color ) );
+    i_color = (color.red() << 16) + (color.green() << 8) + color.blue();
+
+    color_px->fill( QColor( i_color ) );
+    color_but->setIcon( QIcon( *color_px ) );
+}
+
+
 /**************************************************************************
  * Float-based controls
  *************************************************************************/
diff --git a/modules/gui/qt4/components/preferences_widgets.hpp b/modules/gui/qt4/components/preferences_widgets.hpp
index d629e65..9006152 100644
--- a/modules/gui/qt4/components/preferences_widgets.hpp
+++ b/modules/gui/qt4/components/preferences_widgets.hpp
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * preferences_widgets.hpp : Widgets for preferences panels
  ****************************************************************************
- * Copyright (C) 2006-2007 the VideoLAN team
+ * Copyright (C) 2006-2011 the VideoLAN team
  * $Id$
  *
  * Authors: Clément Stenac <zorglub at videolan.org>
@@ -75,7 +75,7 @@ public slots:
  * Variable controls
  *******************************************************/
 
-class   ConfigControl : public QObject
+class ConfigControl : public QObject
 {
     Q_OBJECT
 public:
@@ -167,10 +167,10 @@ public:
                                 QLabel *, QSlider * );
     virtual int getValue() const;
 protected:
-         QSlider *slider;
+    QSlider *slider;
 private:
-         QLabel *label;
-         void finish();
+    QLabel *label;
+    void finish();
 };
 
 class IntegerListConfigControl : public VIntConfigControl
@@ -209,6 +209,26 @@ private:
     void finish();
 };
 
+class ColorConfigControl : public VIntConfigControl
+{
+Q_OBJECT
+public:
+    ColorConfigControl( vlc_object_t *, module_config_t *, QWidget *,
+                        QGridLayout *, int );
+    ColorConfigControl( vlc_object_t *, module_config_t *,
+                        QLabel *, QAbstractButton* );
+    virtual ~ColorConfigControl() { delete color_px; }
+    virtual int getValue() const;
+private:
+    QLabel *label;
+    QAbstractButton *color_but;
+    QPixmap *color_px;
+    int i_color;
+    void finish();
+private slots:
+    void selectColor();
+};
+
 /*******************************************************
  * Float-based controls
  *******************************************************/



More information about the vlc-commits mailing list