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