X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d63f7562cf9ccad9c430d4c2e2a8bd416a016d89..d8eff331e23435d9d8d6483a40f6fd9997a13f87:/samples/taborder/taborder.cpp diff --git a/samples/taborder/taborder.cpp b/samples/taborder/taborder.cpp index 62a49736b4..957841e074 100644 --- a/samples/taborder/taborder.cpp +++ b/samples/taborder/taborder.cpp @@ -22,9 +22,28 @@ #endif #ifndef WX_PRECOMP - #include "wx/wx.h" + #include "wx/app.h" + #include "wx/log.h" + #include "wx/frame.h" + #include "wx/menu.h" + #include "wx/sizer.h" + + #include "wx/panel.h" + #include "wx/msgdlg.h" + + #include "wx/button.h" + #include "wx/listbox.h" + #include "wx/stattext.h" + #include "wx/textctrl.h" #endif +#include "wx/notebook.h" + +#ifndef __WXMSW__ + #include "../sample.xpm" +#endif + + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -33,8 +52,8 @@ enum { // file menu - TabOrder_Quit = 100, - TabOrder_About, + TabOrder_Quit = wxID_EXIT, + TabOrder_About = wxID_ABOUT, // navigation menu TabOrder_TabForward = 200, @@ -78,16 +97,20 @@ private: void OnIdle(wxIdleEvent& event); - void DoNavigate(long flags) + void DoNavigate(int flags) { - wxNavigationKeyEvent event; - event.SetFlags(flags); - if ( ProcessEvent(event) ) - wxLogStatus(this, _T("Navigation event processed")); + if ( m_panel->NavigateIn(flags) ) + { + wxLogStatus(this, wxT("Navigation event processed")); + } else - wxLogStatus(this, _T("Navigation event ignored")); + { + wxLogStatus(this, wxT("Navigation event ignored")); + } } + wxPanel *m_panel; + DECLARE_EVENT_TABLE() }; @@ -96,6 +119,44 @@ class MyPanel : public wxPanel { public: MyPanel(wxWindow *parent); + +private: + wxWindow *CreateButtonPage(wxWindow *parent); + wxWindow *CreateTextPage(wxWindow *parent); +}; + +// a text control which checks if processing Tab presses in controls with +// wxTE_PROCESS_TAB style really works +class MyTabTextCtrl : public wxTextCtrl +{ +public: + MyTabTextCtrl(wxWindow *parent, const wxString& value, int flags = 0) + : wxTextCtrl(parent, wxID_ANY, value, + wxDefaultPosition, wxDefaultSize, + flags) + { + Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(MyTabTextCtrl::OnKeyDown)); + } + +private: + void OnKeyDown(wxKeyEvent& event) + { + if ( event.GetKeyCode() == WXK_TAB && + wxMessageBox + ( + wxT("Let the Tab be used for navigation?"), + wxT("wxWidgets TabOrder sample: Tab key pressed"), + wxICON_QUESTION | wxYES_NO, + this + ) != wxYES ) + { + // skip Skip() below: we consume the Tab press ourselves and so the + // focus shouldn't change + return; + } + + event.Skip(); + } }; // ============================================================================ @@ -134,27 +195,29 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) END_EVENT_TABLE() MyFrame::MyFrame() - : wxFrame(NULL, wxID_ANY, _T("TabOrder wxWidgets Sample"), + : wxFrame(NULL, wxID_ANY, wxT("TabOrder wxWidgets Sample"), wxDefaultPosition, wxSize(700, 450)) { + SetIcon(wxICON(sample)); + wxMenu *menuFile = new wxMenu; - menuFile->Append(TabOrder_About, _T("&About...\tF1")); + menuFile->Append(TabOrder_About); menuFile->AppendSeparator(); - menuFile->Append(TabOrder_Quit, _T("E&xit\tAlt-X"), _T("Quit the sample")); + menuFile->Append(TabOrder_Quit); wxMenu *menuNav = new wxMenu; - menuNav->Append(TabOrder_TabForward, _T("Tab &forward\tCtrl-F"), - _T("Emulate a press")); - menuNav->Append(TabOrder_TabBackward, _T("Tab &backward\tCtrl-B"), - _T("Emulate a press")); + menuNav->Append(TabOrder_TabForward, wxT("Tab &forward\tCtrl-F"), + wxT("Emulate a press")); + menuNav->Append(TabOrder_TabBackward, wxT("Tab &backward\tCtrl-B"), + wxT("Emulate a press")); wxMenuBar *mbar = new wxMenuBar; - mbar->Append(menuFile, _T("&File")); - mbar->Append(menuNav, _T("&Navigate")); + mbar->Append(menuFile, wxT("&File")); + mbar->Append(menuNav, wxT("&Navigate")); SetMenuBar(mbar); - new MyPanel(this); + m_panel = new MyPanel(this); CreateStatusBar(StatusPane_Max); } @@ -166,8 +229,8 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox(_T("Tab navigation sample\n(c) 2007 Vadim Zeitlin"), - _T("About TabOrder wxWidgets Sample"), wxOK, this); + wxMessageBox(wxT("Tab navigation sample\n(c) 2007 Vadim Zeitlin"), + wxT("About TabOrder wxWidgets Sample"), wxOK, this); } void MyFrame::OnTabForward(wxCommandEvent& WXUNUSED(event)) @@ -192,11 +255,11 @@ void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) ) wxString msg; if ( focus ) { - msg.Printf(_T("Focus is at %s"), s_windowFocus->GetName().c_str()); + msg.Printf(wxT("Focus is at %s"), s_windowFocus->GetName().c_str()); } else { - msg = _T("No focus"); + msg = wxT("No focus"); } SetStatusText(msg, StatusPane_Focus); @@ -209,16 +272,60 @@ void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) ) MyPanel::MyPanel(wxWindow *parent) : wxPanel(parent, wxID_ANY) +{ + wxNotebook *notebook = new wxNotebook(this, wxID_ANY); + notebook->AddPage(CreateButtonPage(notebook), wxT("Button")); + notebook->AddPage(CreateTextPage(notebook), wxT("Text")); + + wxSizer *sizerV = new wxBoxSizer(wxVERTICAL); + sizerV->Add(notebook, wxSizerFlags(1).Expand()); + + wxListBox *lbox = new wxListBox(this, wxID_ANY); + lbox->AppendString(wxT("Just a")); + lbox->AppendString(wxT("simple")); + lbox->AppendString(wxT("listbox")); + sizerV->Add(lbox, wxSizerFlags(1).Expand()); + + SetSizerAndFit(sizerV); +} + +wxWindow *MyPanel::CreateButtonPage(wxWindow *parent) +{ + wxSizerFlags flagsBorder = wxSizerFlags().Border().Centre(); + + wxPanel *page = new wxPanel(parent); + wxSizer *sizerPage = new wxBoxSizer(wxHORIZONTAL); + sizerPage->Add(new wxButton(page, wxID_ANY, wxT("&First")), flagsBorder); + sizerPage->Add(new wxStaticText(page, wxID_ANY, wxT("[st&atic]")), + flagsBorder); + sizerPage->Add(new wxButton(page, wxID_ANY, wxT("&Second")), flagsBorder); + + page->SetSizer(sizerPage); + + return page; +} + +wxWindow *MyPanel::CreateTextPage(wxWindow *parent) { wxSizerFlags flagsBorder = wxSizerFlags().Border(); + wxSizer *sizerPage = new wxBoxSizer(wxVERTICAL); + wxPanel *page = new wxPanel(parent); + wxSizer *sizerH = new wxBoxSizer(wxHORIZONTAL); - sizerH->Add(new wxButton(this, wxID_ANY, _T("&First")), flagsBorder); - sizerH->Add(new wxButton(this, wxID_ANY, _T("&Second")), flagsBorder); + sizerH->Add(new wxStaticText(page, wxID_ANY, wxT("&Label:")), flagsBorder); + sizerH->Add(new MyTabTextCtrl(page, wxT("TAB ignored here")), flagsBorder); + sizerPage->Add(sizerH, wxSizerFlags(1).Expand()); - wxSizer *sizerV = new wxBoxSizer(wxVERTICAL); - sizerV->Add(sizerH, wxSizerFlags(1).Expand()); - sizerV->Add(new wxListBox(this, wxID_ANY), wxSizerFlags(1).Expand()); - SetSizerAndFit(sizerV); + sizerH = new wxBoxSizer(wxHORIZONTAL); + sizerH->Add(new wxStaticText(page, wxID_ANY, wxT("&Another one:")), + flagsBorder); + sizerH->Add(new MyTabTextCtrl(page, wxT("press Tab here"), wxTE_PROCESS_TAB), + flagsBorder); + sizerPage->Add(sizerH, wxSizerFlags(1).Expand()); + + page->SetSizer(sizerPage); + + return page; }