]> git.sesse.net Git - vlc/commitdiff
Qt: implement the color selector button
authorJean-Baptiste Kempf <jb@videolan.org>
Sat, 29 Oct 2011 22:08:39 +0000 (00:08 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Sun, 30 Oct 2011 23:42:19 +0000 (00:42 +0100)
modules/gui/qt4/components/preferences_widgets.cpp
modules/gui/qt4/components/preferences_widgets.hpp

index 74150946c6cc09a93ee79c85a88a3dd013db0258..f26faf3a8ef919e8a5821a757a02238ab99541c9 100644 (file)
@@ -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@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
  *************************************************************************/
index d629e65f6dff804b37efea0059b4e5461daa340e..9006152051dea2fd5f11e2f6b89216dc8d56f130 100644 (file)
@@ -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@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
  *******************************************************/