X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/361484a8dbd89a904c67008e0b6507b2d735fcf0..59c516a34ad204cf096798b9176425655aaa0d18:/samples/controls/controls.cpp diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 17daa27230..a3ec62f705 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -24,6 +24,7 @@ #include "wx/bookctrl.h" #include "wx/imaglist.h" #include "wx/artprov.h" +#include "wx/cshelp.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -189,6 +190,7 @@ public: #endif // wxUSE_TOOLTIPS void OnEnableAll(wxCommandEvent& event); + void OnContextHelp(wxCommandEvent& event); void OnIdle( wxIdleEvent& event ); void OnIconized( wxIconizeEvent& event ); @@ -291,7 +293,9 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxRadioBoxNameStr) : wxRadioBox(parent, id, title, pos, size, n, choices, majorDim, - style, validator, name) { SetForegroundColour(*wxRED); } + style, validator, name) + { + } protected: void OnFocusGot(wxFocusEvent& event) @@ -376,7 +380,8 @@ enum CONTROLS_ENABLE_TOOLTIPS, // panel menu - CONTROLS_ENABLE_ALL + CONTROLS_ENABLE_ALL, + CONTROLS_CONTEXT_HELP }; bool MyApp::OnInit() @@ -394,6 +399,10 @@ bool MyApp::OnInit() wxSscanf(wxString(argv[2]), wxT("%d"), &y); } +#if wxUSE_HELP + wxHelpProvider::Set( new wxSimpleHelpProvider ); +#endif // wxUSE_HELP + // Create the main frame window MyFrame *frame = new MyFrame(_T("Controls wxWidgets App"), x, y); frame->Show(true); @@ -478,6 +487,8 @@ const int ID_SIZER_CHECK4 = 204; const int ID_SIZER_CHECK14 = 205; const int ID_SIZER_CHECKBIG = 206; +const int ID_HYPERLINK = 300; + BEGIN_EVENT_TABLE(MyPanel, wxPanel) EVT_IDLE ( MyPanel::OnIdle) EVT_BOOKCTRL_PAGE_CHANGING(ID_BOOK, MyPanel::OnPageChanging) @@ -621,7 +632,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_text = new wxTextCtrl(this, wxID_ANY, _T("This is the log window.\n"), wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE); - m_text->SetBackgroundColour(wxT("wheat")); m_logTargetOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_text)); @@ -743,7 +753,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxButton *button = new MyButton( panel, ID_LISTBOX_FONT, _T("Set &Italic font"), wxPoint(340,130), wxSize(140,30) ); button->SetDefault(); - button->SetForegroundColour(*wxBLUE); #if wxUSE_TOOLTIPS button->SetToolTip( _T("Press here to set italic font") ); @@ -770,7 +779,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) SetChoiceClientData(wxT("choice"), m_choiceSorted); m_choice->SetSelection(2); - m_choice->SetBackgroundColour( wxT("red") ); (void)new wxButton( panel, ID_CHOICE_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); (void)new wxButton( panel, ID_CHOICE_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); (void)new wxButton( panel, ID_CHOICE_CLEAR, _T("&Clear"), wxPoint(180,80), wxSize(140,30) ); @@ -788,8 +796,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_combo = new MyComboBox( panel, ID_COMBO, _T("This"), wxPoint(20,25), wxSize(120, wxDefaultCoord), 5, choices, - wxPROCESS_ENTER); - m_combo->SetBackgroundColour(*wxBLUE); + wxTE_PROCESS_ENTER); (void)new wxButton( panel, ID_COMBO_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); (void)new wxButton( panel, ID_COMBO_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) ); @@ -810,15 +817,33 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) }; panel = new wxPanel(m_book); - (void)new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS ); + wxRadioBox *radio2 = new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS ); m_radio = new wxRadioBox( panel, ID_RADIOBOX, _T("T&his"), wxPoint(10,10), wxDefaultSize, WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS ); - m_radio->SetForegroundColour(*wxRED); #if wxUSE_TOOLTIPS m_combo->SetToolTip(_T("This is a natural\ncombobox - can you believe me?")); - m_radio->SetToolTip(_T("Ever seen a radiobox?")); + radio2->SetToolTip(_T("Ever seen a radiobox?")); + + //m_radio->SetToolTip(_T("Tooltip for the entire radiobox")); + for ( unsigned int nb = 0; nb < WXSIZEOF(choices); nb++ ) + { + m_radio->SetItemToolTip(nb, _T("tooltip for\n") + choices[nb]); + } + + // remove the tooltip for one of the items + m_radio->SetItemToolTip(2, _T("")); #endif // wxUSE_TOOLTIPS +#if wxUSE_HELP + for( unsigned int item = 0; item < WXSIZEOF(choices); ++item ) + m_radio->SetItemHelpText( item, wxString::Format( _T("Help text for \"%s\""), choices[item].c_str() ) ); + + // erase help text for the second item + m_radio->SetItemHelpText( 1, _T("") ); + // set default help text for control + m_radio->SetHelpText( _T("Default helptext for wxRadioBox") ); +#endif // wxUSE_HELP + (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) ); (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, _T("&Select 'This'"), wxPoint(180,80), wxSize(140,30) ); m_fontButton = new wxButton( panel, ID_SET_FONT, _T("Set &more Italic font"), wxPoint(340,30), wxSize(140,30) ); @@ -842,8 +867,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxBoxSizer *sz = new wxBoxSizer( wxVERTICAL ); gauge_sizer->Add( sz ); m_gauge = new wxGauge( panel, wxID_ANY, 200, wxDefaultPosition, wxSize(155, 30), wxGA_HORIZONTAL|wxNO_BORDER ); - m_gauge->SetBackgroundColour(*wxGREEN); - m_gauge->SetForegroundColour(*wxRED); sz->Add( m_gauge, 0, wxALL, 10 ); m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxDefaultPosition, wxSize(155,wxDefaultCoord), @@ -916,7 +939,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) #if wxUSE_SPINCTRL m_spinctrl = new wxSpinCtrl( panel, ID_SPINCTRL, wxEmptyString, wxPoint(200, 160), wxSize(80, wxDefaultCoord) ); - m_spinctrl->SetRange(10,30); + m_spinctrl->SetRange(-10,30); m_spinctrl->SetValue(15); #endif // wxUSE_SPINCTRL @@ -938,7 +961,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) wxBitmap bitmap( 100, 100 ); wxMemoryDC dc; dc.SelectObject( bitmap ); - dc.SetPen(*wxGREEN_PEN); + dc.SetBackground(*wxGREEN); + dc.SetPen(*wxRED_PEN); dc.Clear(); dc.DrawEllipse(5, 5, 90, 90); dc.DrawText(_T("Bitmap"), 30, 40); @@ -983,7 +1007,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) m_book->AddPage(panel, _T("wxBitmapXXX")); // sizer - panel = new wxPanel(m_book); panel->SetAutoLayout( true ); @@ -1052,6 +1075,13 @@ void MyPanel::OnIdle(wxIdleEvent& event) static const int INVALID_SELECTION = -2; static int s_selCombo = INVALID_SELECTION; + + if (!m_combo || !m_choice) + { + event.Skip(); + return; + } + int sel = m_combo->GetSelection(); if ( sel != s_selCombo ) { @@ -1155,8 +1185,6 @@ void MyPanel::OnChangeColour(wxCommandEvent& WXUNUSED(event)) void MyPanel::OnListBox( wxCommandEvent &event ) { -// GetParent()->Move(100, 100); - if (event.GetInt() == -1) { m_text->AppendText( _T("ListBox has no selections anymore\n") ); @@ -1169,9 +1197,15 @@ void MyPanel::OnListBox( wxCommandEvent &event ) m_text->AppendText( _T("ListBox event selection string is: '") ); m_text->AppendText( event.GetString() ); m_text->AppendText( _T("'\n") ); - m_text->AppendText( _T("ListBox control selection string is: '") ); - m_text->AppendText( listbox->GetStringSelection() ); - m_text->AppendText( _T("'\n") ); + + // can't use GetStringSelection() with multiple selections, there could be + // more than one of them + if ( !listbox->HasFlag(wxLB_MULTIPLE) ) + { + m_text->AppendText( _T("ListBox control selection string is: '") ); + m_text->AppendText( listbox->GetStringSelection() ); + m_text->AppendText( _T("'\n") ); + } wxStringClientData *obj = ((wxStringClientData *)event.GetClientObject()); m_text->AppendText( _T("ListBox event client data string is: '") ); @@ -1182,7 +1216,7 @@ void MyPanel::OnListBox( wxCommandEvent &event ) m_text->AppendText( _T("'\n") ); m_text->AppendText( _T("ListBox control client data string is: '") ); - obj = (wxStringClientData *)listbox->GetClientObject(listbox->GetSelection()); + obj = (wxStringClientData *)listbox->GetClientObject(event.GetInt()); if (obj) m_text->AppendText( obj->GetData() ); else @@ -1354,6 +1388,9 @@ void MyPanel::OnChoiceButtons( wxCommandEvent &event ) void MyPanel::OnCombo( wxCommandEvent &event ) { + if (!m_combo) + return; + wxLogMessage(_T("EVT_COMBOBOX: item %d/%d (event/control), string \"%s\"/\"%s\""), (int)event.GetInt(), m_combo->GetSelection(), @@ -1363,15 +1400,17 @@ void MyPanel::OnCombo( wxCommandEvent &event ) void MyPanel::OnComboTextChanged(wxCommandEvent& event) { - wxLogMessage(wxT("EVT_TEXT for the combobox: \"%s\" (event) or \"%s\" (control)."), - event.GetString().c_str(), - m_combo->GetValue().c_str()); + if (m_combo) + wxLogMessage(wxT("EVT_TEXT for the combobox: \"%s\" (event) or \"%s\" (control)."), + event.GetString().c_str(), + m_combo->GetValue().c_str()); } void MyPanel::OnComboTextEnter(wxCommandEvent& WXUNUSED(event)) { - wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."), - m_combo->GetValue().c_str()); + if (m_combo) + wxLogMessage(_T("Enter pressed in the combobox: value is '%s'."), + m_combo->GetValue().c_str()); } void MyPanel::OnComboButtons( wxCommandEvent &event ) @@ -1444,27 +1483,20 @@ void MyPanel::OnRadioButtons( wxCommandEvent &event ) switch (event.GetId()) { case ID_RADIOBOX_ENABLE: - { - m_radio->Enable( event.GetInt() == 0 ); - break; - } + m_radio->Enable( event.GetInt() == 0 ); + break; + case ID_RADIOBOX_SEL_NUM: - { - m_radio->SetSelection( 2 ); - break; - } + m_radio->SetSelection( 2 ); + break; + case ID_RADIOBOX_SEL_STR: - { - m_radio->SetStringSelection( _T("This") ); - break; - } - case ID_RADIOBOX_FONT: - { - m_radio->SetForegroundColour(*wxGREEN); + m_radio->SetStringSelection( _T("This") ); + break; - m_radio->SetFont( *wxITALIC_FONT ); - break; - } + case ID_RADIOBOX_FONT: + m_radio->SetFont( *wxITALIC_FONT ); + break; } } @@ -1510,7 +1542,7 @@ void MyPanel::OnSpinCtrl(wxSpinEvent& event) if ( m_spinctrl ) { wxString s; - s.Printf( _T("Spin ctrl changed: now %d (from event: %ld)\n"), + s.Printf( _T("Spin ctrl changed: now %d (from event: %d)\n"), m_spinctrl->GetValue(), event.GetInt() ); m_text->AppendText(s); } @@ -1521,7 +1553,7 @@ void MyPanel::OnSpinCtrlUp(wxSpinEvent& event) if ( m_spinctrl ) { m_text->AppendText( wxString::Format( - _T("Spin up: %d (from event: %ld)\n"), + _T("Spin up: %d (from event: %d)\n"), m_spinctrl->GetValue(), event.GetInt() ) ); } } @@ -1531,7 +1563,7 @@ void MyPanel::OnSpinCtrlDown(wxSpinEvent& event) if ( m_spinctrl ) { m_text->AppendText( wxString::Format( - _T("Spin down: %d (from event: %ld)\n"), + _T("Spin down: %d (from event: %d)\n"), m_spinctrl->GetValue(), event.GetInt() ) ); } } @@ -1704,6 +1736,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) #endif // wxUSE_TOOLTIPS EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll) + EVT_MENU(CONTROLS_CONTEXT_HELP, MyFrame::OnContextHelp) EVT_ICONIZE(MyFrame::OnIconized) EVT_MAXIMIZE(MyFrame::OnMaximized) @@ -1714,8 +1747,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) END_EVENT_TABLE() MyFrame::MyFrame(const wxChar *title, int x, int y) - : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(500, 430)) + : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(700, 450)) { + SetHelpText( _T("Controls sample demonstrating various widgets") ); + // Give it an icon // The wxICON() macros loads an icon from a resource under Windows // and uses an #included XPM image under GTK+ and Motif @@ -1748,6 +1783,8 @@ MyFrame::MyFrame(const wxChar *title, int x, int y) wxMenu *panel_menu = new wxMenu; panel_menu->Append(CONTROLS_ENABLE_ALL, _T("&Disable all\tCtrl-E"), _T("Enable/disable all panel controls"), true); + panel_menu->Append(CONTROLS_CONTEXT_HELP, _T("&Context help...\tCtrl-H"), + _T("Get context help for a control")); menu_bar->Append(panel_menu, _T("&Panel")); SetMenuBar(menu_bar); @@ -1757,8 +1794,6 @@ MyFrame::MyFrame(const wxChar *title, int x, int y) #endif // wxUSE_STATUSBAR m_panel = new MyPanel( this, 10, 10, 300, 100 ); - - SetSizeHints( 500, 425 ); } void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) ) @@ -1821,6 +1856,12 @@ void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event)) m_panel->Enable(s_enable); } +void MyFrame::OnContextHelp(wxCommandEvent& WXUNUSED(event)) +{ + // starts a local event loop + wxContextHelp chelp(this); +} + void MyFrame::OnMove( wxMoveEvent& event ) { #if wxUSE_STATUSBAR