1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxCollapsiblePane sample
4 // Author: Francesco Montorsi
8 // Copyright: (c) Francesco Montorsi
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
33 #include "wx/scrolwin.h"
36 #include "wx/textdlg.h" // for wxGetTextFromUser
39 #include "wx/collpane.h"
41 #include "wx/stattext.h"
42 #include "wx/clrpicker.h"
43 #include "wx/filepicker.h"
44 #include "wx/fontpicker.h"
45 #include "wx/aboutdlg.h"
48 #include "../sample.xpm"
51 // ----------------------------------------------------------------------------
53 // ----------------------------------------------------------------------------
55 // ID for the menu commands
62 PANE_ABOUT
= wxID_ABOUT
,
63 PANE_QUIT
= wxID_EXIT
,
70 // ----------------------------------------------------------------------------
72 // ----------------------------------------------------------------------------
74 class MyApp
: public wxApp
79 virtual bool OnInit();
81 wxDECLARE_NO_COPY_CLASS(MyApp
);
84 class MyFrame
: public wxFrame
91 void OnCollapse(wxCommandEvent
& event
);
92 void OnExpand(wxCommandEvent
& event
);
93 void OnSetLabel(wxCommandEvent
& event
);
94 void OnShowDialog(wxCommandEvent
& event
);
95 void Quit(wxCommandEvent
& event
);
96 void OnAbout(wxCommandEvent
& event
);
99 void OnCollapseUpdateUI(wxUpdateUIEvent
& event
);
100 void OnExpandUpdateUI(wxUpdateUIEvent
& event
);
103 wxCollapsiblePane
*m_collPane
;
104 wxBoxSizer
*m_paneSizer
;
106 DECLARE_EVENT_TABLE()
107 wxDECLARE_NO_COPY_CLASS(MyFrame
);
110 class MyDialog
: public wxDialog
113 MyDialog(wxFrame
*parent
);
114 void OnToggleStatus(wxCommandEvent
& WXUNUSED(ev
));
115 void OnAlignButton(wxCommandEvent
& WXUNUSED(ev
));
116 void OnPaneChanged(wxCollapsiblePaneEvent
& event
);
119 wxCollapsiblePane
*m_collPane
;
120 wxGridSizer
*m_paneSizer
;
122 DECLARE_EVENT_TABLE()
123 wxDECLARE_NO_COPY_CLASS(MyDialog
);
128 // ============================================================================
130 // ============================================================================
132 // ----------------------------------------------------------------------------
134 // ----------------------------------------------------------------------------
140 if ( !wxApp::OnInit() )
143 // create and show the main frame
144 MyFrame
* frame
= new MyFrame
;
151 // ----------------------------------------------------------------------------
153 // ----------------------------------------------------------------------------
155 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
156 EVT_MENU(PANE_COLLAPSE
, MyFrame::OnCollapse
)
157 EVT_MENU(PANE_EXPAND
, MyFrame::OnExpand
)
158 EVT_MENU(PANE_SETLABEL
, MyFrame::OnSetLabel
)
159 EVT_MENU(PANE_SHOWDLG
, MyFrame::OnShowDialog
)
160 EVT_MENU(PANE_ABOUT
, MyFrame::OnAbout
)
161 EVT_MENU(PANE_QUIT
, MyFrame::Quit
)
163 EVT_UPDATE_UI(PANE_COLLAPSE
, MyFrame::OnCollapseUpdateUI
)
164 EVT_UPDATE_UI(PANE_EXPAND
, MyFrame::OnExpandUpdateUI
)
167 // My frame constructor
169 : wxFrame(NULL
, wxID_ANY
, wxT("wxCollapsiblePane sample"),
170 wxDefaultPosition
, wxSize(420, 300),
171 wxDEFAULT_FRAME_STYLE
| wxNO_FULL_REPAINT_ON_RESIZE
)
173 SetIcon(wxICON(sample
));
177 #endif // wxUSE_STATUSBAR
180 wxMenu
*paneMenu
= new wxMenu
;
181 paneMenu
->Append(PANE_COLLAPSE
, wxT("Collapse\tCtrl-C"));
182 paneMenu
->Append(PANE_EXPAND
, wxT("Expand\tCtrl-E"));
183 paneMenu
->AppendSeparator();
184 paneMenu
->Append(PANE_SETLABEL
, wxT("Set label...\tCtrl-L"));
185 paneMenu
->AppendSeparator();
186 paneMenu
->Append(PANE_SHOWDLG
, wxT("Show dialog...\tCtrl-S"));
187 paneMenu
->AppendSeparator();
188 paneMenu
->Append(PANE_QUIT
);
190 wxMenu
*helpMenu
= new wxMenu
;
191 helpMenu
->Append(PANE_ABOUT
);
193 wxMenuBar
*menuBar
= new wxMenuBar
;
194 menuBar
->Append(paneMenu
, wxT("&Pane"));
195 menuBar
->Append(helpMenu
, wxT("&Help"));
198 m_collPane
= new wxCollapsiblePane(this, -1, wxT("test!"));
199 wxWindow
*win
= m_collPane
->GetPane();
201 m_paneSizer
= new wxBoxSizer( wxHORIZONTAL
);
202 wxBoxSizer
* paneSubSizer
= new wxBoxSizer( wxVERTICAL
);
203 m_paneSizer
->AddSpacer( 20 );
204 m_paneSizer
->Add( paneSubSizer
, 1 );
206 paneSubSizer
->Add( new wxStaticText(win
, -1, wxT("Static text") ), 0, wxALIGN_LEFT
| wxALL
, 3 );
207 paneSubSizer
->Add( new wxStaticText(win
, -1, wxT("Yet another one!") ), 0, wxALIGN_LEFT
| wxALL
, 3 );
208 paneSubSizer
->Add( new wxTextCtrl(win
, PANE_TEXTCTRL
, wxT("Text control"), wxDefaultPosition
, wxSize(80,-1) ), 0, wxALIGN_LEFT
| wxALL
, 3 );
209 paneSubSizer
->Add( new wxButton(win
, PANE_BUTTON
, wxT("Press to align right") ), 0, wxALIGN_LEFT
| wxALL
, 3 );
211 win
->SetSizer( m_paneSizer
);
218 // menu command handlers
220 void MyFrame::Quit(wxCommandEvent
& WXUNUSED(event
) )
225 void MyFrame::OnCollapse(wxCommandEvent
& WXUNUSED(event
) )
227 m_collPane
->Collapse();
230 void MyFrame::OnExpand(wxCommandEvent
& WXUNUSED(event
) )
232 m_collPane
->Expand();
235 void MyFrame::OnSetLabel(wxCommandEvent
& WXUNUSED(event
) )
237 wxString text
= wxGetTextFromUser
239 wxT("Enter new label"),
240 wxGetTextFromUserPromptStr
,
241 m_collPane
->GetLabel()
243 m_collPane
->SetLabel(text
);
246 void MyFrame::OnShowDialog(wxCommandEvent
& WXUNUSED(event
) )
252 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
) )
254 wxAboutDialogInfo info
;
255 info
.SetName(_("wxCollapsiblePane sample"));
256 info
.SetDescription(_("This sample program demonstrates usage of wxCollapsiblePane"));
257 info
.SetCopyright(wxT("(C) 2006 Francesco Montorsi <frm@users.sourceforge.net>"));
262 void MyFrame::OnCollapseUpdateUI(wxUpdateUIEvent
& event
)
264 event
.Enable(!m_collPane
->IsCollapsed());
267 void MyFrame::OnExpandUpdateUI(wxUpdateUIEvent
& event
)
269 event
.Enable(m_collPane
->IsCollapsed());
273 // ----------------------------------------------------------------------------
275 // ----------------------------------------------------------------------------
279 PANEDLG_TOGGLESTATUS_BTN
= wxID_HIGHEST
282 BEGIN_EVENT_TABLE(MyDialog
, wxDialog
)
283 EVT_BUTTON(PANEDLG_TOGGLESTATUS_BTN
, MyDialog::OnToggleStatus
)
284 EVT_COLLAPSIBLEPANE_CHANGED(wxID_ANY
, MyDialog::OnPaneChanged
)
285 EVT_BUTTON(PANE_BUTTON
, MyDialog::OnAlignButton
)
288 MyDialog::MyDialog(wxFrame
*parent
)
289 : wxDialog(parent
, wxID_ANY
, wxT("Test dialog"),
290 wxDefaultPosition
, wxDefaultSize
,
291 wxRESIZE_BORDER
|wxDEFAULT_DIALOG_STYLE
)
293 wxSizer
*sz
= new wxBoxSizer(wxVERTICAL
);
294 sz
->Add(new wxStaticText(this, -1,
295 wxT("This dialog allows you to test the wxCollapsiblePane control")),
297 sz
->Add(new wxButton(this, PANEDLG_TOGGLESTATUS_BTN
, wxT("Change status")),
300 m_collPane
= new wxCollapsiblePane(this, -1, wxT("Click here for a surprise"));
301 sz
->Add(m_collPane
, 0, wxGROW
|wxALL
, 5);
302 sz
->Add(new wxTextCtrl(this, -1, wxT("just a test")), 0, wxGROW
|wxALL
, 5);
304 sz
->Add(new wxButton(this, wxID_OK
), 0, wxALIGN_RIGHT
|wxALL
, 5);
306 // now add test controls in the collapsible pane
307 wxWindow
*win
= m_collPane
->GetPane();
308 m_paneSizer
= new wxGridSizer(4, 1, 5, 5);
310 m_paneSizer
->Add( new wxStaticText(win
, -1, wxT("Static text") ), 0, wxALIGN_LEFT
);
311 m_paneSizer
->Add( new wxStaticText(win
, -1, wxT("Yet another one!") ), 0, wxALIGN_LEFT
);
312 m_paneSizer
->Add( new wxTextCtrl(win
, PANE_TEXTCTRL
, wxT("Text control"), wxDefaultPosition
, wxSize(80,-1) ), 0, wxALIGN_LEFT
);
313 m_paneSizer
->Add( new wxButton(win
, PANE_BUTTON
, wxT("Press to align right") ), 0, wxALIGN_LEFT
);
314 win
->SetSizer( m_paneSizer
);
316 win
->SetSizer( m_paneSizer
);
317 m_paneSizer
->SetSizeHints(win
);
320 sz
->SetSizeHints(this);
323 void MyDialog::OnToggleStatus(wxCommandEvent
& WXUNUSED(ev
))
325 m_collPane
->Collapse(!m_collPane
->IsCollapsed());
328 void MyDialog::OnAlignButton(wxCommandEvent
& WXUNUSED(ev
))
330 wxSizerItem
*item
= m_paneSizer
->GetItem( FindWindow(PANE_TEXTCTRL
), true );
331 item
->SetFlag( wxALIGN_RIGHT
);
336 void MyDialog::OnPaneChanged(wxCollapsiblePaneEvent
& event
)
338 wxLogMessage(wxT("The pane has just been %s by the user"),
339 event
.GetCollapsed() ? wxT("collapsed") : wxT("expanded"));