1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Sample for testing TAB navigation
4 // Author: Vadim Zeitlin
6 // Copyright: (c) 2007 Vadim Zeitlin
7 // Licence: wxWindows license
8 /////////////////////////////////////////////////////////////////////////////
10 // ============================================================================
12 // ============================================================================
14 // ----------------------------------------------------------------------------
16 // ----------------------------------------------------------------------------
18 #include "wx/wxprec.h"
28 // ----------------------------------------------------------------------------
30 // ----------------------------------------------------------------------------
32 // menu commands and controls ids
40 TabOrder_TabForward
= 200,
46 // status panes: first one is for temporary messages, the second one shows
55 // ----------------------------------------------------------------------------
56 // declarations of the classes used in this sample
57 // ----------------------------------------------------------------------------
59 // the main application class
60 class MyApp
: public wxApp
63 virtual bool OnInit();
66 // and the main sample window
67 class MyFrame
: public wxFrame
73 void OnAbout(wxCommandEvent
& event
);
74 void OnQuit(wxCommandEvent
& event
);
76 void OnTabForward(wxCommandEvent
& event
);
77 void OnTabBackward(wxCommandEvent
& event
);
79 void OnIdle(wxIdleEvent
& event
);
81 void DoNavigate(long flags
)
83 wxNavigationKeyEvent event
;
84 event
.SetFlags(flags
);
85 if ( m_panel
->ProcessEvent(event
) )
86 wxLogStatus(this, _T("Navigation event processed"));
88 wxLogStatus(this, _T("Navigation event ignored"));
97 // and the panel taking up MyFrame client area
98 class MyPanel
: public wxPanel
101 MyPanel(wxWindow
*parent
);
104 // ============================================================================
106 // ============================================================================
108 // ----------------------------------------------------------------------------
110 // ----------------------------------------------------------------------------
116 if ( !wxApp
::OnInit() )
119 MyFrame
*frame
= new MyFrame
;
125 // ----------------------------------------------------------------------------
127 // ----------------------------------------------------------------------------
129 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
130 EVT_MENU(TabOrder_Quit
, MyFrame
::OnQuit
)
131 EVT_MENU(TabOrder_About
, MyFrame
::OnAbout
)
133 EVT_MENU(TabOrder_TabForward
, MyFrame
::OnTabForward
)
134 EVT_MENU(TabOrder_TabBackward
, MyFrame
::OnTabBackward
)
136 EVT_IDLE(MyFrame
::OnIdle
)
140 : wxFrame(NULL
, wxID_ANY
, _T("TabOrder wxWidgets Sample"),
141 wxDefaultPosition
, wxSize(700, 450))
143 wxMenu
*menuFile
= new wxMenu
;
144 menuFile
->Append(TabOrder_About
, _T("&About...\tF1"));
145 menuFile
->AppendSeparator();
146 menuFile
->Append(TabOrder_Quit
, _T("E&xit\tAlt-X"), _T("Quit the sample"));
148 wxMenu
*menuNav
= new wxMenu
;
149 menuNav
->Append(TabOrder_TabForward
, _T("Tab &forward\tCtrl-F"),
150 _T("Emulate a <Tab> press"));
151 menuNav
->Append(TabOrder_TabBackward
, _T("Tab &backward\tCtrl-B"),
152 _T("Emulate a <Shift-Tab> press"));
154 wxMenuBar
*mbar
= new wxMenuBar
;
155 mbar
->Append(menuFile
, _T("&File"));
156 mbar
->Append(menuNav
, _T("&Navigate"));
160 m_panel
= new MyPanel(this);
162 CreateStatusBar(StatusPane_Max
);
165 void MyFrame
::OnQuit(wxCommandEvent
& WXUNUSED(event
))
170 void MyFrame
::OnAbout(wxCommandEvent
& WXUNUSED(event
))
172 wxMessageBox(_T("Tab navigation sample\n(c) 2007 Vadim Zeitlin"),
173 _T("About TabOrder wxWidgets Sample"), wxOK
, this);
176 void MyFrame
::OnTabForward(wxCommandEvent
& WXUNUSED(event
))
178 DoNavigate(wxNavigationKeyEvent
::IsForward
| wxNavigationKeyEvent
::FromTab
);
181 void MyFrame
::OnTabBackward(wxCommandEvent
& WXUNUSED(event
))
183 DoNavigate(wxNavigationKeyEvent
::IsBackward
| wxNavigationKeyEvent
::FromTab
);
186 void MyFrame
::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
188 // track the window which has the focus in the status bar
189 static wxWindow
*s_windowFocus
= NULL
;
190 wxWindow
*focus
= wxWindow
::FindFocus();
191 if ( focus
!= s_windowFocus
)
193 s_windowFocus
= focus
;
198 msg
.Printf(_T("Focus is at %s"), s_windowFocus
->GetName().c_str());
202 msg
= _T("No focus");
205 SetStatusText(msg
, StatusPane_Focus
);
209 // ----------------------------------------------------------------------------
211 // ----------------------------------------------------------------------------
213 MyPanel
::MyPanel(wxWindow
*parent
)
214 : wxPanel(parent
, wxID_ANY
)
216 wxSizerFlags flagsBorder
= wxSizerFlags().Border();
218 wxSizer
*sizerH
= new wxBoxSizer(wxHORIZONTAL
);
219 sizerH
->Add(new wxButton(this, wxID_ANY
, _T("&First")), flagsBorder
);
220 sizerH
->Add(new wxButton(this, wxID_ANY
, _T("&Second")), flagsBorder
);
222 wxSizer
*sizerV
= new wxBoxSizer(wxVERTICAL
);
223 sizerV
->Add(sizerH
, wxSizerFlags(1).Expand());
224 sizerV
->Add(new wxListBox(this, wxID_ANY
), wxSizerFlags(1).Expand());
225 SetSizerAndFit(sizerV
);