From 053d5bb66c6ac58ec0810b13d2cefb797a57d307 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20Stenac?= Date: Thu, 1 Jun 2006 20:42:03 +0000 Subject: [PATCH] Skeleton for preferences widgets --- modules/gui/qt4/Modules.am | 5 + .../qt4/components/preferences_widgets.cpp | 150 ++++++++++++++++ .../qt4/components/preferences_widgets.hpp | 168 ++++++++++++++++++ 3 files changed, 323 insertions(+) create mode 100644 modules/gui/qt4/components/preferences_widgets.cpp create mode 100644 modules/gui/qt4/components/preferences_widgets.hpp diff --git a/modules/gui/qt4/Modules.am b/modules/gui/qt4/Modules.am index d811dd05bc..2d72f7b7b7 100644 --- a/modules/gui/qt4/Modules.am +++ b/modules/gui/qt4/Modules.am @@ -1,3 +1,4 @@ +# vim:syntax=make ## Howto # For each Q_OBJECT: # - Add it without extension to TOMOC @@ -19,6 +20,7 @@ TOMOC = main_interface \ dialogs/playlist \ dialogs/streaminfo \ components/infopanels \ + components/preferences_widgets \ util/input_slider MOCCPP := $(TOMOC:%=%.moc.cpp) @@ -29,6 +31,7 @@ nodist_SOURCES_qt4 = \ dialogs/playlist.moc.cpp \ dialogs/streaminfo.moc.cpp \ components/infopanels.moc.cpp \ + components/preferences_widgets.moc.cpp \ util/input_slider.moc.cpp if ENABLE_QT4 @@ -55,6 +58,7 @@ SOURCES_qt4 = qt4.cpp \ dialogs/playlist.cpp \ dialogs/streaminfo.cpp \ components/infopanels.cpp \ + components/preferences_widgets.cpp \ util/input_slider.cpp $(NULL) @@ -66,6 +70,7 @@ EXTRA_DIST += \ dialogs/playlist.hpp \ dialogs/streaminfo.hpp \ components/infopanels.hpp \ + components/preferences_widgets.hpp \ util/input_slider.hpp \ ui/input_stats.ui diff --git a/modules/gui/qt4/components/preferences_widgets.cpp b/modules/gui/qt4/components/preferences_widgets.cpp new file mode 100644 index 0000000000..ba84e3c332 --- /dev/null +++ b/modules/gui/qt4/components/preferences_widgets.cpp @@ -0,0 +1,150 @@ +/***************************************************************************** + * preferences_widgets.cpp : Widgets for preferences displays + **************************************************************************** + * Copyright (C) 2000-2005 the VideoLAN team + * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $ + * + * Authors: Clément Stenac + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#include "components/preferences_widgets.hpp" + +#include +#include +#include +#include +#include +#include + +ConfigControl::ConfigControl( vlc_object_t *_p_this, module_config_t *p_item, + QWidget *_parent ) : QWidget( _parent ), + p_this( _p_this ), _name( p_item->psz_name ) +{ +} + +ConfigControl::~ConfigControl() {} + +ConfigControl *ConfigControl::createControl( vlc_object_t *p_this, + module_config_t *p_item, QWidget *parent ) +{ + ConfigControl *p_control = NULL; + if( p_item->psz_current ) return NULL; + + switch( p_item->i_type ) + { + case CONFIG_ITEM_MODULE: + p_control = new ModuleConfigControl( p_this, p_item, parent, false ); + break; + case CONFIG_ITEM_MODULE_CAT: + p_control = new ModuleConfigControl( p_this, p_item, parent, true ); + break; + case CONFIG_ITEM_STRING: + if( !p_item->i_list ) + p_control = new StringConfigControl( p_this, p_item, parent,false ); + else + abort(); + break; + default: + break; + } + return p_control; +} + +/************************************************************************** + * String-based controls + *************************************************************************/ + +/*********** String **************/ +StringConfigControl::StringConfigControl( vlc_object_t *_p_this, + module_config_t *p_item, QWidget *_parent, bool pwd ) + : VStringConfigControl( _p_this, p_item, _parent ) +{ + QLabel *label = new QLabel( p_item->psz_text ); + text = new QLineEdit( p_item->psz_value ); + text->setToolTip( p_item->psz_longtext ); + label->setToolTip( p_item->psz_longtext ); + + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget( label ); layout->addWidget( text ); + setLayout( layout ); +} + +StringConfigControl::~StringConfigControl() {} + +QString StringConfigControl::getValue() { return text->text(); }; + + +/********* Module **********/ +ModuleConfigControl::ModuleConfigControl( vlc_object_t *_p_this, + module_config_t *p_item, QWidget *_parent, + bool bycat ) : VStringConfigControl( _p_this, p_item, _parent ) +{ + vlc_list_t *p_list; + module_t *p_parser; + + QLabel *label = new QLabel( p_item->psz_text ); + combo = new QComboBox(); + combo->setEditable( false ); + + /* build a list of available modules */ + p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); + combo->addItem( "Default" ); + for( int i_index = 0; i_index < p_list->i_count; i_index++ ) + { + p_parser = (module_t *)p_list->p_values[i_index].p_object ; + + if( bycat ) + { + if( !strcmp( p_parser->psz_object_name, "main" ) ) continue; + + module_config_t *p_config = p_parser->p_config; + if( p_config ) do + { + /* Hack: required subcategory is stored in i_min */ + if( p_config->i_type == CONFIG_SUBCATEGORY && + p_config->i_value == p_item->i_min ) + combo->addItem( p_parser->psz_longname, + QVariant( p_parser->psz_object_name ) ); + if( p_item->psz_value && !strcmp( p_item->psz_value, + p_parser->psz_object_name) ) + combo->setCurrentIndex( combo->count() - 1 ); + } while( p_config->i_type != CONFIG_HINT_END && p_config++ ); + } + else if( !strcmp( p_parser->psz_capability, p_item->psz_type ) ) + { + combo->addItem( p_parser->psz_longname, + QVariant( p_parser->psz_object_name ) ); + if( p_item->psz_value && !strcmp( p_item->psz_value, + p_parser->psz_object_name) ) + combo->setCurrentIndex( combo->count() - 1 ); + } + } + vlc_list_release( p_list ); + combo->setToolTip( p_item->psz_longtext ); + label->setToolTip( p_item->psz_longtext ); + + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget( label ); layout->addWidget( combo ); + setLayout( layout ); +} + +ModuleConfigControl::~ModuleConfigControl() {}; + +QString ModuleConfigControl::getValue() +{ + return combo->itemData( combo->currentIndex() ).toString(); +} diff --git a/modules/gui/qt4/components/preferences_widgets.hpp b/modules/gui/qt4/components/preferences_widgets.hpp new file mode 100644 index 0000000000..bdaf843cb7 --- /dev/null +++ b/modules/gui/qt4/components/preferences_widgets.hpp @@ -0,0 +1,168 @@ +/***************************************************************************** + * preferences_widgets.hpp : Widgets for preferences panels + **************************************************************************** + * Copyright (C) 2000-2005 the VideoLAN team + * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $ + * + * Authors: Clément Stenac + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef _INFOPANELS_H_ +#define _INFOPANELS_H_ +#include +#include +#include "ui/input_stats.h" + +class QSpinBox; +class QLineEdit; +class QString; +class QComboBox; +class QCheckBox; + +class ConfigControl : public QWidget +{ + Q_OBJECT; +public: + ConfigControl( vlc_object_t *, module_config_t *, QWidget * ); + virtual ~ConfigControl(); + QString getName() { return _name; } + bool getAdvanced() { return _advanced; } + + static ConfigControl * createControl( vlc_object_t*, + module_config_t*,QWidget* ); +protected: + vlc_object_t *p_this; + QString _name; + bool _advanced; +signals: + void Updated(); +}; + +/******************************************************* + * Integer-based controls + *******************************************************/ +class VIntConfigControl : public ConfigControl +{ +public: + VIntConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) : + ConfigControl(a,b,c) {}; + virtual ~VIntConfigControl() {}; + virtual int getValue() = 0; +}; + +#if 0 +class IntegerConfigControl : public VIntConfigControl +{ +public: + IntegerConfigControl( vlc_object_t *, module_config_t *, QWidget * ); + virtual ~IntegerConfigControl(); + virtual int getValue(); +private: + QSpinBox *spin; +}; + +class BoolConfigControl : public VIntConfigControl +{ +public: + IntConfigControl( vlc_object_t *, module_config_t *, QWidget * ); + virtual ~IntConfigControl(); + virtual int getValue(); +private: + wxCheckBox *checkbox; +}; +#endif + +/******************************************************* + * Float-based controls + *******************************************************/ +class VFloatConfigControl : public ConfigControl +{ +public: + VFloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) : + ConfigControl(a,b,c) {}; + virtual ~VFloatConfigControl() {}; + virtual float getValue() = 0; +}; + +#if 0 +class FloatConfigControl : public VFloatConfigControl +{ +public: + FloatConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) : + ConfigControl(a,b,c) {}; + virtual ~FloatConfigControl() {}; + virtual float getValue(); +private: + QDoubleSpinBox *spin; +}; +#endif + +/******************************************************* + * String-based controls + *******************************************************/ +class VStringConfigControl : public ConfigControl +{ +public: + VStringConfigControl( vlc_object_t *a, module_config_t *b, QWidget *c ) : + ConfigControl(a,b,c) {}; + virtual ~VStringConfigControl() {}; + virtual QString getValue() = 0; +}; + +class StringConfigControl : public VStringConfigControl +{ +public: + StringConfigControl( vlc_object_t *, module_config_t *, QWidget *, + bool pwd ); + virtual ~StringConfigControl(); + virtual QString getValue(); +private: + QLineEdit *text; +}; + +class ModuleConfigControl : public VStringConfigControl +{ +public: + ModuleConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool + bycat ); + virtual ~ModuleConfigControl(); + virtual QString getValue(); +private: + QComboBox *combo; +}; +#if 0 +struct ModuleCheckBox { + QCheckBox *checkbox; + QString module; +}; + +class ModuleListConfigControl : public ConfigControl +{ +public: + StringConfigControl( vlc_object_t *, module_config_t *, QWidget *, bool + bycat ); + virtual ~StringConfigControl(); + virtual QString getValue(); +private: + std::vector checkboxes; + QLineEdit *text; +private slot: + void OnUpdate(); +}; +#endif + +#endif -- 2.39.5