[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