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

📄 open.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/***************************************************************************** * open.cpp : wxWindows plugin for vlc ***************************************************************************** * Copyright (C) 2000-2005 VideoLAN * $Id: open.cpp 10802 2005-04-24 20:44:36Z zorglub $ * * 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., 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 <wx/combobox.h>#include <wx/statline.h>#include <wx/tokenzr.h>#include <vlc/intf.h>#include <vector>#include "wxwindows.h"#include "preferences_widgets.h"#ifndef wxRB_SINGLE#   define wxRB_SINGLE 0#endif/***************************************************************************** * Event Table. *****************************************************************************//* IDs for the controls and the menu commands */enum{    Notebook_Event = wxID_HIGHEST,    MRL_Event,    FileBrowse_Event,    FileName_Event,    DiscType_Event,    DiscDevice_Event,    DiscTitle_Event,    DiscChapter_Event,    DiscSub_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)    /* Events generated by the disc panel */    EVT_RADIOBOX(DiscType_Event, OpenDialog::OnDiscTypeChange)    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_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")) );        wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );        button_sizer->Add( ok_button, 0, wxALL, 5 );        button_sizer->Add( cancel_button, 0, wxALL, 5 );        button_sizer->Layout();        sizer->Add( button_sizer, 0, wxALL, 0 );        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 );}/***************************************************************************** * Constructor. *****************************************************************************/OpenDialog::OpenDialog( intf_thread_t *_p_intf, wxWindow *_p_parent,                        int i_access_method, int i_arg ):      wxDialog( _p_parent, -1, wxU(_("Open...")), wxDefaultPosition,             wxDefaultSize, wxDEFAULT_FRAME_STYLE ){    OpenDialog( _p_intf, _p_parent, i_access_method, i_arg, OPEN_NORMAL );

⌨️ 快捷键说明

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