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

📄 open.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************** * open.cpp : Open dialog box ***************************************************************************** * Copyright (C) 2000-2005 the VideoLAN team * $Id: open.cpp 18323 2006-12-07 22:40:39Z xtophe $ * * Authors: Gildas Bazin <gbazin@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. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include "dialogs/open.hpp"#include "dialogs/streamout.hpp"#include "dialogs/preferences_widgets.h"#include "dialogs/subtitles.hpp"#include "charset.h"#undef HAVE_LIBCDIO // Disable broken code#ifdef HAVE_LIBCDIO#include <cdio/cdio.h>#include <cdio/cd_types.h>#include <cdio/logging.h>#endif /* HAVE_LIBCDIO */#ifdef HAVE_VCDINFO#include <libvcd/version.h>/* There was a bug in libvcdinfo <= 23 which prevented C++ compilation */#if LIBVCD_VERSION_NUM > 23#include <libvcd/info.h>#endif /* LIBVCD_VERSION_NUM > 23 */#endif /* HAVE_VCDINFO */#include <wx/combobox.h>#include <wx/statline.h>#include <wx/tokenzr.h>#ifndef wxRB_SINGLE#   define wxRB_SINGLE 0#endif#define SELECTION_DISC_TYPE_DVD_MENUS 0#define SELECTION_DISC_TYPE_DVD       1#define SELECTION_DISC_TYPE_VCD       2#define SELECTION_DISC_TYPE_CDDA      3/***************************************************************************** * Event Table. *****************************************************************************//* IDs for the controls and the menu commands */enum{    Notebook_Event = wxID_HIGHEST,    MRL_Event,    FileBrowse_Event,    SubFileBrowse_Event,    FileName_Event,    SubFileName_Event,    DiscType_Event,#ifdef HAVE_LIBCDIO    DiscProbe_Event,#endif    DiscDevice_Event,    DiscTitle_Event,    DiscChapter_Event,    DiscSub_Event,    DiscAudio_Event,    NetType_Event,    NetRadio1_Event, NetRadio2_Event, NetRadio3_Event, NetRadio4_Event,    NetPort1_Event, NetPort2_Event, NetPort3_Event,    NetAddr1_Event, NetAddr2_Event, NetAddr3_Event, NetAddr4_Event,    NetForceIPv6_Event, NetTimeshift_Event,    SubsFileEnable_Event,    SubsFileSettings_Event,    SoutEnable_Event,    SoutSettings_Event,    CachingEnable_Event,    CachingChange_Event,    AdvancedOptions_Event};BEGIN_EVENT_TABLE(OpenDialog, wxDialog)    /* Button events */    EVT_BUTTON(wxID_OK, OpenDialog::OnOk)    EVT_BUTTON(wxID_CANCEL, OpenDialog::OnCancel)    EVT_NOTEBOOK_PAGE_CHANGED(Notebook_Event, OpenDialog::OnPageChange)    EVT_TEXT(MRL_Event, OpenDialog::OnMRLChange)    /* Events generated by the file panel */    EVT_TEXT(FileName_Event, OpenDialog::OnFilePanelChange)    EVT_BUTTON(FileBrowse_Event, OpenDialog::OnFileBrowse)    EVT_TEXT(SubFileName_Event, OpenDialog::OnSubFileChange)    EVT_BUTTON(SubFileBrowse_Event, OpenDialog::OnSubFileBrowse)    /* Events generated by the disc panel */    EVT_RADIOBOX(DiscType_Event, OpenDialog::OnDiscTypeChange)#ifdef HAVE_LIBCDIO    EVT_CHECKBOX(DiscProbe_Event, OpenDialog::OnDiscProbe)#endif    EVT_TEXT(DiscDevice_Event, OpenDialog::OnDiscDeviceChange)    EVT_TEXT(DiscDevice_Event, OpenDialog::OnDiscPanelChange)    EVT_TEXT(DiscTitle_Event, OpenDialog::OnDiscPanelChange)    EVT_SPINCTRL(DiscTitle_Event, OpenDialog::OnDiscPanelChangeSpin)    EVT_TEXT(DiscChapter_Event, OpenDialog::OnDiscPanelChange)    EVT_SPINCTRL(DiscChapter_Event, OpenDialog::OnDiscPanelChangeSpin)    EVT_TEXT(DiscSub_Event, OpenDialog::OnDiscPanelChange)    EVT_TEXT(DiscAudio_Event, OpenDialog::OnDiscPanelChange)    EVT_SPINCTRL(DiscSub_Event, OpenDialog::OnDiscPanelChangeSpin)    /* Events generated by the net panel */    EVT_RADIOBUTTON(NetRadio1_Event, OpenDialog::OnNetTypeChange)    EVT_RADIOBUTTON(NetRadio2_Event, OpenDialog::OnNetTypeChange)    EVT_RADIOBUTTON(NetRadio3_Event, OpenDialog::OnNetTypeChange)    EVT_RADIOBUTTON(NetRadio4_Event, OpenDialog::OnNetTypeChange)    EVT_TEXT(NetPort1_Event, OpenDialog::OnNetPanelChange)    EVT_SPINCTRL(NetPort1_Event, OpenDialog::OnNetPanelChangeSpin)    EVT_TEXT(NetPort2_Event, OpenDialog::OnNetPanelChange)    EVT_SPINCTRL(NetPort2_Event, OpenDialog::OnNetPanelChangeSpin)    EVT_TEXT(NetPort3_Event, OpenDialog::OnNetPanelChange)    EVT_SPINCTRL(NetPort3_Event, OpenDialog::OnNetPanelChangeSpin)    EVT_TEXT(NetAddr2_Event, OpenDialog::OnNetPanelChange)    EVT_TEXT(NetAddr3_Event, OpenDialog::OnNetPanelChange)    EVT_TEXT(NetAddr4_Event, OpenDialog::OnNetPanelChange)    EVT_CHECKBOX(NetForceIPv6_Event, OpenDialog::OnNetPanelChange)    EVT_CHECKBOX(NetTimeshift_Event, OpenDialog::OnNetPanelChange)    /* Events generated by the subtitle file buttons */    EVT_CHECKBOX(SubsFileEnable_Event, OpenDialog::OnSubsFileEnable)    EVT_BUTTON(SubsFileSettings_Event, OpenDialog::OnSubsFileSettings)    /* Events generated by the stream output buttons */    EVT_CHECKBOX(SoutEnable_Event, OpenDialog::OnSoutEnable)    EVT_BUTTON(SoutSettings_Event, OpenDialog::OnSoutSettings)    /* Events generated by the caching button */    EVT_CHECKBOX(CachingEnable_Event, OpenDialog::OnCachingEnable)    EVT_TEXT(CachingChange_Event, OpenDialog::OnCachingChange)    EVT_SPINCTRL(CachingChange_Event, OpenDialog::OnCachingChangeSpin)    /* Hide the window when the user closes the window */    EVT_CLOSE(OpenDialog::OnClose)END_EVENT_TABLE()/***************************************************************************** * AutoBuiltPanel. *****************************************************************************/WX_DEFINE_ARRAY(ConfigControl *, ArrayOfConfigControls);class AutoBuiltPanel : public wxPanel{public:    AutoBuiltPanel() { }    AutoBuiltPanel( wxWindow *, OpenDialog *, intf_thread_t *,                    const module_t * );    virtual ~AutoBuiltPanel() {}    void UpdateAdvancedMRL();    wxString name;    ArrayOfConfigControls config_array;    ArrayOfConfigControls advanced_config_array;    wxComboBox *p_advanced_mrl_combo;private:    intf_thread_t *p_intf;    OpenDialog *p_open_dialog;    void OnAdvanced( wxCommandEvent& event );    wxDialog *p_advanced_dialog;    DECLARE_EVENT_TABLE();};BEGIN_EVENT_TABLE(AutoBuiltPanel, wxPanel)    EVT_BUTTON(AdvancedOptions_Event, AutoBuiltPanel::OnAdvanced)END_EVENT_TABLE()static void AutoBuildCallback( void *p_data ){    ((OpenDialog *)p_data)->UpdateMRL();}static void AutoBuildAdvancedCallback( void *p_data ){    ((AutoBuiltPanel *)p_data)->UpdateAdvancedMRL();}AutoBuiltPanel::AutoBuiltPanel( wxWindow *parent, OpenDialog *dialog,                                intf_thread_t *_p_intf,                                const module_t *p_module )  : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize ),    name( wxU(p_module->psz_object_name) ),    p_advanced_mrl_combo( NULL ),    p_intf( _p_intf ), p_open_dialog( dialog ), p_advanced_dialog( NULL ){    wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );    module_config_t *p_item = p_module->p_config;    bool b_advanced = false;    if( p_item ) do    {        if( !(p_item->i_type & CONFIG_HINT) && p_item->b_advanced )            b_advanced = true;        if( p_item->i_type & CONFIG_HINT || p_item->b_advanced )            continue;        ConfigControl *control =            CreateConfigControl( VLC_OBJECT(p_intf), p_item, this );        config_array.Add( control );        /* Don't add items that were not recognized */        if( control == NULL ) continue;        control->SetUpdateCallback( AutoBuildCallback, (void *)dialog );        sizer->Add( control, 0, wxEXPAND | wxALL, 2 );    }    while( p_item->i_type != CONFIG_HINT_END && p_item++ );    if( b_advanced )    {        wxButton *button =            new wxButton( this, AdvancedOptions_Event,                          wxU(_("Advanced options...")) );        sizer->Add( button, 0, wxALL, 5 );        /* Build the advanced dialog */        p_advanced_dialog =            new wxDialog( this, -1, ((wxString)wxU(_("Advanced options"))) +                          wxT(" (") + wxU( p_module->psz_longname ) + wxT(")"),                          wxDefaultPosition, wxDefaultSize,                          wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER );        wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );        /* Create MRL combobox */        wxBoxSizer *mrl_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );        wxStaticBox *mrl_box =            new wxStaticBox( p_advanced_dialog, -1,                             wxU(_("Advanced options")) );        wxStaticBoxSizer *mrl_sizer =            new wxStaticBoxSizer( mrl_box, wxHORIZONTAL );        wxStaticText *mrl_label =            new wxStaticText( p_advanced_dialog, -1, wxU(_("Options:")) );        p_advanced_mrl_combo =            new wxComboBox( p_advanced_dialog, MRL_Event, wxT(""),                            wxDefaultPosition, wxDefaultSize );        mrl_sizer->Add( mrl_label, 0, wxALL | wxALIGN_CENTER, 5 );        mrl_sizer->Add( p_advanced_mrl_combo, 1, wxALL | wxALIGN_CENTER, 5 );        mrl_sizer_sizer->Add( mrl_sizer, 1, wxEXPAND | wxALL, 5 );        sizer->Add( mrl_sizer_sizer, 0, wxEXPAND | wxALL, 2 );        /* Add advanced options to panel */        module_config_t *p_item = p_module->p_config;        if( p_item ) do        {            if( p_item->i_type & CONFIG_HINT || !p_item->b_advanced )                continue;            ConfigControl *control =                CreateConfigControl( VLC_OBJECT(p_intf), p_item,                                     p_advanced_dialog );            advanced_config_array.Add( control );            /* Don't add items that were not recognized */            if( control == NULL ) continue;            control->SetUpdateCallback( AutoBuildAdvancedCallback,                                        (void *)this );            sizer->Add( control, 0, wxEXPAND | wxALL, 2 );        }        while( p_item->i_type != CONFIG_HINT_END && p_item++ );        /* Separation */        wxPanel *dummy_panel = new wxPanel( p_advanced_dialog, -1 );        sizer->Add( dummy_panel, 1 );        wxStaticLine *static_line =            new wxStaticLine( p_advanced_dialog, wxID_OK );        sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );        /* Create buttons */        wxButton *ok_button =            new wxButton( p_advanced_dialog, wxID_OK, wxU(_("&OK")) );        ok_button->SetDefault();        wxButton *cancel_button =            new wxButton( p_advanced_dialog, wxID_CANCEL, wxU(_("&Cancel")) );        wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;        button_sizer->AddButton( ok_button );        button_sizer->AddButton( cancel_button );        button_sizer->Realize();        sizer->Add( button_sizer, 0, wxEXPAND|wxALL, 5 );        sizer->SetMinSize( 400, -1 );        p_advanced_dialog->SetSizerAndFit( sizer );    }    this->SetSizerAndFit( sizer );}void AutoBuiltPanel::OnAdvanced( wxCommandEvent& event ){    if( p_advanced_dialog->ShowModal() == wxID_OK )    {        UpdateAdvancedMRL();        p_open_dialog->UpdateMRL();    }}void AutoBuiltPanel::UpdateAdvancedMRL(){    wxString mrltemp;    for( int i = 0; i < (int)advanced_config_array.GetCount(); i++ )    {        ConfigControl *control = advanced_config_array.Item(i);        mrltemp += (i ? wxT(" :") : wxT(":"));        if( control->GetType() == CONFIG_ITEM_BOOL &&            !control->GetIntValue() ) mrltemp += wxT("no-");        mrltemp += control->GetName();        switch( control->GetType() )        {        case CONFIG_ITEM_STRING:        case CONFIG_ITEM_FILE:        case CONFIG_ITEM_DIRECTORY:        case CONFIG_ITEM_MODULE:            mrltemp += wxT("=\"") + control->GetPszValue() + wxT("\"");            break;        case CONFIG_ITEM_INTEGER:            mrltemp +=                wxString::Format( wxT("=%i"), control->GetIntValue() );            break;        case CONFIG_ITEM_FLOAT:            mrltemp +=                wxString::Format(wxT("=%f"), control->GetFloatValue());            break;        }    }    p_advanced_mrl_combo->SetValue( mrltemp );}

⌨️ 快捷键说明

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