]> git.saurik.com Git - wxWidgets.git/blame - samples/collpane/collpane.cpp
fixed wxFrame background colour in wxUniv on ports without native wxSYS_COLOUR_APPWOR...
[wxWidgets.git] / samples / collpane / collpane.cpp
CommitLineData
3c1f8cb1
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: collpane.cpp
3// Purpose: wxCollapsiblePane sample
4// Author: Francesco Montorsi
5// Modified by:
6// Created: 14/10/06
7// RCS-ID: $Id$
8// Copyright: (c) Francesco Montorsi
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// For compilers that support precompilation, includes "wx/wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24 #pragma hdrstop
25#endif
26
27#ifndef WX_PRECOMP
28 #include "wx/log.h"
29
30 #include "wx/app.h"
31 #include "wx/frame.h"
32
33 #include "wx/scrolwin.h"
34 #include "wx/menu.h"
35
36 #include "wx/textdlg.h" // for wxGetTextFromUser
37#endif
38
39#include "wx/collpane.h"
40#include "wx/sizer.h"
41#include "wx/stattext.h"
42#include "wx/clrpicker.h"
43#include "wx/filepicker.h"
44#include "wx/fontpicker.h"
912c3932 45#include "wx/aboutdlg.h"
3c1f8cb1
VZ
46
47// ----------------------------------------------------------------------------
48// constants
49// ----------------------------------------------------------------------------
50
51// ID for the menu commands
52enum
53{
54 PANE_COLLAPSE,
55 PANE_EXPAND,
56 PANE_SETLABEL,
57 PANE_SHOWDLG,
912c3932 58 PANE_ABOUT = wxID_ABOUT,
3c1f8cb1
VZ
59 PANE_QUIT = wxID_EXIT
60};
61
62
63// ----------------------------------------------------------------------------
64// our classes
65// ----------------------------------------------------------------------------
66
67class MyApp: public wxApp
68{
69public:
70 MyApp() { }
71
72 virtual bool OnInit();
73
74 DECLARE_NO_COPY_CLASS(MyApp)
75};
76
77class MyFrame: public wxFrame
78{
79public:
80 MyFrame();
81 virtual ~MyFrame();
82
83 // Menu commands
84 void OnCollapse(wxCommandEvent& event);
85 void OnExpand(wxCommandEvent& event);
86 void OnSetLabel(wxCommandEvent& event);
87 void OnShowDialog(wxCommandEvent& event);
88 void Quit(wxCommandEvent& event);
912c3932 89 void OnAbout(wxCommandEvent& event);
3c1f8cb1
VZ
90
91 // Menu command update functions
92 void UpdateUI(wxUpdateUIEvent& event);
93
94private:
95 wxCollapsiblePane *m_collPane;
96
97 DECLARE_EVENT_TABLE()
98 DECLARE_NO_COPY_CLASS(MyFrame)
99};
100
101class MyDialog : public wxDialog
102{
103public:
104 MyDialog(wxFrame *parent);
105 void OnToggleStatus(wxCommandEvent& WXUNUSED(ev));
912c3932 106 void OnPaneChanged(wxCollapsiblePaneEvent& event);
3c1f8cb1
VZ
107
108private:
109 wxCollapsiblePane *m_collPane;
110
111 DECLARE_EVENT_TABLE()
112 DECLARE_NO_COPY_CLASS(MyDialog)
113};
114
115
116
117// ============================================================================
118// implementation
119// ============================================================================
120
121// ----------------------------------------------------------------------------
122// MyApp
123// ----------------------------------------------------------------------------
124
125IMPLEMENT_APP(MyApp)
126
127bool MyApp::OnInit()
128{
129 // create and show the main frame
130 MyFrame* frame = new MyFrame;
131
132 frame->Show(true);
133
134 return true;
135}
136
137// ----------------------------------------------------------------------------
138// MyFrame
139// ----------------------------------------------------------------------------
140
141BEGIN_EVENT_TABLE(MyFrame, wxFrame)
142 EVT_MENU(PANE_COLLAPSE, MyFrame::OnCollapse)
143 EVT_MENU(PANE_EXPAND, MyFrame::OnExpand)
144 EVT_MENU(PANE_SETLABEL, MyFrame::OnSetLabel)
145 EVT_MENU(PANE_SHOWDLG, MyFrame::OnShowDialog)
912c3932 146 EVT_MENU(PANE_ABOUT, MyFrame::OnAbout)
3c1f8cb1
VZ
147 EVT_MENU(PANE_QUIT, MyFrame::Quit)
148
149 EVT_UPDATE_UI(wxID_ANY, MyFrame::UpdateUI)
150END_EVENT_TABLE()
151
152// My frame constructor
153MyFrame::MyFrame()
154 : wxFrame(NULL, wxID_ANY, _T("wxCollapsiblePane sample"),
155 wxDefaultPosition, wxSize(420, 300),
156 wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
157{
158#if wxUSE_STATUSBAR
159 CreateStatusBar(2);
160#endif // wxUSE_STATUSBAR
161
162 // Make a menubar
163 wxMenu *paneMenu = new wxMenu;
164 paneMenu->Append(PANE_COLLAPSE, _T("Collapse\tCtrl-C"));
165 paneMenu->Append(PANE_EXPAND, _T("Expand\tCtrl-E"));
166 paneMenu->AppendSeparator();
167 paneMenu->Append(PANE_SETLABEL, _T("Set label...\tCtrl-S"));
168 paneMenu->AppendSeparator();
169 paneMenu->Append(PANE_SHOWDLG, _T("Show dialog...\tCtrl-S"));
170 paneMenu->AppendSeparator();
171 paneMenu->Append(PANE_QUIT);
172
912c3932
VZ
173 wxMenu *helpMenu = new wxMenu;
174 helpMenu->Append(PANE_ABOUT);
175
3c1f8cb1
VZ
176 wxMenuBar *menuBar = new wxMenuBar;
177 menuBar->Append(paneMenu, _T("&Pane"));
912c3932 178 menuBar->Append(helpMenu, _T("&Help"));
3c1f8cb1
VZ
179 SetMenuBar(menuBar);
180
181 m_collPane = new wxCollapsiblePane(this, -1, wxT("test!"));
182 wxWindow *win = m_collPane->GetPane();
183
184 new wxStaticText(win, -1, wxT("Static control with absolute coords"), wxPoint(10,2));
185 new wxStaticText(win, -1, wxT("Yet another one!"), wxPoint(30, 30));
186 new wxTextCtrl(win, -1, wxT("You can place anything you like inside a wxCollapsiblePane"),
187 wxPoint(5, 60), wxSize(300, -1));
188}
189
190MyFrame::~MyFrame()
191{
192}
193
194// menu command handlers
195
196void MyFrame::Quit(wxCommandEvent& WXUNUSED(event) )
197{
198 Close(true);
199}
200
201void MyFrame::OnCollapse(wxCommandEvent& WXUNUSED(event) )
202{
203 m_collPane->Collapse();
204}
205
206void MyFrame::OnExpand(wxCommandEvent& WXUNUSED(event) )
207{
208 m_collPane->Expand();
209}
210
211void MyFrame::OnSetLabel(wxCommandEvent& WXUNUSED(event) )
212{
213 wxString text = wxGetTextFromUser(wxT("Input the new label"));
214 m_collPane->SetLabel(text);
215}
216
217void MyFrame::OnShowDialog(wxCommandEvent& WXUNUSED(event) )
218{
219 MyDialog dlg(this);
220 dlg.ShowModal();
221}
222
912c3932
VZ
223void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
224{
225 wxAboutDialogInfo info;
226 info.SetName(_("wxCollapsiblePane sample"));
227 info.SetDescription(_("This sample program demonstrates usage of wxCollapsiblePane"));
228 info.SetCopyright(_T("(C) 2006 Francesco Montorsi <frm@users.sourceforge.net>"));
229
230 wxAboutBox(info);
231}
232
3c1f8cb1
VZ
233void MyFrame::UpdateUI(wxUpdateUIEvent& event)
234{
235 GetMenuBar()->Enable(PANE_COLLAPSE, !m_collPane->IsCollapsed());
236 GetMenuBar()->Enable(PANE_EXPAND, m_collPane->IsCollapsed());
237}
238
912c3932 239
3c1f8cb1
VZ
240// ----------------------------------------------------------------------------
241// MyDialog
242// ----------------------------------------------------------------------------
243
244enum
245{
246 PANEDLG_TOGGLESTATUS_BTN = wxID_HIGHEST
247};
248
249BEGIN_EVENT_TABLE(MyDialog, wxDialog)
250 EVT_BUTTON(PANEDLG_TOGGLESTATUS_BTN, MyDialog::OnToggleStatus)
912c3932 251 EVT_COLLAPSIBLEPANE_CHANGED(wxID_ANY, MyDialog::OnPaneChanged)
3c1f8cb1
VZ
252END_EVENT_TABLE()
253
254MyDialog::MyDialog(wxFrame *parent)
255 : wxDialog(parent, wxID_ANY, wxT("Test dialog"),
256 wxDefaultPosition, wxDefaultSize,
257 wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE )
258{
259 wxSizer *sz = new wxBoxSizer(wxVERTICAL);
912c3932 260 sz->Add(new wxStaticText(this, -1,
3c1f8cb1
VZ
261 wxT("This dialog allows you to test the wxCollapsiblePane control")),
262 0, wxALL, 5);
912c3932 263 sz->Add(new wxButton(this, PANEDLG_TOGGLESTATUS_BTN, wxT("Change status")),
3c1f8cb1 264 1, wxGROW|wxALL, 5);
912c3932 265
3c1f8cb1 266 m_collPane = new wxCollapsiblePane(this, -1, wxT("Click here for a surprise"));
912c3932 267 sz->Add(m_collPane, 0, wxGROW|wxALL, 5);
3c1f8cb1
VZ
268 sz->Add(new wxTextCtrl(this, -1, wxT("just a test")), 0, wxGROW|wxALL, 5);
269 sz->AddSpacer(10);
270 sz->Add(new wxButton(this, wxID_OK), 0, wxALIGN_RIGHT|wxALL, 5);
271
272 // now add test controls in the collapsible pane
273 wxWindow *win = m_collPane->GetPane();
274 wxSizer *paneSz = new wxGridSizer(2, 2, 5, 5);
275 paneSz->Add(new wxColourPickerCtrl(win, -1), 1, wxGROW|wxALL, 2);
276 paneSz->Add(new wxFontPickerCtrl(win, -1), 1, wxGROW|wxALL, 2);
277 paneSz->Add(new wxFilePickerCtrl(win, -1), 1, wxALL|wxALIGN_CENTER, 2);
278 paneSz->Add(new wxDirPickerCtrl(win, -1), 1, wxALL|wxALIGN_CENTER, 2);
279 win->SetSizer(paneSz);
280 paneSz->SetSizeHints(win);
281
282 SetSizer(sz);
283 sz->SetSizeHints(this);
284}
285
286void MyDialog::OnToggleStatus(wxCommandEvent& WXUNUSED(ev))
287{
288 m_collPane->Collapse(!m_collPane->IsCollapsed());
289}
290
912c3932
VZ
291void MyDialog::OnPaneChanged(wxCollapsiblePaneEvent &event)
292{
293 wxLogDebug(wxT("The pane has just been %s by the user"),
294 event.GetCollapsed() ? wxT("collapsed") : wxT("expanded"));
295}
296