dialogs_provider \
input_manager \
dialogs/playlist \
+ dialogs/prefs_dialog \
dialogs/streaminfo \
components/infopanels \
components/preferences_widgets \
+ components/preferences \
util/input_slider
MOCCPP := $(TOMOC:%=%.moc.cpp)
input_manager.moc.cpp \
dialogs/playlist.moc.cpp \
dialogs/streaminfo.moc.cpp \
+ dialogs/prefs_dialog.moc.cpp \
components/infopanels.moc.cpp \
components/preferences_widgets.moc.cpp \
+ components/preferences.moc.cpp \
util/input_slider.moc.cpp
if ENABLE_QT4
dialogs_provider.cpp \
input_manager.cpp \
dialogs/playlist.cpp \
+ dialogs/prefs_dialog.cpp \
dialogs/streaminfo.cpp \
components/infopanels.cpp \
components/preferences_widgets.cpp \
+ components/preferences.cpp \
util/input_slider.cpp
$(NULL)
input_manager.hpp \
dialogs/playlist.hpp \
dialogs/streaminfo.hpp \
+ dialogs/prefs_dialog.hpp \
components/infopanels.hpp \
components/preferences_widgets.hpp \
+ components/preferences.hpp \
util/input_slider.hpp \
- ui/input_stats.ui
-
+ ui/input_stats.ui \
+ pixmaps/advanced.xpm \
+ pixmaps/audio.xpm \
+ pixmaps/codec.xpm \
+ pixmaps/intf.xpm \
+ pixmaps/type_net.xpm \
+ pixmaps/type_playlist.xpm \
+ pixmaps/video.xpm
--- /dev/null
+/*****************************************************************************
+ * preferences_tree.cpp : Tree of modules for preferences
+ ****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * 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.hpp"
+#include "components/preferences_widgets.hpp"
+#include <vlc_config_cat.h>
+
+#include "pixmaps/audio.xpm"
+#include "pixmaps/video.xpm"
+#include "pixmaps/type_net.xpm"
+#include "pixmaps/type_playlist.xpm"
+#include "pixmaps/advanced.xpm"
+#include "pixmaps/codec.xpm"
+#include "pixmaps/intf.xpm"
+
+#include <QLabel>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+#include <QVariant>
+#include <QString>
+#include <QFont>
+#include <QGroupBox>
+#include <QScrollArea>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+
+#define ITEM_HEIGHT 25
+
+/*********************************************************************
+ * The Tree
+ *********************************************************************/
+PrefsTree::PrefsTree( intf_thread_t *_p_intf, QWidget *_parent ) :
+ QTreeWidget( _parent ), p_intf( _p_intf )
+{
+ module_t *p_module;
+ vlc_list_t *p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE,
+ FIND_ANYWHERE );
+ if( !p_list ) return;
+
+ setColumnCount( 1 );
+ setIconSize( QSize( ITEM_HEIGHT,ITEM_HEIGHT ) );
+
+#define BI( a,b) QIcon a##_icon = QIcon( QPixmap( b##_xpm ))
+ BI( audio, audio );
+ BI( video, video );
+ BI( input, codec );
+ BI( sout, type_net );
+ BI( advanced, advanced );
+ BI( playlist, type_playlist );
+ BI( interface, intf );
+#undef BI
+
+ /* Build the tree for the main module */
+ int i_index;
+ for( i_index = 0; i_index < p_list->i_count; i_index++ )
+ {
+ p_module = (module_t *)p_list->p_values[i_index].p_object;
+ if( !strcmp( p_module->psz_object_name, "main" ) )
+ break;
+ }
+ if( i_index < p_list->i_count )
+ {
+ module_config_t *p_item = p_module->p_config;
+ PrefsItemData *data = NULL;
+ QTreeWidgetItem *current_item = NULL;
+ if( p_item ) do
+ {
+ char *psz_help;
+ QIcon icon;
+ switch( p_item->i_type )
+ {
+ case CONFIG_CATEGORY:
+ if( p_item->i_value == -1 ) break;
+ data = new PrefsItemData();
+ data->name = QString( config_CategoryNameGet
+ ( p_item->i_value ) );
+ psz_help = config_CategoryHelpGet( p_item->i_value );
+ if( psz_help )
+ data->help = QString( psz_help );
+ else
+ data->help.clear();
+ data->i_type = TYPE_CATEGORY;
+ data->i_object_id = p_item->i_value;
+
+ switch( p_item->i_value )
+ {
+#define CI(a,b) case a: icon = b##_icon;break
+ CI( CAT_AUDIO, audio );
+ CI( CAT_VIDEO, video );
+ CI( CAT_INPUT, input );
+ CI( CAT_SOUT, sout );
+ CI( CAT_ADVANCED, advanced );
+ CI( CAT_PLAYLIST, playlist );
+ CI( CAT_INTERFACE, interface );
+#undef CI
+ }
+
+ current_item = new QTreeWidgetItem();
+ current_item->setText( 0, data->name );
+ current_item->setIcon( 0 , icon );
+ current_item->setData( 0, Qt::UserRole,
+ qVariantFromValue( data ) );
+ addTopLevelItem( current_item );
+ //fprintf( stderr, "Adding %s\n", current_item->text(0).toLatin1().data() );
+ break;
+ case CONFIG_SUBCATEGORY:
+ if( p_item->i_value == -1 ) break;
+ if( data &&
+ ( p_item->i_value == SUBCAT_VIDEO_GENERAL ||
+ p_item->i_value == SUBCAT_ADVANCED_MISC ||
+ p_item->i_value == SUBCAT_INPUT_GENERAL ||
+ p_item->i_value == SUBCAT_INTERFACE_GENERAL ||
+ p_item->i_value == SUBCAT_SOUT_GENERAL||
+ p_item->i_value == SUBCAT_PLAYLIST_GENERAL||
+ p_item->i_value == SUBCAT_AUDIO_GENERAL ) )
+ {
+ // Data still contains the correct thing
+ data->i_type = TYPE_CATSUBCAT;
+ data->i_subcat_id = p_item->i_value;
+ data->name = QString( config_CategoryNameGet(
+ p_item->i_value ) );
+ psz_help = config_CategoryHelpGet( p_item->i_value );
+ if( psz_help )
+ data->help = QString( psz_help );
+ else
+ data->help.clear();
+ current_item->setData( 0, Qt::UserRole,
+ QVariant::fromValue( data ) );
+ continue;
+ }
+ data = new PrefsItemData();
+ data->name = QString( config_CategoryNameGet( p_item->i_value));
+ psz_help = config_CategoryHelpGet( p_item->i_value );
+ if( psz_help )
+ data->help = QString( psz_help );
+ else
+ data->help.clear();
+ data->i_type = TYPE_SUBCATEGORY;
+ data->i_object_id = p_item->i_value;
+
+ assert( current_item );
+
+ /* TODO : Choose the image */
+ QTreeWidgetItem *subcat_item = new QTreeWidgetItem();
+ subcat_item->setText( 0, data->name );
+ //item->setIcon( 0 , XXX );
+ subcat_item->setData( 0, Qt::UserRole,
+ qVariantFromValue(data) );
+ subcat_item->setSizeHint( 0, QSize( -1, ITEM_HEIGHT ) );
+ current_item->addChild( subcat_item );
+ break;
+ }
+ } while( p_item->i_type != CONFIG_HINT_END && p_item++ );
+ }
+
+ /* Build the tree of plugins */
+ for( int i_index = 0; i_index < p_list->i_count; i_index++ )
+ {
+ module_config_t *p_item;
+ int i_subcategory = -1, i_category = -1, i_options = 0;
+ p_module = (module_t *)p_list->p_values[i_index].p_object;
+
+ // Main module excluded
+ if( !strcmp( p_module->psz_object_name, "main" ) ) continue;
+
+ /* Exclude empty plugins (submodules don't have config options, they
+ * are stored in the parent module) */
+ if( p_module->b_submodule ) continue;
+
+ p_item = p_module->p_config;
+ if( !p_item ) continue;
+
+ do {
+ if( p_item->i_type == CONFIG_CATEGORY )
+ i_category = p_item->i_value;
+ else if( p_item->i_type == CONFIG_SUBCATEGORY )
+ i_subcategory = p_item->i_value;
+ if( p_item->i_type & CONFIG_ITEM )
+ i_options++;
+
+ if( i_options > 0 && i_category >= 0 && i_subcategory >= 0 )
+ break;
+ } while( p_item->i_type != CONFIG_HINT_END && p_item++ );
+
+ if( !i_options ) continue; // Nothing to display
+
+ // Locate the category item;
+ QTreeWidgetItem *subcat_item = NULL;
+ bool b_found = false;
+ for( int i_cat_index = 0 ; i_cat_index < topLevelItemCount();
+ i_cat_index++ )
+ {
+ QTreeWidgetItem *cat_item = topLevelItem( i_cat_index );
+ PrefsItemData *data = cat_item->data( 0, Qt::UserRole ).
+ value<PrefsItemData *>();
+ if( data->i_object_id == i_category )
+ {
+ for( int i_sc_index = 0; i_sc_index < cat_item->childCount();
+ i_sc_index++ )
+ {
+ subcat_item = cat_item->child( i_sc_index );
+ PrefsItemData *sc_data = subcat_item->data(0, Qt::UserRole).
+ value<PrefsItemData *>();
+ if( sc_data && sc_data->i_object_id == i_subcategory )
+ {
+ b_found = true;
+ break;
+ }
+ }
+ if( !b_found )
+ {
+ subcat_item = cat_item;
+ b_found = true;
+ }
+ break;
+ }
+ }
+ if( !b_found ) continue;
+
+ PrefsItemData *module_data = new PrefsItemData();
+ module_data->b_submodule = p_module->b_submodule;
+ module_data->i_type = TYPE_MODULE;
+ module_data->i_object_id = p_module->b_submodule ?
+ ((module_t *)p_module->p_parent)->i_object_id :
+ p_module->i_object_id;
+ module_data->help.clear();
+ // TODO image
+ QTreeWidgetItem *module_item = new QTreeWidgetItem();
+ module_item->setText( 0, p_module->psz_shortname ?
+ p_module->psz_shortname : p_module->psz_object_name );
+ //item->setIcon( 0 , XXX );
+ module_item->setData( 0, Qt::UserRole,
+ QVariant::fromValue( module_data) );
+ module_item->setSizeHint( 0, QSize( -1, ITEM_HEIGHT ) );
+ subcat_item->addChild( module_item );
+ }
+
+ /* We got everything, just sort a bit */
+ sortItems( 0, Qt::AscendingOrder );
+
+ vlc_list_release( p_list );
+}
+
+PrefsTree::~PrefsTree() {}
+
+void PrefsTree::ApplyAll()
+{
+ DoAll( false );
+}
+
+void PrefsTree::CleanAll()
+{
+ DoAll( true );
+}
+
+/// \todo When cleaning, we should remove the panel ?
+void PrefsTree::DoAll( bool doclean )
+{
+ for( int i_cat_index = 0 ; i_cat_index < topLevelItemCount();
+ i_cat_index++ )
+ {
+ QTreeWidgetItem *cat_item = topLevelItem( i_cat_index );
+ for( int i_sc_index = 0; i_sc_index <= cat_item->childCount();
+ i_sc_index++ )
+ {
+ QTreeWidgetItem *sc_item = cat_item->child( i_sc_index );
+ for( int i_module = 0 ; i_module <= sc_item->childCount();
+ i_module++ )
+ {
+ PrefsItemData *data = sc_item->child( i_sc_index )->
+ data( 0, Qt::UserRole ).
+ value<PrefsItemData *>();
+ if( data->panel && doclean )
+ data->panel->Clean();
+ else if( data->panel )
+ data->panel->Apply();
+ }
+ }
+ }
+}
+
+
+/*********************************************************************
+ * The Panel
+ *********************************************************************/
+PrefsPanel::PrefsPanel( QWidget *_parent ) : QWidget( _parent )
+{}
+
+PrefsPanel::PrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
+ PrefsItemData * data ) :
+ QWidget( _parent ), p_intf( _p_intf )
+{
+ module_config_t *p_item;
+ module_t *p_module;
+ vlc_list_t *p_list = NULL;
+ global_layout = new QVBoxLayout();
+
+ if( data->i_type == TYPE_CATEGORY )
+ {
+ /* TODO */
+ return;
+ }
+ else if( data->i_type == TYPE_MODULE )
+ {
+ p_module = (module_t *) vlc_object_get( p_intf, data->i_object_id );
+ }
+ else
+ {
+ /* List the plugins */
+ int i_index;
+ vlc_bool_t b_found = VLC_FALSE;
+ p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+ if( !p_list ) return;
+
+ for( i_index = 0; i_index < p_list->i_count; i_index++ )
+ {
+ p_module = (module_t *)p_list->p_values[i_index].p_object;
+ if( !strcmp( p_module->psz_object_name, "main" ) )
+ {
+ b_found = VLC_TRUE;
+ break;
+ }
+ }
+ if( !p_module && !b_found )
+ {
+ msg_Warn( p_intf, "unable to create preferences (main not found)");
+ return;
+ }
+ }
+
+ if( p_module->b_submodule )
+ p_item = ((module_t *)p_module->p_parent)->p_config;
+ else
+ p_item = p_module->p_config;
+
+ if( data->i_type == TYPE_SUBCATEGORY || data->i_type == TYPE_CATSUBCAT )
+ {
+ do
+ {
+ if( p_item->i_type == CONFIG_SUBCATEGORY &&
+ ( data->i_type == TYPE_SUBCATEGORY &&
+ p_item->i_value == data->i_object_id ) ||
+ ( data->i_type == TYPE_CATSUBCAT &&
+ p_item->i_value == data->i_subcat_id ) )
+ {
+ break;
+ }
+ if( p_item->i_type == CONFIG_HINT_END ) break;
+ } while( p_item++ );
+ }
+
+ QString head;
+ if( data->i_type == TYPE_SUBCATEGORY || data->i_type == TYPE_CATSUBCAT )
+ {
+ head = QString( data->name );
+ p_item++; // Why that ?
+ }
+ else
+ head = QString( p_module->psz_longname );
+
+ QLabel *label = new QLabel( head, this );
+ QFont font = label->font();
+ font.setPointSize( font.pointSize() + 2 ); font.setBold( true );
+ label->setFont( font );
+ QLabel *help = new QLabel( data->help, this );
+ help->setWordWrap( true );
+
+ global_layout->addWidget( label );
+ global_layout->addWidget( help );
+
+ QGroupBox *box = NULL;
+ QVBoxLayout *boxlayout = NULL;
+
+ QScrollArea *scroller= new QScrollArea;
+ QWidget *scrolled_area = new QWidget;
+
+ QVBoxLayout *layout = new QVBoxLayout();
+
+ if( p_item ) do
+ {
+ if( ( ( data->i_type == TYPE_SUBCATEGORY &&
+ p_item->i_value != data->i_object_id ) ||
+ ( data->i_type == TYPE_CATSUBCAT &&
+ p_item->i_value != data->i_subcat_id ) ) &&
+ ( p_item->i_type == CONFIG_CATEGORY ||
+ p_item->i_type == CONFIG_SUBCATEGORY ) )
+ break;
+ if( p_item->b_internal == VLC_TRUE ) continue;
+
+ if( p_item->i_type == CONFIG_SECTION )
+ {
+ if( box )
+ {
+ box->setLayout( boxlayout );
+ layout->addWidget( box, 1 );
+ }
+ box = new QGroupBox( p_item->psz_text );
+ boxlayout = new QVBoxLayout();
+ }
+
+ ConfigControl *control = ConfigControl::createControl(
+ VLC_OBJECT( p_intf ), p_item,
+ NULL );
+ if( !control )
+ {
+ continue;
+ }
+ if( !box )
+ layout->addWidget( control );
+ else
+ boxlayout->addWidget( control );
+
+ controls.append( control );
+ }
+ while( !(p_item->i_type == CONFIG_HINT_END ||
+ ( ( data->i_type == TYPE_SUBCATEGORY ||
+ data->i_type == TYPE_CATSUBCAT ) &&
+ ( p_item->i_type == CONFIG_CATEGORY ||
+ p_item->i_type == CONFIG_SUBCATEGORY ) ) ) && p_item++ );
+
+ if( box )
+ {
+ box->setLayout( boxlayout );
+ layout->addWidget( box, 1 );
+ }
+
+ scrolled_area->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Fixed );
+ scrolled_area->setLayout( layout );
+ scroller->setWidget( scrolled_area );
+ scroller->setWidgetResizable( true );
+ global_layout->addWidget( scroller );
+
+ some_hidden_text = new QLabel( "Some options are available but hidden. "\
+ "Check \"Advanced options\" to see them." );
+ some_hidden_text->setWordWrap( true );
+
+ setLayout( global_layout );
+ setAdvanced( false );
+}
+
+void PrefsPanel::Apply()
+{
+ /* todo */
+ QList<ConfigControl *>::Iterator i;
+ for( i = controls.begin() ; i != controls.end() ; i++ )
+ {
+ VIntConfigControl *vicc = qobject_cast<VIntConfigControl *>(*i);
+ if( !vicc )
+ {
+ VFloatConfigControl *vfcc = qobject_cast<VFloatConfigControl *>(*i);
+ if( !vfcc)
+ {
+ VStringConfigControl *vscc =
+ qobject_cast<VStringConfigControl *>(*i);
+ assert( vscc );
+ config_PutPsz( p_intf, vscc->getName().toAscii().data(),
+ vscc->getValue().toAscii().data() );
+ continue;
+ }
+ config_PutFloat( p_intf, vfcc->getName().toAscii().data(),
+ vfcc->getValue() );
+ continue;
+ }
+ config_PutInt( p_intf, vicc->getName().toAscii().data(),
+ vicc->getValue() );
+ }
+}
+
+void PrefsPanel::Clean()
+{}
+
+void PrefsPanel::setAdvanced( bool adv )
+{
+ bool some_hidden = false;
+ if( adv == advanced ) return;
+
+ advanced = adv;
+ QList<ConfigControl *>::Iterator i;
+ for( i = controls.begin() ; i != controls.end() ; i++ )
+ {
+ if( (*i)->isAdvanced() )
+ {
+ fprintf( stderr, "Showing \n" );
+ if( !advanced ) some_hidden = true;
+ (*i)->setVisible( advanced );
+ }
+ }
+ if( some_hidden_text )
+ {
+ global_layout->removeWidget( some_hidden_text );
+ some_hidden_text->hide();
+ }
+ if( some_hidden )
+ {
+ global_layout->addWidget( some_hidden_text );
+ some_hidden_text->show();
+ }
+}
#define _PREFSTREE_H_
#include <QTreeWidget>
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+
+enum
+{
+ TYPE_CATEGORY,
+ TYPE_CATSUBCAT,
+ TYPE_SUBCATEGORY,
+ TYPE_MODULE
+};
+
+class PrefsPanel;
+class QLabel;
+class QVBoxLayout;
+
+class PrefsItemData : public QObject
+{
+public:
+ PrefsItemData()
+ { panel = NULL; i_object_id = 0; i_subcat_id = -1; };
+ virtual ~PrefsItemData() {};
+ PrefsPanel *panel;
+ int i_object_id;
+ int i_subcat_id;
+ int i_type;
+ bool b_submodule;
+ QString name;
+ QString help;
+};
+
+Q_DECLARE_METATYPE( PrefsItemData* );
class PrefsTree : public QTreeWidget
{
Q_OBJECT;
public:
- PrefsTree();
+ PrefsTree( intf_thread_t *, QWidget * );
virtual ~PrefsTree();
-}
+
+ void ApplyAll();
+ void CleanAll();
+
+private:
+ void DoAll( bool );
+ intf_thread_t *p_intf;
+};
+
+class ConfigControl;
+
+class PrefsPanel : public QWidget
+{
+ Q_OBJECT
+public:
+ PrefsPanel( intf_thread_t *, QWidget *, PrefsItemData * );
+ PrefsPanel( QWidget *);
+ virtual ~PrefsPanel() {};
+ void Apply();
+ void Clean();
+private:
+ intf_thread_t *p_intf;
+ QList<ConfigControl *> controls;
+ QLabel *some_hidden_text;
+ QVBoxLayout *global_layout;
+ bool advanced;
+public slots:
+ void setAdvanced( bool );
+};
+
+#endif
+++ /dev/null
-/*****************************************************************************
- * preferences_tree.cpp : Tree of modules for preferences
- ****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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_tree.hpp"
-
-#include <QTreeWidget>
-
if( !p_item->i_list )
p_control = new StringConfigControl( p_this, p_item, parent,false );
else
- abort();
+ fprintf(stderr, "GRAA\n" );
break;
default:
break;
label->setToolTip( p_item->psz_longtext );
QHBoxLayout *layout = new QHBoxLayout();
- layout->addWidget( label ); layout->addWidget( text );
+ layout->addWidget( label, 0 ); layout->addWidget( text, 1 );
setLayout( layout );
}
ConfigControl( vlc_object_t *, module_config_t *, QWidget * );
virtual ~ConfigControl();
QString getName() { return _name; }
- bool getAdvanced() { return _advanced; }
+ bool isAdvanced() { return _advanced; }
static ConfigControl * createControl( vlc_object_t*,
module_config_t*,QWidget* );
--- /dev/null
+/*****************************************************************************
+ * prefs_dialog.cpp : Preferences
+ ****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * 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 "dialogs/prefs_dialog.hpp"
+#include "dialogs_provider.hpp"
+#include "util/qvlcframe.hpp"
+
+#include "components/preferences.hpp"
+#include "qt4.hpp"
+
+#include <QHBoxLayout>
+#include <QGroupBox>
+#include <QRadioButton>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QCheckBox>
+PrefsDialog *PrefsDialog::instance = NULL;
+
+PrefsDialog::PrefsDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
+{
+ layout = new QHBoxLayout();
+ QVBoxLayout * main_layout = new QVBoxLayout();
+ setWindowTitle( _("Preferences" ) );
+ resize( 800, 450 );
+
+ advanced_tree = NULL;
+ simple_tree = NULL;
+ simple_panel = NULL;
+ advanced_panel = NULL;
+
+ vertical = new QVBoxLayout();
+
+ // Choice for types
+ types = new QGroupBox( "Show settings" );
+ QHBoxLayout *tl = new QHBoxLayout();
+ tl->setSpacing( 3 );
+ small = new QRadioButton( "Common", types );
+ all = new QRadioButton( "All", types );
+ tl->addWidget( small );
+ tl->addWidget( all );
+ types->setLayout(tl );
+
+ layout->addLayout( vertical, 1 );
+ setAll();
+
+ all->setChecked( true );
+
+ main_layout->addLayout( layout );
+ adv_chk = new QCheckBox("Advanced options");
+ main_layout->addWidget( adv_chk );
+
+ QObject::connect( adv_chk, SIGNAL( toggled(bool) ), this,
+ SLOT( setAdvanced( bool ) ) );
+ setLayout( main_layout );
+
+ QObject::connect( small, SIGNAL( clicked() ), this, SLOT( setSmall()) );
+ QObject::connect( all, SIGNAL( clicked() ), this, SLOT( setAll()) );
+}
+
+void PrefsDialog::setAdvanced( bool advanced )
+{
+ if( advanced_panel )
+ advanced_panel->setAdvanced( advanced );
+}
+
+void PrefsDialog::setAll()
+{
+ while( (vertical->takeAt(0)) != 0 ) {}
+ if( simple_tree )
+ simple_tree->hide();
+
+ if( !advanced_tree )
+ {
+ advanced_tree = new PrefsTree( p_intf, this );
+ QObject::connect( advanced_tree,
+ SIGNAL( currentItemChanged( QTreeWidgetItem *,
+ QTreeWidgetItem *) ), this,
+ SLOT( changePanel( QTreeWidgetItem * ) ) );
+ }
+ advanced_tree->show();
+ setAdvanced( adv_chk->isChecked() );
+ vertical->addWidget( types );
+ vertical->addWidget( advanced_tree );
+
+ if( layout->count() == 2 )
+ layout->takeAt(1);
+
+ if( !advanced_panel )
+ advanced_panel = new PrefsPanel( this );
+ layout->addWidget( advanced_panel, 3 ) ;
+}
+
+void PrefsDialog::setSmall()
+{
+ while( (vertical->takeAt(0)) != 0 ) {}
+ if( advanced_tree )
+ advanced_tree->hide();
+
+ if( !simple_tree )
+ simple_tree = new QTreeWidget();
+ simple_tree->show();
+ vertical->addWidget( types );
+ vertical->addWidget( simple_tree );
+
+ if( layout->count() == 2 )
+ layout->takeAt(1);
+
+ if( !simple_panel )
+ simple_panel = new QWidget();
+ layout->addWidget( simple_panel, 3 ) ;
+}
+
+
+void PrefsDialog::init()
+{
+}
+
+PrefsDialog::~PrefsDialog()
+{
+}
+
+void PrefsDialog::changePanel( QTreeWidgetItem *item )
+{
+ PrefsItemData *data = item->data( 0, Qt::UserRole ).value<PrefsItemData*>();
+
+ if( advanced_panel )
+ {
+ layout->removeWidget( advanced_panel );
+ advanced_panel->hide();
+ }
+ if( !data->panel )
+ {
+ data->panel = new PrefsPanel( p_intf, this, data );
+ }
+ advanced_panel = data->panel;
+ advanced_panel->show();
+ setAdvanced( adv_chk->isChecked() );
+ layout->addWidget( advanced_panel, 3 );
+
+}
--- /dev/null
+/*****************************************************************************
+ * prefs_dialog.hpp : Preferences
+ ****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * 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 _PREFS_DIALOG_H_
+#define _PREFS_DIALOG_H_
+
+#include "util/qvlcframe.hpp"
+
+class PrefsTree;
+class PrefsPanel;
+class QTreeWidgetItem;
+class QTreeWidget;
+class QHBoxLayout;
+class QVBoxLayout;
+class QGroupBox;
+class QRadioButton;
+class QWidget;
+class QCheckBox;
+
+class PrefsDialog : public QVLCFrame
+{
+ Q_OBJECT;
+public:
+ static PrefsDialog * getInstance( intf_thread_t *_p_intf )
+ {
+ fprintf( stderr, "%p\n", _p_intf );
+ if( !instance )
+ {
+ instance = new PrefsDialog( _p_intf );
+ instance->init();
+ }
+ return instance;
+ }
+ virtual ~PrefsDialog();
+private:
+ PrefsDialog( intf_thread_t * );
+ void init();
+
+ PrefsPanel *advanced_panel;
+ PrefsTree *advanced_tree;
+ QWidget *simple_panel;
+ QTreeWidget *simple_tree;
+ QGroupBox *types;
+ // The layout for the main part
+ QHBoxLayout *layout;
+ // Layout for the left pane
+ QVBoxLayout *vertical;
+ QRadioButton *small,*all;
+ QCheckBox *adv_chk;
+
+ static PrefsDialog *instance;
+private slots:
+ void changePanel( QTreeWidgetItem *);
+ void setAll();
+ void setSmall();
+ void setAdvanced( bool );
+};
+
+#endif
#include "qt4.hpp"
#include <QEvent>
#include "dialogs/playlist.hpp"
+#include "dialogs/prefs_dialog.hpp"
#include "dialogs/streaminfo.hpp"
#include <QApplication>
void DialogsProvider::prefsDialog()
{
+ PrefsDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::messagesDialog()
--- /dev/null
+/* XPM */
+static char * advanced_xpm[] = {
+"16 16 106 2",
+" c None",
+". c #AEAEBE",
+"+ c #D7D7E0",
+"@ c #D5D5DD",
+"# c #C2C2CE",
+"$ c #CECED7",
+"% c #FEFEFE",
+"& c #DCDCE2",
+"* c #9F9FB2",
+"= c #C3C3CE",
+"- c #FBFBFB",
+"; c #D0D0D8",
+"> c #86869E",
+", c #8F8FA4",
+"' c #EBEBEE",
+") c #EEEEF2",
+"! c #9595A9",
+"~ c #A2A2B5",
+"{ c #9A9AAE",
+"] c #CACAD5",
+"^ c #F8F8F9",
+"/ c #F7F7F9",
+"( c #9999AC",
+"_ c #A8A8B8",
+": c #E7E7EB",
+"< c #87879F",
+"[ c #6F6F8B",
+"} c #BFBFCB",
+"| c #F1F1F5",
+"1 c #E9E9EE",
+"2 c #EDEDF2",
+"3 c #DBDBE2",
+"4 c #7C7F9B",
+"5 c #818199",
+"6 c #E2E2E7",
+"7 c #D2D2DC",
+"8 c #BDBDCA",
+"9 c #E3E3E8",
+"0 c #E0E0E6",
+"a c #E0E0E4",
+"b c #E1E1E7",
+"c c #C6C6D1",
+"d c #707599",
+"e c #9B9BAE",
+"f c #DEDEE4",
+"g c #D8D8E1",
+"h c #DADAE2",
+"i c #D8D8E0",
+"j c #BEBECB",
+"k c #B2B6CE",
+"l c #B09E8F",
+"m c #CC8B22",
+"n c #808098",
+"o c #AFAFBF",
+"p c #B9B9C8",
+"q c #B3B3C2",
+"r c #BCBCC9",
+"s c #C3C6DA",
+"t c #BDAA9A",
+"u c #CF8925",
+"v c #E68208",
+"w c #DA9217",
+"x c #49496A",
+"y c #565674",
+"z c #4B4B6D",
+"A c #5D6186",
+"B c #B3A196",
+"C c #CF8B28",
+"D c #E98606",
+"E c #FD8606",
+"F c #F38F0B",
+"G c #D59018",
+"H c #B2721C",
+"I c #F19C0D",
+"J c #FEA310",
+"K c #FEA210",
+"L c #F8A410",
+"M c #D28F19",
+"N c #CF8918",
+"O c #FEBC19",
+"P c #FEBE1B",
+"Q c #FEB518",
+"R c #FEA913",
+"S c #FDA610",
+"T c #CF8717",
+"U c #C98819",
+"V c #FECE20",
+"W c #FEAC13",
+"X c #FE8907",
+"Y c #FE8506",
+"Z c #FC980B",
+"` c #B26E16",
+" . c #C27F18",
+".. c #FEA410",
+"+. c #FE9109",
+"@. c #FE8004",
+"#. c #FE9106",
+"$. c #BD7013",
+"%. c #BB650F",
+"&. c #FE9F0D",
+"*. c #FE9808",
+"=. c #ED8108",
+"-. c #915216",
+";. c #994E10",
+">. c #AB5A0D",
+",. c #894914",
+" . + @ # ",
+" $ % % & * ",
+" = - % ; ",
+"> , ' % ) ! ",
+"~ { ] ^ / ) ( ",
+"_ : < [ } | 1 2 3 4 ",
+"5 6 7 8 9 0 a b c d ",
+" e f b g h i j k l m ",
+" n o p q r s t u v w ",
+" x y z A B C D E F G ",
+" H I J J K L M ",
+" N O P Q R S T ",
+" U V W X Y Z ` ",
+" ...+.@.#.$.",
+" %.&.*.=.-.",
+" ;.>.,. "};
--- /dev/null
+/* XPM */
+static char * audio_xpm[] = {
+"16 16 83 1",
+" c None",
+". c #00E000",
+"+ c #00F100",
+"@ c #00F500",
+"# c #00DE00",
+"$ c #00AF00",
+"% c #00AF01",
+"& c #00A402",
+"* c #00A100",
+"= c #00A400",
+"- c #009401",
+"; c #009301",
+"> c #007700",
+", c #007A02",
+"' c #008101",
+") c #00EE00",
+"! c #00F300",
+"~ c #00A701",
+"{ c #009C02",
+"] c #009C00",
+"^ c #007E03",
+"/ c #007401",
+"( c #929292",
+"_ c #9E9E9E",
+": c #A8A8A8",
+"< c #747474",
+"[ c #737373",
+"} c #6C6C6C",
+"| c #666666",
+"1 c #787878",
+"2 c #8F8F8F",
+"3 c #A7A7A7",
+"4 c #B6B6B7",
+"5 c #6D6D6D",
+"6 c #626262",
+"7 c #646464",
+"8 c #848484",
+"9 c #969696",
+"0 c #B9B9B9",
+"a c #C6C6C6",
+"b c #A6A6AA",
+"c c #6A6A6A",
+"d c #7A7A7A",
+"e c #B2B2B2",
+"f c #BFBFBF",
+"g c #BABABA",
+"h c #B6B6B6",
+"i c #B4B4B4",
+"j c #D7D7D7",
+"k c #C3C3C4",
+"l c #6B6B6B",
+"m c #636363",
+"n c #606060",
+"o c #575757",
+"p c #555555",
+"q c #535353",
+"r c #888888",
+"s c #D3D3D3",
+"t c #E1E1E1",
+"u c #B3B3B4",
+"v c #383838",
+"w c #707070",
+"x c #585858",
+"y c #3C3C3C",
+"z c #3B3B3B",
+"A c #494949",
+"B c #DEDEDE",
+"C c #C4C4C4",
+"D c #57575D",
+"E c #242424",
+"F c #7C7C7C",
+"G c #949494",
+"H c #A2A2A2",
+"I c #BCBCBC",
+"J c #8B8B8D",
+"K c #444444",
+"L c #414141",
+"M c #464646",
+"N c #5D5D5D",
+"O c #7B7B7B",
+"P c #4A4A4F",
+"Q c #4A4A4B",
+"R c #515153",
+" .+@# ",
+" $%& *=- ",
+" ; >, ",
+" ' ",
+" )! ",
+" ~{ ]- ",
+" ^ / ",
+" (_: ",
+" <[}||1234 ",
+" 5|667<89:0ab ",
+" c66defghiajk ",
+" l6mnopqmrstu ",
+" vwcxyvzA3BCD ",
+" EoF2GHIhJ ",
+" KLMNOP ",
+" QR "};
--- /dev/null
+/* XPM */
+static char * codec_xpm[] = {
+"16 16 132 2",
+" c None",
+". c #131313",
+"+ c #464646",
+"@ c #E0E0E0",
+"# c #656565",
+"$ c #3D3D3D",
+"% c #E4E9EC",
+"& c #FBFFFF",
+"* c #E8E9EB",
+"= c #595858",
+"- c #393A3B",
+"; c #D1DBE6",
+"> c #ECF8FF",
+", c #E8F4FF",
+"' c #D5DAE1",
+") c #C1C1C1",
+"! c #4F4E4D",
+"~ c #0A0A0A",
+"{ c #909295",
+"] c #D8EAFD",
+"^ c #DFF1FF",
+"/ c #C0CAD6",
+"( c #C6CCD4",
+"_ c #E5ECF1",
+": c #828385",
+"< c #080808",
+"[ c #989898",
+"} c #5B5B5B",
+"| c #2F2E2D",
+"1 c #898E94",
+"2 c #ADB8C6",
+"3 c #B6BDC7",
+"4 c #E6F1FD",
+"5 c #F6FFFF",
+"6 c #8D96A2",
+"7 c #121213",
+"8 c #646464",
+"9 c #B6B6B6",
+"0 c #898989",
+"a c #767676",
+"b c #3F3F3F",
+"c c #292827",
+"d c #6D6E6F",
+"e c #D4E0F0",
+"f c #F1FFFF",
+"g c #B9C4D0",
+"h c #868E98",
+"i c #B0BBC6",
+"j c #46484B",
+"k c #1E1E1D",
+"l c #C7C7C7",
+"m c #8D8D8D",
+"n c #818181",
+"o c #A1A1A1",
+"p c #5E5E5E",
+"q c #343433",
+"r c #777A7F",
+"s c #B3BDC6",
+"t c #959AA2",
+"u c #DEE9F2",
+"v c #F7FFFF",
+"w c #B8C2CE",
+"x c #363636",
+"y c #030303",
+"z c #8F8F8F",
+"A c #BDBDBD",
+"B c #999999",
+"C c #AAAAAA",
+"D c #E1E1E1",
+"E c #F6F6F6",
+"F c #EBEBEB",
+"G c #7E7E7E",
+"H c #3F3E3E",
+"I c #6E6F6F",
+"J c #D9DFE7",
+"K c #FDFFFF",
+"L c #EDF4F9",
+"M c #7A7D81",
+"N c #0C0B0B",
+"O c #A7A7A7",
+"P c #C4C4C4",
+"Q c #B5B5B5",
+"R c #C2C2C2",
+"S c #D6D6D6",
+"T c #D5D5D5",
+"U c #CDCDCD",
+"V c #C5C5C5",
+"W c #727272",
+"X c #5D5C5C",
+"Y c #AEAFB0",
+"Z c #F0F1F1",
+"` c #929394",
+" . c #0B0B0A",
+".. c #868686",
+"+. c #D9D9D9",
+"@. c #D3D3D3",
+"#. c #B8B8B8",
+"$. c #9B9B9B",
+"%. c #969696",
+"&. c #A0A0A0",
+"*. c #D1D1D1",
+"=. c #919192",
+"-. c #111111",
+";. c #3E3E3E",
+">. c #BEBEBE",
+",. c #EFEFEF",
+"'. c #E7E7E7",
+"). c #B0B0B0",
+"!. c #CFCFCF",
+"~. c #F4F4F4",
+"{. c #DFDFDF",
+"]. c #5D5D5D",
+"^. c #0C0C0C",
+"/. c #585858",
+"(. c #FFFFFF",
+"_. c #FDFDFD",
+":. c #FBFBFB",
+"<. c #8E8E8E",
+"[. c #252525",
+"}. c #424242",
+"|. c #7F7F7F",
+"1. c #A8A8A8",
+"2. c #939393",
+"3. c #6D6D6D",
+"4. c #191919",
+"5. c #4C4C4C",
+"6. c #6B6B6B",
+"7. c #8B8B8B",
+"8. c #ADADAD",
+"9. c #B4B4B4",
+"0. c #333333",
+"a. c #6C6C6C",
+" . ",
+" + @ # ",
+" $ % & * = ",
+" - ; > , ' ) ! ",
+" ~ { ] ^ / ( _ : < ",
+" [ } | 1 2 3 4 5 6 7 . ",
+" 8 9 0 a b c d e f g h i j k ",
+" l m n m o p q r s t u v w x y ",
+"z A B C D E F G H I J K L M N ",
+"O P Q R S T U V W X Y Z ` . ",
+"..+.@.#.[ $.%.&.*...G =.-. ",
+";.>.,.'.).z B !.~.{.].^. ",
+" /.9 ,.(._.(.:.T <.[. ",
+" }.|.$.1.&.2.3.4. ",
+" 5.6.7.8.9.$ ",
+" 0.# a. "};
--- /dev/null
+/* XPM */
+static char * intf_xpm[] = {
+"16 16 216 2",
+" c None",
+". c #715F39",
+"+ c #DDA434",
+"@ c #CD8A01",
+"# c #CC8A04",
+"$ c #B79042",
+"% c #D49411",
+"& c #D18D03",
+"* c #B27D11",
+"= c #ECECEC",
+"- c #FFFDFA",
+"; c #FEFBF8",
+"> c #FDFAF7",
+", c #FCFAF7",
+"' c #FCF9F6",
+") c #FBF8F6",
+"! c #F8F8FA",
+"~ c #BAAB8C",
+"{ c #D09824",
+"] c #CD8B02",
+"^ c #C88600",
+"/ c #987D48",
+"( c #CFD1D6",
+"_ c #B0B0AF",
+": c #FCFCFD",
+"< c #BAC7DC",
+"[ c #C0D1E6",
+"} c #C5D6E8",
+"| c #C9DAEB",
+"1 c #CDDEED",
+"2 c #CFE3F3",
+"3 c #C0CCD7",
+"4 c #BE9648",
+"5 c #D3910C",
+"6 c #CD8B03",
+"7 c #A06E0A",
+"8 c #868A90",
+"9 c #FFFFFF",
+"0 c #797979",
+"a c #B4B4B2",
+"b c #E9ECF2",
+"c c #2962B7",
+"d c #3C7ED0",
+"e c #4D8ED9",
+"f c #5B9DE2",
+"g c #66A9EA",
+"h c #64A8ED",
+"i c #868978",
+"j c #D4961A",
+"k c #CD8A02",
+"l c #C08205",
+"m c #5D5844",
+"n c #4977C2",
+"o c #7B7B7A",
+"p c #B5B4B1",
+"q c #ECEFF5",
+"r c #3670C4",
+"s c #3A7DD1",
+"t c #4A8DDA",
+"u c #5397E1",
+"v c #60A5EC",
+"w c #92ABC7",
+"x c #A88A4F",
+"y c #CF8E09",
+"z c #C88602",
+"A c #8E691F",
+"B c #295A9D",
+"C c #5287D4",
+"D c #F4F5F7",
+"E c #797978",
+"F c #B6B6B5",
+"G c #EDF0F5",
+"H c #2E68BD",
+"I c #3577CE",
+"J c #3F81D4",
+"K c #619BDE",
+"L c #639CDB",
+"M c #91A0B1",
+"N c #CFCDCB",
+"O c #A4916A",
+"P c #9F7012",
+"Q c #455C77",
+"R c #2268CA",
+"S c #4D7FCA",
+"T c #E9E9EB",
+"U c #787676",
+"V c #BAB9B6",
+"W c #EEF1F7",
+"X c #1850AF",
+"Y c #2363C2",
+"Z c #3878CE",
+"` c #4B8DDA",
+" . c #638DBE",
+".. c #C2C3C3",
+"+. c #C6C5C5",
+"@. c #8E8D8E",
+"#. c #4E6277",
+"$. c #2E6DC3",
+"%. c #1A5DC0",
+"&. c #3E6EBF",
+"*. c #E7E8E9",
+"=. c #797876",
+"-. c #BBBBB9",
+";. c #F0F3F9",
+">. c #1048AA",
+",. c #033FAB",
+"'. c #2465C3",
+"). c #4F96E0",
+"!. c #97A9BD",
+"~. c #CFCBC6",
+"{. c #949290",
+"]. c #6B7E8C",
+"^. c #6EA5D8",
+"/. c #2766C3",
+"(. c #023CAA",
+"_. c #3766BA",
+":. c #E5E6E7",
+"<. c #797976",
+"[. c #BDBBBA",
+"}. c #F1F4FA",
+"|. c #164EAF",
+"1. c #0948B1",
+"2. c #114FB2",
+"3. c #365885",
+"4. c #767472",
+"5. c #949495",
+"6. c #566E8D",
+"7. c #7DB0DB",
+"8. c #70AAE6",
+"9. c #0D4BB2",
+"0. c #0039A8",
+"a. c #3868BA",
+"b. c #E3E4E5",
+"c. c #BEBDBB",
+"d. c #F2F5FC",
+"e. c #215AB6",
+"f. c #1459C1",
+"g. c #21477E",
+"h. c #95918B",
+"i. c #17130F",
+"j. c #536774",
+"k. c #7FB4E5",
+"l. c #76B1E9",
+"m. c #2F6DC5",
+"n. c #1957BA",
+"o. c #0747B1",
+"p. c #3C6CBD",
+"q. c #E0E0E2",
+"r. c #BFBEBD",
+"s. c #F3F6FC",
+"t. c #2965BF",
+"u. c #1D5CB8",
+"v. c #344256",
+"w. c #3A352F",
+"x. c #020407",
+"y. c #789DBB",
+"z. c #5694E0",
+"A. c #397ACE",
+"B. c #3070C9",
+"C. c #2564C2",
+"D. c #1152B8",
+"E. c #4272C2",
+"F. c #DDDDDF",
+"G. c #C0BFBE",
+"H. c #F1F4FB",
+"I. c #346EC2",
+"J. c #4067A3",
+"K. c #29364B",
+"L. c #09182B",
+"M. c #336298",
+"N. c #4F93E1",
+"O. c #498DDC",
+"P. c #4386D8",
+"Q. c #3B7DD3",
+"R. c #2F71CB",
+"S. c #195CC0",
+"T. c #4879C8",
+"U. c #D9DADB",
+"V. c #C2C1C1",
+"W. c #FBFCFE",
+"X. c #BAC9E2",
+"Y. c #BFCADD",
+"Z. c #AFBBCB",
+"`. c #B2C6DE",
+" + c #BAD4F1",
+".+ c #B7CFE9",
+"++ c #B4CCE7",
+"@+ c #B0C8E3",
+"#+ c #ABC2DF",
+"$+ c #A4BBDA",
+"%+ c #9BB2D5",
+"&+ c #A8B9D5",
+"*+ c #D7D7D7",
+"=+ c #7B7B7B",
+"-+ c #848484",
+";+ c #FFFFFE",
+">+ c #FDFBF9",
+",+ c #F8F6F3",
+"'+ c #F3F0EC",
+")+ c #EFEBE7",
+"!+ c #EBE7E3",
+"~+ c #E8E5E0",
+"{+ c #E4E1DD",
+"]+ c #E1DED9",
+"^+ c #DEDBD6",
+"/+ c #D8D6D2",
+"(+ c #D3D3D3",
+"_+ c #535353",
+":+ c #4F4F4F",
+"<+ c #5B5B5B",
+"[+ c #5A5A5A",
+"}+ c #595959",
+"|+ c #575757",
+"1+ c #555555",
+"2+ c #545454",
+"3+ c #414141",
+" . + @ # ",
+" $ % & * ",
+" = - ; > , ' ) ! ~ { ] ^ / ( ",
+"_ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
+"a b c d e f g h i j k l m n 9 o ",
+"p q r s t u v w x y z A B C D E ",
+"F G H I J K L M N O P Q R S T U ",
+"V W X Y Z ` ...+.@.#.$.%.&.*.=.",
+"-.;.>.,.'.).!.~.{.].^./.(._.:.<.",
+"[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.E ",
+"c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.E ",
+"r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.E ",
+"G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.E ",
+"V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+",
+"-+9 ;+- >+,+'+)+!+~+{+]+^+/+(+_+",
+" :+<+[+}+}+|+|+|+1+1+1+_+2+3+ "};
--- /dev/null
+/* XPM */
+static char * type_net_xpm[] = {
+"16 16 154 2",
+" c None",
+". c #667AAC",
+"+ c #8293BC",
+"@ c #8192BA",
+"# c #6677A0",
+"$ c #8C9BC3",
+"% c #E9EBF5",
+"& c #F8F8FC",
+"* c #FDFCFE",
+"= c #FFFFFF",
+"- c #FCFCFF",
+"; c #E7EBF9",
+"> c #8996B4",
+", c #99A5CD",
+"' c #E7E8F2",
+") c #CED2DD",
+"! c #C0C6D6",
+"~ c #CBD1E1",
+"{ c #E7E9F4",
+"] c #E8EAF5",
+"^ c #E7E8F4",
+"/ c #F0F2FE",
+"( c #919DC3",
+"_ c #53659F",
+": c #B3BBD7",
+"< c #98A2BB",
+"[ c #93A0BE",
+"} c #98A5C5",
+"| c #C8CEE1",
+"1 c #D5D8E7",
+"2 c #CBCFE0",
+"3 c #D0D4E5",
+"4 c #D7DBEC",
+"5 c #D0D5EF",
+"6 c #47578E",
+"7 c #3E579E",
+"8 c #5F709B",
+"9 c #7084B1",
+"0 c #7588B6",
+"a c #CBD1E5",
+"b c #EBEDF6",
+"c c #E2E6F1",
+"d c #D9DCEB",
+"e c #D3D7E9",
+"f c #CBCFE5",
+"g c #C0C5E2",
+"h c #7B89C2",
+"i c #29396C",
+"j c #6273AF",
+"k c #56699E",
+"l c #4A619B",
+"m c #49629E",
+"n c #A2AECE",
+"o c #E4E7F0",
+"p c #E9EBF3",
+"q c #E3E5F2",
+"r c #D4D8EB",
+"s c #C0C5DF",
+"t c #8D97BF",
+"u c #6F7FBD",
+"v c #1F2B51",
+"w c #3B4C83",
+"x c #98A1D3",
+"y c #A7AFD6",
+"z c #7481A9",
+"A c #1F397C",
+"B c #234089",
+"C c #2C4789",
+"D c #AEB7D0",
+"E c #EBEDF7",
+"F c #D4D8EC",
+"G c #959FC6",
+"H c #364B86",
+"I c #4159A0",
+"J c #152652",
+"K c #303D69",
+"L c #919CD1",
+"M c #AAB1D9",
+"N c #6B79A3",
+"O c #072670",
+"P c #0B2C7C",
+"Q c #001F73",
+"R c #7989B5",
+"S c #EDEDF8",
+"T c #B4BCDB",
+"U c #253D7D",
+"V c #374B87",
+"W c #4A62AA",
+"X c #05143D",
+"Y c #8490C8",
+"Z c #5A699A",
+"` c #123079",
+" . c #0A2B7C",
+".. c #0F2F7E",
+"+. c #09297A",
+"@. c #3B5495",
+"#. c #B6BDDB",
+"$. c #485F9C",
+"%. c #09266D",
+"&. c #5D6B9E",
+"*. c #7483BD",
+"=. c #415186",
+"-. c #2F488D",
+";. c #102E7A",
+">. c #1A3885",
+",. c #24418A",
+"'. c #29458D",
+"). c #27438B",
+"!. c #28438C",
+"~. c #0F2E7D",
+"{. c #233F89",
+"]. c #284694",
+"^. c #172C60",
+"/. c #294183",
+"(. c #39549C",
+"_. c #455D9D",
+":. c #4C62A0",
+"<. c #5065A1",
+"[. c #4D63A0",
+"}. c #455C9C",
+"|. c #41599B",
+"1. c #314E99",
+"2. c #0E2766",
+"3. c #2F3E6D",
+"4. c #6375AE",
+"5. c #7D8DC2",
+"6. c #7A88BC",
+"7. c #7C8BBF",
+"8. c #7385BC",
+"9. c #5065A0",
+"0. c #1F305C",
+"a. c #363D58",
+"b. c #888FB2",
+"c. c #676D8F",
+"d. c #282F49",
+"e. c #C6C6C9",
+"f. c #8A8A8C",
+"g. c #A8A8AF",
+"h. c #C6C6CC",
+"i. c #B9B9C0",
+"j. c #C2C2C6",
+"k. c #DADAD9",
+"l. c #ADADB2",
+"m. c #ABABB1",
+"n. c #CCCCD2",
+"o. c #8A8A91",
+"p. c #373739",
+"q. c #39393C",
+"r. c #626268",
+"s. c #68686C",
+"t. c #6C6C6E",
+"u. c #555559",
+"v. c #313134",
+"w. c #38383A",
+" . + @ # ",
+" $ % & * = - ; > ",
+" , ' ) ! ~ { ] ^ / ( ",
+" _ : < [ } | 1 2 3 4 5 6 ",
+" 7 8 9 0 a b c d e f g h ",
+" i j k l m n o p q r s t u v ",
+" w x y z A B C D E F G H I J ",
+" K L M N O P Q R S T U V W X ",
+" Y Z ` ...+.@.#.$.%.&.*. ",
+" =.-.;.>.,.'.).!.~.{.].^. ",
+" /.(._.:.<.[.}.|.1.2. ",
+" 3.4.5.6.7.8.9.0. ",
+" a.b.c.d. ",
+" e.f. ",
+" g.h.i.j.k.k.l.m.n.o. ",
+" p.q.r.s.t.u.v.w. "};
--- /dev/null
+/* XPM */
+static char * type_playlist_xpm[] = {
+"16 16 126 2",
+" c None",
+". c #959695",
+"+ c #000000",
+"@ c #0E0E0E",
+"# c #282828",
+"$ c #696969",
+"% c #DADBDA",
+"& c #E4E5E4",
+"* c #E6E7E6",
+"= c #D3D3D3",
+"- c #FFFFFF",
+"; c #F9F9F9",
+"> c #F9F9F8",
+", c #E7E7E7",
+"' c #E4E4E4",
+") c #CDCDCD",
+"! c #252525",
+"~ c #C8C9C8",
+"{ c #E3E4E3",
+"] c #F6F6F6",
+"^ c #DADADA",
+"/ c #9F9F9F",
+"( c #FEFEFE",
+"_ c #FCFCFB",
+": c #FBFBFB",
+"< c #F2F2F2",
+"[ c #AFAFAE",
+"} c #E9E9E9",
+"| c #B3B3B3",
+"1 c #383838",
+"2 c #CECFCE",
+"3 c #9E9E9E",
+"4 c #FDFDFD",
+"5 c #FAFAF9",
+"6 c #F3F3F3",
+"7 c #A9A9A8",
+"8 c #F0F0F0",
+"9 c #F4F4F4",
+"0 c #ABABAB",
+"a c #414141",
+"b c #9D9D9C",
+"c c #9A9A9A",
+"d c #9A9A99",
+"e c #9B9B9A",
+"f c #9D9C9C",
+"g c #0A0A0A",
+"h c #9B9B9B",
+"i c #F8F8F7",
+"j c #F7F6F5",
+"k c #F6F6F4",
+"l c #F4F3F2",
+"m c #F1F0EF",
+"n c #F0EFED",
+"o c #E5E4E2",
+"p c #848381",
+"q c #6A6763",
+"r c #F8F7F6",
+"s c #989897",
+"t c #989796",
+"u c #EBEAE8",
+"v c #E1DFDC",
+"w c #B6B6B4",
+"x c #72706C",
+"y c #B1B0AF",
+"z c #818180",
+"A c #AFAFAD",
+"B c #EFEFED",
+"C c #EFEEEC",
+"D c #ECEBE9",
+"E c #E8E7E5",
+"F c #A4A4A1",
+"G c #C4C3C0",
+"H c #817D74",
+"I c #7F7F7E",
+"J c #7F7E7D",
+"K c #EEEDEB",
+"L c #EDECEA",
+"M c #E8E7E4",
+"N c #E7E6E3",
+"O c #8B867D",
+"P c #7D7D7C",
+"Q c #ACABA9",
+"R c #91908E",
+"S c #8E8E8C",
+"T c #E6E4E1",
+"U c #A2A19F",
+"V c #646462",
+"W c #A49E93",
+"X c #7C7B7A",
+"Y c #7B7B7A",
+"Z c #E7E5E2",
+"` c #E4E3DF",
+" . c #E3E2DE",
+".. c #DEDDD9",
+"+. c #DDDCD8",
+"@. c #E0DFDB",
+"#. c #A19C90",
+"$. c #E6E5E2",
+"%. c #E5E4E1",
+"&. c #8E8E8B",
+"*. c #747371",
+"=. c #0B0B0B",
+"-. c #DCDBD7",
+";. c #DBD9D5",
+">. c #A19B90",
+",. c #E3E2DF",
+"'. c #E4E2DF",
+"). c #DCDAD6",
+"!. c #D9D7D3",
+"~. c #E1E0DC",
+"{. c #E2E1DD",
+"]. c #71716F",
+"^. c #0B0B0A",
+"/. c #706F6D",
+"(. c #D8D6D1",
+"_. c #9F998D",
+":. c #999891",
+"<. c #A39D92",
+"[. c #A39D91",
+"}. c #A29C90",
+"|. c #A19B8F",
+"1. c #9D978C",
+"2. c #9B968A",
+"3. c #676359",
+"4. c #919191",
+"5. c #757575",
+". + + + + + + + + + @ # $ % & * ",
+"+ = - - - - - ; > > , ' ) ! ~ { ",
+"+ ] ^ / - ( _ : > < [ } - | 1 2 ",
+"+ - / 3 4 _ 5 > > 6 7 8 - 9 0 a ",
+"+ - 4 b : 5 c d e f } + + + + g ",
+"+ - : h > i j k l m n n o p q + ",
+"+ - > i r j s t t t l u v w x + ",
+"+ - y z A B n C D E + + F G H + ",
+"+ - I B J K L D M N + + + v O + ",
+"+ - L P Q D R R S T + U V v W + ",
+"+ - X X Y M N Z ` .+ ..+.@.#.+ ",
+"+ - $.$.$.%.&.*.=.=.+ -.;.+.>.+ ",
+"+ - ,. .'.` .+ + + + ).!.-.>.+ ",
+"+ - v ~.@.{.~.].=.^./.!.(.!._.+ ",
+"+ :.W <.[.<.}.|.>._._.1.1.2.3.+ ",
+"4.+ + + + + + + + + + + + + + 5."};
--- /dev/null
+/* XPM */
+static char * video_xpm[] = {
+"16 16 124 2",
+" c None",
+". c #FFFFFF",
+"+ c #1B4260",
+"@ c #1E4869",
+"# c #1E4B6D",
+"$ c #1E4A6B",
+"% c #204F73",
+"& c #215175",
+"* c #325C7C",
+"= c #37607E",
+"- c #255B84",
+"; c #296491",
+"> c #4D7CA0",
+", c #6A90AB",
+"' c #7697B0",
+") c #235174",
+"! c #2C6894",
+"~ c #3375A7",
+"{ c #3677A8",
+"] c #4E8BBA",
+"^ c #81ADCE",
+"/ c #AFCBE0",
+"( c #C7DAE9",
+"_ c #42759D",
+": c #275478",
+"< c #326D9B",
+"[ c #3C81B7",
+"} c #447FAE",
+"| c #5390BF",
+"1 c #5994C2",
+"2 c #5C95C2",
+"3 c #92B8D6",
+"4 c #C8DBEA",
+"5 c #4D7EA4",
+"6 c #2D5B80",
+"7 c #366E9D",
+"8 c #3974A3",
+"9 c #336893",
+"0 c #3D7DB0",
+"a c #5592C3",
+"b c #5792C3",
+"c c #89B3D5",
+"d c #B4CFE4",
+"e c #CADDEC",
+"f c #4A7DA6",
+"g c #3E6688",
+"h c #42749D",
+"i c #BDBDBD",
+"j c #326088",
+"k c #4380B5",
+"l c #396D99",
+"m c #6C9FCA",
+"n c #8CB6D8",
+"o c #99BDDD",
+"p c #6EA2CE",
+"q c #3C74A4",
+"r c #446B8C",
+"s c #000000",
+"t c #5F5F5F",
+"u c #969696",
+"v c #959595",
+"w c #447AA5",
+"x c #3D6B94",
+"y c #6198C9",
+"z c #6BA1D1",
+"A c #639CCE",
+"B c #4E8FC8",
+"C c #4279A9",
+"D c #424242",
+"E c #7F7F7F",
+"F c #606060",
+"G c #636363",
+"H c #484848",
+"I c #1E1E1E",
+"J c #7A7A7A",
+"K c #5C80A2",
+"L c #6594C1",
+"M c #70A5D6",
+"N c #6FA3D4",
+"O c #5E8AB4",
+"P c #8C8C8C",
+"Q c #383838",
+"R c #3D3D3D",
+"S c #5D5D5D",
+"T c #B8B8B8",
+"U c #6A6A6A",
+"V c #4C4C4C",
+"W c #171717",
+"X c #94BCE2",
+"Y c #205B07",
+"Z c #1F5A06",
+"` c #2A2A2A",
+" . c #4E4E4E",
+".. c #4B4B4B",
+"+. c #585858",
+"@. c #727272",
+"#. c #454545",
+"$. c #050505",
+"%. c #2B2B2B",
+"&. c #121212",
+"*. c #36960D",
+"=. c #318A0C",
+"-. c #246608",
+";. c #363636",
+">. c #323232",
+",. c #4D4D4D",
+"'. c #3E3E3E",
+"). c #1B1B1B",
+"!. c #154700",
+"~. c #236308",
+"{. c #2B780A",
+"]. c #31840E",
+"^. c #3E7326",
+"/. c #468A29",
+"(. c #0B0B0B",
+"_. c #040404",
+":. c #517D3E",
+"<. c #328E0B",
+"[. c #389013",
+"}. c #3E9A17",
+"|. c #2F840B",
+"1. c #308C09",
+"2. c #FDFDFD",
+"3. c #FBFBFB",
+". . . . . . . . . . . . . . . . ",
+". + @ # $ % & & & & * = * & & . ",
+". # - ; ; ; ; ; ; > , ' , > ; . ",
+". ) ! ~ ~ { { ~ ] ^ / ( / ^ _ . ",
+". : < [ [ } | 1 2 3 4 . 4 3 5 . ",
+". 6 7 8 . 9 0 a b c d e d c f . ",
+". g h . i . j k l m n o n p q . ",
+". r s t u v . w . x y z A B C . ",
+". s D E F G H I J . K L M N O . ",
+". s P D Q R s S T U V W X Y Z . ",
+". ` .s s ..+.@.#.$.%.&.Y *.=.. ",
+". -.Y ;.>.V ,.'.).s !.~.{.{.].. ",
+". ^./.{.~.(._.!.~.{.].*.~.{.*.. ",
+". :.*.*.<.].].{.].[.}.|.*.1.*.. ",
+". . . . . . . . . 2.3.3.. . . . ",
+" "};