📄 open.cpp
字号:
/***************************************************************************** * 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 + -