]> git.saurik.com Git - wxWidgets.git/blame_incremental - samples/collpane/collpane.cpp
use xdg-open in wxLaunchDefaultBrowser() on Unix if available
[wxWidgets.git] / samples / collpane / collpane.cpp
... / ...
CommitLineData
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"
45#include "wx/aboutdlg.h"
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,
58 PANE_ABOUT = wxID_ABOUT,
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);
89 void OnAbout(wxCommandEvent& event);
90
91 // UI update handlers
92 void OnCollapseUpdateUI(wxUpdateUIEvent& event);
93 void OnExpandUpdateUI(wxUpdateUIEvent& event);
94
95private:
96 wxCollapsiblePane *m_collPane;
97
98 DECLARE_EVENT_TABLE()
99 DECLARE_NO_COPY_CLASS(MyFrame)
100};
101
102class MyDialog : public wxDialog
103{
104public:
105 MyDialog(wxFrame *parent);
106 void OnToggleStatus(wxCommandEvent& WXUNUSED(ev));
107 void OnPaneChanged(wxCollapsiblePaneEvent& event);
108
109private:
110 wxCollapsiblePane *m_collPane;
111
112 DECLARE_EVENT_TABLE()
113 DECLARE_NO_COPY_CLASS(MyDialog)
114};
115
116
117
118// ============================================================================
119// implementation
120// ============================================================================
121
122// ----------------------------------------------------------------------------
123// MyApp
124// ----------------------------------------------------------------------------
125
126IMPLEMENT_APP(MyApp)
127
128bool MyApp::OnInit()
129{
130 if ( !wxApp::OnInit() )
131 return false;
132
133 // create and show the main frame
134 MyFrame* frame = new MyFrame;
135
136 frame->Show(true);
137
138 return true;
139}
140
141// ----------------------------------------------------------------------------
142// MyFrame
143// ----------------------------------------------------------------------------
144
145BEGIN_EVENT_TABLE(MyFrame, wxFrame)
146 EVT_MENU(PANE_COLLAPSE, MyFrame::OnCollapse)
147 EVT_MENU(PANE_EXPAND, MyFrame::OnExpand)
148 EVT_MENU(PANE_SETLABEL, MyFrame::OnSetLabel)
149 EVT_MENU(PANE_SHOWDLG, MyFrame::OnShowDialog)
150 EVT_MENU(PANE_ABOUT, MyFrame::OnAbout)
151 EVT_MENU(PANE_QUIT, MyFrame::Quit)
152
153 EVT_UPDATE_UI(PANE_COLLAPSE, MyFrame::OnCollapseUpdateUI)
154 EVT_UPDATE_UI(PANE_EXPAND, MyFrame::OnExpandUpdateUI)
155END_EVENT_TABLE()
156
157// My frame constructor
158MyFrame::MyFrame()
159 : wxFrame(NULL, wxID_ANY, _T("wxCollapsiblePane sample"),
160 wxDefaultPosition, wxSize(420, 300),
161 wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
162{
163#if wxUSE_STATUSBAR
164 CreateStatusBar(2);
165#endif // wxUSE_STATUSBAR
166
167 // Make a menubar
168 wxMenu *paneMenu = new wxMenu;
169 paneMenu->Append(PANE_COLLAPSE, _T("Collapse\tCtrl-C"));
170 paneMenu->Append(PANE_EXPAND, _T("Expand\tCtrl-E"));
171 paneMenu->AppendSeparator();
172 paneMenu->Append(PANE_SETLABEL, _T("Set label...\tCtrl-L"));
173 paneMenu->AppendSeparator();
174 paneMenu->Append(PANE_SHOWDLG, _T("Show dialog...\tCtrl-S"));
175 paneMenu->AppendSeparator();
176 paneMenu->Append(PANE_QUIT);
177
178 wxMenu *helpMenu = new wxMenu;
179 helpMenu->Append(PANE_ABOUT);
180
181 wxMenuBar *menuBar = new wxMenuBar;
182 menuBar->Append(paneMenu, _T("&Pane"));
183 menuBar->Append(helpMenu, _T("&Help"));
184 SetMenuBar(menuBar);
185
186 m_collPane = new wxCollapsiblePane(this, -1, wxT("test!"));
187 wxWindow *win = m_collPane->GetPane();
188
189 new wxStaticText(win, -1, wxT("Static control with absolute coords"), wxPoint(10,2));
190 new wxStaticText(win, -1, wxT("Yet another one!"), wxPoint(30, 30));
191 new wxTextCtrl(win, -1, wxT("You can place anything you like inside a wxCollapsiblePane"),
192 wxPoint(5, 60), wxSize(300, -1));
193}
194
195MyFrame::~MyFrame()
196{
197}
198
199// menu command handlers
200
201void MyFrame::Quit(wxCommandEvent& WXUNUSED(event) )
202{
203 Close(true);
204}
205
206void MyFrame::OnCollapse(wxCommandEvent& WXUNUSED(event) )
207{
208 m_collPane->Collapse();
209}
210
211void MyFrame::OnExpand(wxCommandEvent& WXUNUSED(event) )
212{
213 m_collPane->Expand();
214}
215
216void MyFrame::OnSetLabel(wxCommandEvent& WXUNUSED(event) )
217{
218 wxString text = wxGetTextFromUser
219 (
220 wxT("Enter new label"),
221 wxGetTextFromUserPromptStr,
222 m_collPane->GetLabel()
223 );
224 m_collPane->SetLabel(text);
225}
226
227void MyFrame::OnShowDialog(wxCommandEvent& WXUNUSED(event) )
228{
229 MyDialog dlg(this);
230 dlg.ShowModal();
231}
232
233void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
234{
235 wxAboutDialogInfo info;
236 info.SetName(_("wxCollapsiblePane sample"));
237 info.SetDescription(_("This sample program demonstrates usage of wxCollapsiblePane"));
238 info.SetCopyright(_T("(C) 2006 Francesco Montorsi <frm@users.sourceforge.net>"));
239
240 wxAboutBox(info);
241}
242
243void MyFrame::OnCollapseUpdateUI(wxUpdateUIEvent& event)
244{
245 event.Enable(!m_collPane->IsCollapsed());
246}
247
248void MyFrame::OnExpandUpdateUI(wxUpdateUIEvent& event)
249{
250 event.Enable(m_collPane->IsCollapsed());
251}
252
253
254// ----------------------------------------------------------------------------
255// MyDialog
256// ----------------------------------------------------------------------------
257
258enum
259{
260 PANEDLG_TOGGLESTATUS_BTN = wxID_HIGHEST
261};
262
263BEGIN_EVENT_TABLE(MyDialog, wxDialog)
264 EVT_BUTTON(PANEDLG_TOGGLESTATUS_BTN, MyDialog::OnToggleStatus)
265 EVT_COLLAPSIBLEPANE_CHANGED(wxID_ANY, MyDialog::OnPaneChanged)
266END_EVENT_TABLE()
267
268MyDialog::MyDialog(wxFrame *parent)
269 : wxDialog(parent, wxID_ANY, wxT("Test dialog"),
270 wxDefaultPosition, wxDefaultSize,
271 wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE )
272{
273 wxSizer *sz = new wxBoxSizer(wxVERTICAL);
274 sz->Add(new wxStaticText(this, -1,
275 wxT("This dialog allows you to test the wxCollapsiblePane control")),
276 0, wxALL, 5);
277 sz->Add(new wxButton(this, PANEDLG_TOGGLESTATUS_BTN, wxT("Change status")),
278 1, wxGROW|wxALL, 5);
279
280 m_collPane = new wxCollapsiblePane(this, -1, wxT("Click here for a surprise"));
281 sz->Add(m_collPane, 0, wxGROW|wxALL, 5);
282 sz->Add(new wxTextCtrl(this, -1, wxT("just a test")), 0, wxGROW|wxALL, 5);
283 sz->AddSpacer(10);
284 sz->Add(new wxButton(this, wxID_OK), 0, wxALIGN_RIGHT|wxALL, 5);
285
286 // now add test controls in the collapsible pane
287 wxWindow *win = m_collPane->GetPane();
288 wxSizer *paneSz = new wxGridSizer(4, 1, 5, 5);
289 paneSz->Add(new wxColourPickerCtrl(win, -1), 1, wxALL|wxALIGN_LEFT, 2);
290 paneSz->Add(new wxFontPickerCtrl(win, -1), 1, wxALL|wxALIGN_LEFT, 2);
291 paneSz->Add(new wxFilePickerCtrl(win, -1), 1, wxALL|wxALIGN_LEFT, 2);
292 paneSz->Add(new wxDirPickerCtrl(win, -1), 1, wxALL|wxALIGN_LEFT, 2);
293 win->SetSizer(paneSz);
294 paneSz->SetSizeHints(win);
295
296 SetSizer(sz);
297 sz->SetSizeHints(this);
298}
299
300void MyDialog::OnToggleStatus(wxCommandEvent& WXUNUSED(ev))
301{
302 m_collPane->Collapse(!m_collPane->IsCollapsed());
303}
304
305void MyDialog::OnPaneChanged(wxCollapsiblePaneEvent &event)
306{
307 wxLogDebug(wxT("The pane has just been %s by the user"),
308 event.GetCollapsed() ? wxT("collapsed") : wxT("expanded"));
309}
310