📄 preferences_widgets.cpp
字号:
: ConfigControl( p_this, p_item, parent ){ directory = p_item->i_type == CONFIG_ITEM_DIRECTORY; label = new wxStaticText(this, -1, wxU(p_item->psz_text)); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); textctrl = new wxTextCtrl( this, -1, wxL2U(p_item->psz_value), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); textctrl->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( textctrl, 1, wxALL, 5 ); browse = new wxButton( this, wxID_HIGHEST, wxU(_("Browse...")) ); sizer->Add( browse, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); sizer->Layout(); this->SetSizerAndFit( sizer );}BEGIN_EVENT_TABLE(FileConfigControl, wxPanel) /* Button events */ EVT_BUTTON(wxID_HIGHEST, FileConfigControl::OnBrowse)END_EVENT_TABLE()void FileConfigControl::OnBrowse( wxCommandEvent& event ){ if( directory ) { wxDirDialog dialog( this, wxU(_("Choose directory")) ); if( dialog.ShowModal() == wxID_OK ) { textctrl->SetValue( dialog.GetPath() ); } } else { wxFileDialog dialog( this, wxU(_("Choose file")), wxT(""), wxT(""), wxT("*.*"),#if defined( __WXMSW__ ) wxOPEN#else wxOPEN#endif ); if( dialog.ShowModal() == wxID_OK ) { textctrl->SetValue( dialog.GetPath() ); } }}FileConfigControl::~FileConfigControl(){ ;}wxString FileConfigControl::GetPszValue(){ return textctrl->GetValue();}/***************************************************************************** * IntegerConfigControl implementation *****************************************************************************/BEGIN_EVENT_TABLE(IntegerConfigControl, wxPanel) EVT_TEXT(-1, IntegerConfigControl::OnUpdate) EVT_COMMAND_SCROLL(-1, IntegerConfigControl::OnUpdateScroll)END_EVENT_TABLE()IntegerConfigControl::IntegerConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ label = new wxStaticText(this, -1, wxU(p_item->psz_text)); spin = new wxSpinCtrl( this, -1, wxString::Format(wxT("%d"), p_item->i_value), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -100000000, 100000000, p_item->i_value); spin->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Add( spin, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer ); i_value = p_item->i_value;}IntegerConfigControl::~IntegerConfigControl(){ ;}int IntegerConfigControl::GetIntValue(){ /* We avoid using GetValue because of a recursion bug with wxSpinCtrl with * wxGTK. */ return spin->GetValue();}void IntegerConfigControl::OnUpdate( wxCommandEvent &event ){ ConfigControl::OnUpdate( event );}void IntegerConfigControl::OnUpdateScroll( wxScrollEvent &event ){ wxCommandEvent cevent; cevent.SetInt(event.GetPosition()); OnUpdate(cevent);}/***************************************************************************** * IntegerListConfigControl implementation *****************************************************************************/IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ label = new wxStaticText(this, -1, wxU(p_item->psz_text)); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); combo = new wxComboBox( this, -1, wxT(""), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); UpdateCombo( p_item ); combo->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer );}IntegerListConfigControl::~IntegerListConfigControl(){}void IntegerListConfigControl::UpdateCombo( module_config_t *p_item ){ /* build a list of available options */ for( int i_index = 0; i_index < p_item->i_list; i_index++ ) { if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] ) { combo->Append( wxU(p_item->ppsz_list_text[i_index]) ); } else { combo->Append( wxString::Format(wxT("%i"), p_item->pi_list[i_index]) ); } combo->SetClientData( i_index, (void *)p_item->pi_list[i_index] ); if( p_item->i_value == p_item->pi_list[i_index] ) { combo->SetSelection( i_index ); if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] ) { combo->SetValue( wxU(p_item->ppsz_list_text[i_index]) ); } else { combo->SetValue( wxString::Format(wxT("%i"), p_item->pi_list[i_index]) ); } } }}BEGIN_EVENT_TABLE(IntegerListConfigControl, wxPanel) /* Button events */ EVT_BUTTON(-1, IntegerListConfigControl::OnAction) /* Update events */ EVT_TEXT(-1, IntegerListConfigControl::OnUpdate)END_EVENT_TABLE()void IntegerListConfigControl::OnAction( wxCommandEvent& event ){ int i_action = event.GetId() - wxID_HIGHEST; module_config_t *p_item; p_item = config_FindConfig( p_this, GetName().mb_str(wxConvUTF8) ); if( !p_item ) return; if( i_action < 0 || i_action >= p_item->i_action ) return; vlc_value_t val; val.i_int = GetIntValue(); p_item->ppf_action[i_action]( p_this, GetName().mb_str(wxConvUTF8), val, val, 0 ); if( p_item->b_dirty ) { combo->Clear(); UpdateCombo( p_item ); p_item->b_dirty = VLC_FALSE; }}int IntegerListConfigControl::GetIntValue(){ int selected = combo->GetSelection(); if( selected != -1 ) { return (int)combo->GetClientData( selected ); } return -1;}/***************************************************************************** * RangedIntConfigControl implementation *****************************************************************************/BEGIN_EVENT_TABLE(RangedIntConfigControl, wxPanel) EVT_COMMAND_SCROLL(-1, RangedIntConfigControl::OnUpdateScroll)END_EVENT_TABLE()RangedIntConfigControl::RangedIntConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ label = new wxStaticText(this, -1, wxU(p_item->psz_text)); slider = new wxSlider( this, -1, p_item->i_value, p_item->i_min, p_item->i_max, wxDefaultPosition, wxDefaultSize, wxSL_LABELS | wxSL_HORIZONTAL ); slider->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer );}RangedIntConfigControl::~RangedIntConfigControl(){ ;}int RangedIntConfigControl::GetIntValue(){ return slider->GetValue();}/***************************************************************************** * FloatConfigControl implementation *****************************************************************************/BEGIN_EVENT_TABLE(FloatConfigControl, wxPanel) EVT_TEXT(-1, FloatConfigControl::OnUpdate)END_EVENT_TABLE()FloatConfigControl::FloatConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ label = new wxStaticText(this, -1, wxU(p_item->psz_text)); textctrl = new wxTextCtrl( this, -1, wxString::Format(wxT("%f"), p_item->f_value), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); textctrl->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Add( textctrl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); sizer->Layout(); this->SetSizerAndFit( sizer );}FloatConfigControl::~FloatConfigControl(){ ;}float FloatConfigControl::GetFloatValue(){ float f_value; if( (wxSscanf(textctrl->GetValue(), wxT("%f"), &f_value) == 1) ) return f_value; else return 0.0;}/***************************************************************************** * BoolConfigControl implementation *****************************************************************************/BEGIN_EVENT_TABLE(BoolConfigControl, wxPanel) EVT_CHECKBOX(-1, BoolConfigControl::OnUpdate)END_EVENT_TABLE()BoolConfigControl::BoolConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ checkbox = new wxCheckBox( this, -1, wxU(p_item->psz_text) ); if( p_item->i_value ) checkbox->SetValue(TRUE); checkbox->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( checkbox, 0, wxALL, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer );}BoolConfigControl::~BoolConfigControl(){ ;}int BoolConfigControl::GetIntValue(){ if( checkbox->IsChecked() ) return 1; else return 0;}/***************************************************************************** * SectionConfigControl implementation *****************************************************************************/SectionConfigControl::SectionConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ){ delete sizer; sizer = new wxBoxSizer( wxVERTICAL ); sizer->Add( new wxStaticText( this, -1, wxU( p_item->psz_text ) ) ); sizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer );}SectionConfigControl::~SectionConfigControl(){ ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -