]> git.saurik.com Git - wxWidgets.git/blob - samples/dynamic/dynamic.cpp
glibc's vswprintf doesn't nul terminate on truncation.
[wxWidgets.git] / samples / dynamic / dynamic.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dynamic.cpp
3 // Purpose: Dynamic events wxWidgets sample
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #ifndef WX_PRECOMP
20 #include "wx/wx.h"
21 #endif
22
23 #include "wx/clntdata.h"
24
25 #ifndef __WXMSW__
26 #include "mondrian.xpm"
27 #endif
28
29 // Define a new application type
30 class MyApp: public wxApp
31 {
32 public:
33 bool OnInit(void);
34 };
35
36 // Define a new frame type
37 class MyFrame: public wxFrame
38 {
39 public:
40 MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h);
41
42 public:
43 void OnQuit(wxCommandEvent& event);
44 void OnTest(wxCommandEvent& event);
45 void OnAbout(wxCommandEvent& event);
46
47 protected:
48 wxShadowObject m_shadow;
49 };
50
51 // Define another new frame type
52 class MySecondFrame: public MyFrame
53 {
54 public:
55 MySecondFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h);
56 };
57
58 // ID for the menu commands
59 #define DYNAMIC_QUIT wxID_EXIT
60 #define DYNAMIC_TEST 101
61 #define DYNAMIC_ABOUT wxID_ABOUT
62
63 // Create a new application object
64 IMPLEMENT_APP (MyApp)
65
66 // `Main program' equivalent, creating windows and returning main app frame
67 bool MyApp::OnInit(void)
68 {
69 // Create the main frame window
70 MyFrame *frame = new MyFrame(NULL, _T("Dynamic wxWidgets App"), 50, 50, 450, 340);
71
72 // Show the frame
73 frame->Show(true);
74
75 // Create the main frame window
76 MySecondFrame *frame2 = new MySecondFrame(NULL, _T("Dynamic wxWidgets App"), 150, 150, 450, 340);
77
78 // Show the frame
79 frame2->Show(true);
80
81 SetTopWindow(frame);
82
83 return true;
84 }
85
86 // -------------------------------------
87 // MyFrame
88 // -------------------------------------
89
90 // Callback from wxShadowObject
91
92 int cb_MyFrame_InitStatusbar( void* window, void* WXUNUSED(param) )
93 {
94 MyFrame *frame = (MyFrame*) window;
95 frame->SetStatusText( wxT("Hello from MyFrame"), 0 );
96 return 0;
97 }
98
99 // My frame constructor
100 MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
101 wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
102 {
103 // Give it an icon
104 #ifdef __WXMSW__
105 SetIcon(wxIcon(_T("mondrian")));
106 #else
107 SetIcon(wxIcon(mondrian_xpm));
108 #endif
109
110 // Make a menubar
111 wxMenu *file_menu = new wxMenu;
112
113 file_menu->Append(DYNAMIC_ABOUT, _T("&About"));
114 file_menu->Append(DYNAMIC_TEST, _T("&Test"));
115 file_menu->Append(DYNAMIC_QUIT, _T("E&xit"));
116 wxMenuBar *menu_bar = new wxMenuBar;
117 menu_bar->Append(file_menu, _T("&File"));
118 SetMenuBar(menu_bar);
119
120 // Make a panel with a message
121 wxPanel *panel = new wxPanel(this, wxID_ANY, wxPoint(0, 0), wxSize(400, 200), wxTAB_TRAVERSAL);
122
123 (void)new wxStaticText(panel, 311, _T("Hello!"), wxPoint(10, 10), wxDefaultSize, 0);
124
125 // You used to have to do some casting for param 4, but now there are type-safe handlers
126 Connect( DYNAMIC_QUIT, wxID_ANY,
127 wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) );
128 Connect( DYNAMIC_TEST, wxID_ANY,
129 wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnTest) );
130 Connect( DYNAMIC_ABOUT, wxID_ANY,
131 wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) );
132
133 CreateStatusBar();
134 m_shadow.AddMethod( wxT("OnTest"), &cb_MyFrame_InitStatusbar );
135 }
136
137 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
138 {
139 Close(true);
140 }
141
142 void MyFrame::OnTest(wxCommandEvent& WXUNUSED(event) )
143 {
144 m_shadow.InvokeMethod( wxT("OnTest"), this, NULL, NULL );
145 }
146
147 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
148 {
149 wxMessageDialog dialog(this, _T("This demonstrates dynamic event handling"),
150 _T("About Dynamic"), wxYES_NO|wxCANCEL);
151
152 dialog.ShowModal();
153 }
154
155
156 // -------------------------------------
157 // MySecondFrame
158 // -------------------------------------
159
160 // Callback from wxShadowObject
161
162 int cb_MySecondFrame_InitStatusbar( void* window, void* WXUNUSED(param) )
163 {
164 MySecondFrame *frame = (MySecondFrame*) window;
165 frame->SetStatusText( wxT("Hello from MySecondFrame"), 0 );
166 return 0;
167 }
168
169 // My frame constructor
170 MySecondFrame::MySecondFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
171 MyFrame(frame, title, x, y, w, h )
172 {
173 m_shadow.AddMethod( wxT("OnTest"), &cb_MySecondFrame_InitStatusbar );
174 }