/*****************************************************************************
* preferences.cpp : wxWindows plugin for vlc
*****************************************************************************
- * Copyright (C) 2000-2001 VideoLAN
- * $Id: preferences.cpp,v 1.36 2003/10/19 22:41:18 sigmunau Exp $
+ * Copyright (C) 2000-2004 VideoLAN
+ * $Id$
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
#include "wxwindows.h"
#include "preferences_widgets.h"
-#include <wx/notebook.h>
-#include <wx/textctrl.h>
+
#include <wx/combobox.h>
-#include <wx/spinctrl.h>
#include <wx/statline.h>
-#include <wx/treectrl.h>
#include <wx/clntdata.h>
#include <wx/dynarray.h>
wxTreeItemId plugins_item;
};
-struct ConfigData
-{
- ConfigData( int _i_conf_type, vlc_bool_t _b_advanced, char *psz_name )
- { control = NULL; b_advanced = _b_advanced; b_config_list = VLC_FALSE;
- i_config_type = _i_conf_type; option_name = wxU(psz_name); }
-
- vlc_bool_t b_advanced;
- int i_config_type;
- vlc_bool_t b_config_list;
-
- ConfigControl *control;
-
- wxString option_name;
-};
-
-WX_DEFINE_ARRAY(ConfigData *, ArrayOfConfigData);
+WX_DEFINE_ARRAY(ConfigControl *, ArrayOfConfigControls);
class PrefsPanel : public wxPanel
{
wxBoxSizer *config_sizer;
wxScrolledWindow *config_window;
- ArrayOfConfigData config_array;
+ ArrayOfConfigControls config_array;
};
class ConfigTreeData : public wxTreeItemData
{
public:
- ConfigTreeData() { b_submodule = 0; panel = NULL; psz_section = NULL; }
- virtual ~ConfigTreeData() { if( panel ) delete panel; }
+ ConfigTreeData() { b_submodule = 0; panel = NULL; psz_section = NULL;
+ psz_help = NULL; }
+ virtual ~ConfigTreeData() { if( panel ) delete panel;
+ if( psz_section) free(psz_section);
+ if( psz_help) free(psz_help); }
vlc_bool_t b_submodule;
- char *psz_help;
-
PrefsPanel *panel;
wxBoxSizer *sizer;
int i_object_id;
char *psz_section;
+ char *psz_help;
};
/*****************************************************************************
void PrefsDialog::OnResetAll( wxCommandEvent& WXUNUSED(event) )
{
wxMessageDialog dlg( this,
- wxU(_("Beware this will reset your VLC Media Player config file.\n"
+ wxU(_("Beware this will reset your VLC media player preferences.\n"
"Are you sure you want to continue?")),
- wxU(_("Reset config file")), wxYES_NO|wxNO_DEFAULT|wxCENTRE );
+ wxU(_("Reset Preferences")), wxYES_NO|wxNO_DEFAULT|wxCENTRE );
if ( dlg.ShowModal() == wxID_YES )
{
prefs_tree->AddPendingEvent( newevent );
}
-/*****************************************************************************
- * GetCapabilityHelp: Display the help for one capability.
- *****************************************************************************/
-static char * GetCapabilityHelp( char *psz_capability, int i_type)
-{
- if( psz_capability == NULL) return "";
-
- if( !strcasecmp(psz_capability,"access") )
- return i_type == 1 ? ACCESS_TITLE : ACCESS_HELP;
- if( !strcasecmp(psz_capability,"audio filter") )
- return i_type == 1 ? AUDIO_FILTER_TITLE : AUDIO_FILTER_HELP;
- if( !strcasecmp(psz_capability,"audio output") )
- return i_type == 1 ? AOUT_TITLE : AOUT_HELP;
- if( !strcasecmp(psz_capability,"chroma") )
- return i_type == 1 ? CHROMA_TITLE : CHROMA_HELP;
- if( !strcasecmp(psz_capability,"decoder") )
- return i_type == 1 ? DECODER_TITLE : DECODER_HELP;
- if( !strcasecmp(psz_capability,"demux") )
- return i_type == 1 ? DEMUX_TITLE : DEMUX_HELP;
- if( !strcasecmp(psz_capability,"interface") )
- return i_type == 1 ? INTERFACE_TITLE : INTERFACE_HELP;
- if( !strcasecmp(psz_capability,"sout access") )
- return i_type == 1 ? SOUT_TITLE : SOUT_HELP;
- if( !strcasecmp(psz_capability,"subtitle demux") )
- return i_type == 1 ? SUBTITLE_DEMUX_TITLE : SUBTITLE_DEMUX_HELP;
- if( !strcasecmp(psz_capability,"text renderer") )
- return i_type == 1 ? TEXT_TITLE : TEXT_HELP;
- if( !strcasecmp(psz_capability,"video output") )
- return i_type == 1 ? VOUT__TITLE : VOUT_HELP;
- if( !strcasecmp(psz_capability,"video filter") )
- return i_type == 1 ? VIDEO_FILTER_TITLE : VIDEO_FILTER_HELP;
-
- return "";
-}
-
/*****************************************************************************
* PrefsTreeCtrl class definition.
*****************************************************************************/
* Build a tree of the main options
*/
ConfigTreeData *config_data = new ConfigTreeData;
- config_data->psz_section = NULL;
config_data->i_object_id = GENERAL_ID;
- config_data->psz_help = wraptext( GENERAL_HELP, WRAPCOUNT, ISUTF8 );
+ config_data->psz_help = wraptext( GENERAL_HELP, 72 , ISUTF8 );
config_data->psz_section = strdup( GENERAL_TITLE );
- general_item = AppendItem( root_item, wxU(_("General Settings")),
+ general_item = AppendItem( root_item, wxU(_("General settings")),
-1, -1, config_data );
for( i_index = 0; i_index < p_list->i_count; i_index++ )
if( p_item->psz_longtext )
{
config_data->psz_help =
- wraptext( p_item->psz_longtext, WRAPCOUNT, ISUTF8 );
+ wraptext( p_item->psz_longtext, 72 , ISUTF8 );
}
else
{
* Build a tree of all the plugins
*/
config_data = new ConfigTreeData;
- config_data->psz_section = NULL;
config_data->i_object_id = PLUGIN_ID;
- config_data->psz_help = wraptext( PLUGIN_HELP, WRAPCOUNT, ISUTF8 );
+ config_data->psz_help = wraptext( PLUGIN_HELP, 72, ISUTF8 );
config_data->psz_section = strdup( PLUGIN_TITLE );
- plugins_item = AppendItem( root_item, wxU(_("Plugins")),
- -1,-1,config_data );
+ plugins_item = AppendItem( root_item, wxU(_("Modules")),
+ -1, -1,config_data );
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
ConfigTreeData *config_data = new ConfigTreeData;
config_data->psz_section =
wraptext( GetCapabilityHelp( p_module->psz_capability , 1 ),
- WRAPCOUNT, ISUTF8 );
+ 72, ISUTF8 );
config_data->psz_help =
wraptext( GetCapabilityHelp( p_module->psz_capability , 2 ),
- WRAPCOUNT, ISUTF8 );
+ 72, ISUTF8 );
config_data->i_object_id = CAPABILITY_ID;
capability_item = AppendItem( plugins_item,
wxU(p_module->psz_capability),
i_child_index < GetChildrenCount( plugins_item, FALSE );
i_child_index++ )
{
- capability_item = GetNextChild( plugins_item, cookie );
SortChildren( capability_item );
+ capability_item = GetNextChild( plugins_item, cookie );
}
/* Clean-up everything */
void PrefsTreeCtrl::OnSelectTreeItem( wxTreeEvent& event )
{
- ConfigTreeData *config_data;
+ ConfigTreeData *config_data = NULL;
- config_data = FindModuleConfig( (ConfigTreeData *)GetItemData(
- event.GetOldItem() ) );
+ if( event.GetOldItem() )
+ config_data = FindModuleConfig( (ConfigTreeData *)GetItemData(
+ event.GetOldItem() ) );
if( config_data && config_data->panel )
{
config_data->panel->Hide();
wxArrayString array;
module_t *p_module = NULL;
-
+
/* Initializations */
p_intf = _p_intf;
p_prefs_dialog =_p_prefs_dialog,
/* Now put all the config options into a scrolled window */
config_sizer = new wxBoxSizer( wxVERTICAL );
config_window = new wxScrolledWindow( this, -1, wxDefaultPosition,
- wxDefaultSize, wxSTATIC_BORDER | wxHSCROLL | wxVSCROLL );
+ wxDefaultSize, wxBORDER_NONE | wxHSCROLL | wxVSCROLL );
config_window->SetAutoLayout( TRUE );
config_window->SetScrollRate( 5, 5 );
strcmp( psz_section, p_item->psz_text ) )
break;
- ConfigData *config_data =
- new ConfigData( p_item->i_type, p_item->b_advanced,
- p_item->psz_name );
-
- switch( p_item->i_type )
- {
- case CONFIG_ITEM_MODULE:
- config_data->control = new ModuleConfigControl( p_intf, p_item, config_window );
- break;
-
- case CONFIG_ITEM_STRING:
- if( !p_item->ppsz_list )
- {
- config_data->control = new StringConfigControl( p_item, config_window );
- }
- else
- {
- config_data->control = new StringListConfigControl( p_item, config_window );
- }
- break;
- case CONFIG_ITEM_FILE:
- case CONFIG_ITEM_DIRECTORY:
- config_data->control = new FileConfigControl( p_item, config_window );
- break;
-
- case CONFIG_ITEM_INTEGER:
- if( p_item->i_min != 0 || p_item->i_max != 0 )
- {
- config_data->control = new RangedIntConfigControl( p_item, config_window );
- }
- else
- {
- config_data->control = new IntegerConfigControl( p_item, config_window );
- }
- break;
-
- case CONFIG_ITEM_KEY:
- config_data->control = new KeyConfigControl( p_item, config_window );
- break;
-
- case CONFIG_ITEM_FLOAT:
- config_data->control = new FloatConfigControl( p_item, config_window );
- break;
-
- case CONFIG_ITEM_BOOL:
- config_data->control = new BoolConfigControl( p_item, config_window );
- break;
-
- default:
- break;
- }
+ ConfigControl *control =
+ CreateConfigControl( VLC_OBJECT(p_intf),
+ p_item, config_window );
/* Don't add items that were not recognized */
- if( config_data->control == NULL ) continue;
+ if( control == NULL ) continue;
/* Add the config data to our array so we can keep a trace of it */
- config_array.Add( config_data );
+ config_array.Add( control );
- config_sizer->Add( config_data->control, 0, wxEXPAND | wxALL, 2 );
+ config_sizer->Add( control, 0, wxEXPAND | wxALL, 2 );
}
while( p_item->i_type != CONFIG_HINT_END && p_item++ );
sizer->Add( help ,0 ,wxEXPAND | wxALL, 5 );
}
- }
+ vlc_object_release( p_module );
+ }
sizer->Layout();
SetSizer( sizer );
}
void PrefsPanel::ApplyChanges()
{
+ vlc_value_t val;
+
for( size_t i = 0; i < config_array.GetCount(); i++ )
{
- ConfigData *config_data = config_array.Item(i);
+ ConfigControl *control = config_array.Item(i);
- switch( config_data->i_config_type )
+ switch( control->GetType() )
{
case CONFIG_ITEM_STRING:
case CONFIG_ITEM_FILE:
case CONFIG_ITEM_DIRECTORY:
case CONFIG_ITEM_MODULE:
- config_PutPsz( p_intf, config_data->option_name.mb_str(), (char *)
- config_data->control->GetPszValue() );
+ config_PutPsz( p_intf, control->GetName().mb_str(),
+ control->GetPszValue().mb_str() );
break;
- case CONFIG_ITEM_INTEGER:
case CONFIG_ITEM_KEY:
+ /* So you don't need to restart to have the changes take effect */
+ val.i_int = control->GetIntValue();
+ var_Set( p_intf->p_vlc, control->GetName().mb_str(), val );
+ case CONFIG_ITEM_INTEGER:
case CONFIG_ITEM_BOOL:
- config_PutInt( p_intf, config_data->option_name.mb_str(),
- config_data->control->GetIntValue() );
+ config_PutInt( p_intf, control->GetName().mb_str(),
+ control->GetIntValue() );
break;
case CONFIG_ITEM_FLOAT:
- config_PutFloat( p_intf, config_data->option_name.mb_str(),
- config_data->control->GetFloatValue() );
+ config_PutFloat( p_intf, control->GetName().mb_str(),
+ control->GetFloatValue() );
break;
}
}
for( size_t i = 0; i < config_array.GetCount(); i++ )
{
- ConfigData *config_data = config_array.Item(i);
- if( config_data->b_advanced )
+ ConfigControl *control = config_array.Item(i);
+ if( control->IsAdvanced() )
{
- config_data->control->Show( b_advanced );
- config_sizer->Show( config_data->control, b_advanced );
+ control->Show( b_advanced );
+ config_sizer->Show( control, b_advanced );
}
}
config_window->FitInside();
config_window->Refresh();
}
- return;
+ return;
}