Commit 04e52ef4 authored by Clément Stenac's avatar Clément Stenac

Preferences

parent a53a078c
...@@ -18,9 +18,11 @@ TOMOC = main_interface \ ...@@ -18,9 +18,11 @@ TOMOC = main_interface \
dialogs_provider \ dialogs_provider \
input_manager \ input_manager \
dialogs/playlist \ dialogs/playlist \
dialogs/prefs_dialog \
dialogs/streaminfo \ dialogs/streaminfo \
components/infopanels \ components/infopanels \
components/preferences_widgets \ components/preferences_widgets \
components/preferences \
util/input_slider util/input_slider
MOCCPP := $(TOMOC:%=%.moc.cpp) MOCCPP := $(TOMOC:%=%.moc.cpp)
...@@ -30,8 +32,10 @@ nodist_SOURCES_qt4 = \ ...@@ -30,8 +32,10 @@ nodist_SOURCES_qt4 = \
input_manager.moc.cpp \ input_manager.moc.cpp \
dialogs/playlist.moc.cpp \ dialogs/playlist.moc.cpp \
dialogs/streaminfo.moc.cpp \ dialogs/streaminfo.moc.cpp \
dialogs/prefs_dialog.moc.cpp \
components/infopanels.moc.cpp \ components/infopanels.moc.cpp \
components/preferences_widgets.moc.cpp \ components/preferences_widgets.moc.cpp \
components/preferences.moc.cpp \
util/input_slider.moc.cpp util/input_slider.moc.cpp
if ENABLE_QT4 if ENABLE_QT4
...@@ -56,9 +60,11 @@ SOURCES_qt4 = qt4.cpp \ ...@@ -56,9 +60,11 @@ SOURCES_qt4 = qt4.cpp \
dialogs_provider.cpp \ dialogs_provider.cpp \
input_manager.cpp \ input_manager.cpp \
dialogs/playlist.cpp \ dialogs/playlist.cpp \
dialogs/prefs_dialog.cpp \
dialogs/streaminfo.cpp \ dialogs/streaminfo.cpp \
components/infopanels.cpp \ components/infopanels.cpp \
components/preferences_widgets.cpp \ components/preferences_widgets.cpp \
components/preferences.cpp \
util/input_slider.cpp util/input_slider.cpp
$(NULL) $(NULL)
...@@ -69,8 +75,16 @@ EXTRA_DIST += \ ...@@ -69,8 +75,16 @@ EXTRA_DIST += \
input_manager.hpp \ input_manager.hpp \
dialogs/playlist.hpp \ dialogs/playlist.hpp \
dialogs/streaminfo.hpp \ dialogs/streaminfo.hpp \
dialogs/prefs_dialog.hpp \
components/infopanels.hpp \ components/infopanels.hpp \
components/preferences_widgets.hpp \ components/preferences_widgets.hpp \
components/preferences.hpp \
util/input_slider.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
/*****************************************************************************
* 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();
}
}
...@@ -25,11 +25,72 @@ ...@@ -25,11 +25,72 @@
#define _PREFSTREE_H_ #define _PREFSTREE_H_
#include <QTreeWidget> #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 class PrefsTree : public QTreeWidget
{ {
Q_OBJECT; Q_OBJECT;
public: public:
PrefsTree(); PrefsTree( intf_thread_t *, QWidget * );
virtual ~PrefsTree(); 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
...@@ -65,7 +65,7 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this, ...@@ -65,7 +65,7 @@ ConfigControl *ConfigControl::createControl( vlc_object_t *p_this,
if( !p_item->i_list ) if( !p_item->i_list )
p_control = new StringConfigControl( p_this, p_item, parent,false ); p_control = new StringConfigControl( p_this, p_item, parent,false );
else else
abort(); fprintf(stderr, "GRAA\n" );
break; break;
default: default:
break; break;
...@@ -88,7 +88,7 @@ StringConfigControl::StringConfigControl( vlc_object_t *_p_this, ...@@ -88,7 +88,7 @@ StringConfigControl::StringConfigControl( vlc_object_t *_p_this,
label->setToolTip( p_item->psz_longtext ); label->setToolTip( p_item->psz_longtext );
QHBoxLayout *layout = new QHBoxLayout(); QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget( label ); layout->addWidget( text ); layout->addWidget( label, 0 ); layout->addWidget( text, 1 );
setLayout( layout ); setLayout( layout );
} }
......
...@@ -40,7 +40,7 @@ public: ...@@ -40,7 +40,7 @@ public:
ConfigControl( vlc_object_t *, module_config_t *, QWidget * ); ConfigControl( vlc_object_t *, module_config_t *, QWidget * );
virtual ~ConfigControl(); virtual ~ConfigControl();
QString getName() { return _name; } QString getName() { return _name; }
bool getAdvanced() { return _advanced; } bool isAdvanced() { return _advanced; }
static ConfigControl * createControl( vlc_object_t*, static ConfigControl * createControl( vlc_object_t*,
module_config_t*,QWidget* ); module_config_t*,QWidget* );
......
/*****************************************************************************
* 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 );
}
/***************************************************************************** /*****************************************************************************
* preferences_tree.cpp : Tree of modules for preferences * prefs_dialog.hpp : Preferences
**************************************************************************** ****************************************************************************
* Copyright (C) 2000-2005 the VideoLAN team * Copyright (C) 2000-2005 the VideoLAN team
* $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $ * $Id: wxwidgets.cpp 15731 2006-05-25 14:43:53Z zorglub $
...@@ -19,9 +19,61 @@ ...@@ -19,9 +19,61 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/ ****************************************************************************/
#include "components/preferences_tree.hpp" #ifndef _PREFS_DIALOG_H_
#define _PREFS_DIALOG_H_
#include <QTreeWidget> #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
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "qt4.hpp" #include "qt4.hpp"
#include <QEvent> #include <QEvent>
#include "dialogs/playlist.hpp" #include "dialogs/playlist.hpp"
#include "dialogs/prefs_dialog.hpp"
#include "dialogs/streaminfo.hpp" #include "dialogs/streaminfo.hpp"
#include <QApplication> #include <QApplication>
...@@ -94,6 +95,7 @@ void DialogsProvider::streaminfoDialog() ...@@ -94,6 +95,7 @@ void DialogsProvider::streaminfoDialog()
void DialogsProvider::prefsDialog() void DialogsProvider::prefsDialog()
{ {
PrefsDialog::getInstance( p_intf )->toggleVisible();
} }
void DialogsProvider::messagesDialog() void DialogsProvider::messagesDialog()
......
/* 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 ` ",
" ...+.@.#.$.",
" %.&.*.=.-.",
" ;.>.,. "};
/* 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 "};
/* 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. "};
/* 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+ "};
/* 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. "};
/* 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."};
/* 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.. . . . ",
" "};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment