⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preferences_widgets.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************** * preferences_widgets.cpp : wxWindows plugin for vlc ***************************************************************************** * Copyright (C) 2000-2004 VideoLAN * $Id: preferences_widgets.cpp 11093 2005-05-21 15:07:46Z xtophe $ * * Authors: Gildas Bazin <gbazin@videolan.org> *          Sigmund Augdal <sigmunau@idi.ntnu.no> * * 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., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <stdlib.h>                                      /* malloc(), free() */#include <errno.h>                                                 /* ENOMEM */#include <string.h>                                            /* strerror() */#include <stdio.h>#include <vlc/vlc.h>#include <vlc/intf.h>#include <vlc_config_cat.h>#include "wxwindows.h"#include "preferences_widgets.h"#include <wx/statline.h>/***************************************************************************** * CreateConfigControl wrapper *****************************************************************************/ConfigControl *CreateConfigControl( vlc_object_t *p_this,                                    module_config_t *p_item, wxWindow *parent ){    ConfigControl *p_control = NULL;    /*Skip deprecated options */    if( p_item->psz_current )    {        return NULL;    }    switch( p_item->i_type )    {    case CONFIG_ITEM_MODULE:        p_control = new ModuleConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_MODULE_CAT:        p_control = new ModuleCatConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_MODULE_LIST_CAT:        p_control = new ModuleListCatConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_STRING:        if( !p_item->i_list )        {            p_control = new StringConfigControl( p_this, p_item, parent );        }        else        {            p_control = new StringListConfigControl( p_this, p_item, parent );        }        break;    case CONFIG_ITEM_FILE:    case CONFIG_ITEM_DIRECTORY:        p_control = new FileConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_INTEGER:        if( p_item->i_list )        {            p_control = new IntegerListConfigControl( p_this, p_item, parent );        }        else if( p_item->i_min != 0 || p_item->i_max != 0 )        {            p_control = new RangedIntConfigControl( p_this, p_item, parent );        }        else        {            p_control = new IntegerConfigControl( p_this, p_item, parent );        }        break;    case CONFIG_ITEM_KEY:        p_control = new KeyConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_FLOAT:        p_control = new FloatConfigControl( p_this, p_item, parent );        break;    case CONFIG_ITEM_BOOL:        p_control = new BoolConfigControl( p_this, p_item, parent );        break;    case CONFIG_SECTION:        p_control = new SectionConfigControl( p_this, p_item, parent );        break;    default:        break;    }    return p_control;}/***************************************************************************** * ConfigControl implementation *****************************************************************************/ConfigControl::ConfigControl( vlc_object_t *_p_this,                              module_config_t *p_item, wxWindow *parent )  : wxPanel( parent ), p_this( _p_this ),    pf_update_callback( NULL ), p_update_data( NULL ),    name( wxU(p_item->psz_name) ), i_type( p_item->i_type ),    b_advanced( p_item->b_advanced ){    sizer = new wxBoxSizer( wxHORIZONTAL );}ConfigControl::~ConfigControl(){}wxSizer *ConfigControl::Sizer(){    return sizer;}wxString ConfigControl::GetName(){    return name;}int ConfigControl::GetType(){    return i_type;}vlc_bool_t ConfigControl::IsAdvanced(){    return b_advanced;}void ConfigControl::SetUpdateCallback( void (*p_callback)( void * ),                                             void *p_data ){    pf_update_callback = p_callback;    p_update_data = p_data;}void ConfigControl::OnUpdate( wxCommandEvent& WXUNUSED(event) ){    if( pf_update_callback )    {        pf_update_callback( p_update_data );    }}void ConfigControl::OnUpdateScroll( wxScrollEvent& WXUNUSED(event) ){    wxCommandEvent cevent;    OnUpdate(cevent);}/***************************************************************************** * KeyConfigControl implementation *****************************************************************************/wxString *KeyConfigControl::m_keysList = NULL;KeyConfigControl::KeyConfigControl( vlc_object_t *p_this,                                    module_config_t *p_item, wxWindow *parent )  : ConfigControl( p_this, p_item, parent ){    // Number of keys descriptions    unsigned int i_keys = sizeof(vlc_keys)/sizeof(key_descriptor_t);    // Init the keys decriptions array    if( m_keysList == NULL )    {        m_keysList = new wxString[i_keys];        for( unsigned int i = 0; i < i_keys; i++ )        {            m_keysList[i] = wxU(vlc_keys[i].psz_key_string);        }    }    label = new wxStaticText(this, -1, wxU(p_item->psz_text));    alt = new wxCheckBox( this, -1, wxU(_("Alt")) );    alt->SetValue( p_item->i_value & KEY_MODIFIER_ALT );    ctrl = new wxCheckBox( this, -1, wxU(_("Ctrl")) );    ctrl->SetValue( p_item->i_value & KEY_MODIFIER_CTRL );    shift = new wxCheckBox( this, -1, wxU(_("Shift")) );    shift->SetValue( p_item->i_value & KEY_MODIFIER_SHIFT );    combo = new wxComboBox( this, -1, wxT(""), wxDefaultPosition,                            wxDefaultSize, i_keys, m_keysList,                            wxCB_READONLY );    for( unsigned int i = 0; i < i_keys; i++ )    {        combo->SetClientData( i, (void*)vlc_keys[i].i_key_code );        if( (unsigned int)vlc_keys[i].i_key_code ==            ( ((unsigned int)p_item->i_value) & ~KEY_MODIFIER ) )        {            combo->SetSelection( i );            combo->SetValue( wxU(_(vlc_keys[i].psz_key_string)) );        }    }    sizer->Add( label, 2, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );    sizer->Add( alt,   1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );    sizer->Add( ctrl,  1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );    sizer->Add( shift, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );    sizer->Add( combo, 2, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );    sizer->Layout();    this->SetSizerAndFit( sizer );}KeyConfigControl::~KeyConfigControl(){    if( m_keysList )    {        delete[] m_keysList;        m_keysList = NULL;    }}int KeyConfigControl::GetIntValue(){    int result = 0;    if( alt->IsChecked() )    {        result |= KEY_MODIFIER_ALT;    }    if( ctrl->IsChecked() )    {        result |= KEY_MODIFIER_CTRL;    }    if( shift->IsChecked() )    {        result |= KEY_MODIFIER_SHIFT;    }    int selected = combo->GetSelection();    if( selected != -1 )    {        result |= (int)combo->GetClientData( selected );    }    return result;}/***************************************************************************** * ModuleConfigControl implementation *****************************************************************************/ModuleConfigControl::ModuleConfigControl( vlc_object_t *p_this,                                          module_config_t *p_item,                                          wxWindow *parent )  : ConfigControl( p_this, p_item, parent ){    vlc_list_t *p_list;    module_t *p_parser;    label = new wxStaticText(this, -1, wxU(p_item->psz_text));    combo = new wxComboBox( this, -1, wxL2U(p_item->psz_value),                            wxDefaultPosition, wxDefaultSize,                            0, NULL, wxCB_READONLY | wxCB_SORT );    /* build a list of available modules */    p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );    combo->Append( wxU(_("Default")), (void *)NULL );    combo->SetSelection( 0 );    for( int i_index = 0; i_index < p_list->i_count; i_index++ )    {        p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !strcmp( p_parser->psz_capability, p_item->psz_type ) )        {            combo->Append( wxU(p_parser->psz_longname),                           p_parser->psz_object_name );            if( p_item->psz_value && !strcmp(p_item->psz_value,                                             p_parser->psz_object_name) )                combo->SetValue( wxU(p_parser->psz_longname) );        }    }    vlc_list_release( p_list );    combo->SetToolTip( wxU(p_item->psz_longtext) );    sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );    sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );    sizer->Layout();    this->SetSizerAndFit( sizer );}ModuleCatConfigControl::~ModuleCatConfigControl(){    ;}wxString ModuleCatConfigControl::GetPszValue(){    return wxU( (char *)combo->GetClientData( combo->GetSelection() ));}/***************************************************************************** * ModuleCatConfigControl implementation *****************************************************************************/ModuleCatConfigControl::ModuleCatConfigControl( vlc_object_t *p_this,                                                module_config_t *p_item,                                                wxWindow *parent )  : ConfigControl( p_this, p_item, parent ){    vlc_list_t *p_list;    module_t *p_parser;    label = new wxStaticText(this, -1, wxU(p_item->psz_text));    combo = new wxComboBox( this, -1, wxL2U(p_item->psz_value),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -