]> git.saurik.com Git - wxWidgets.git/blob - samples/resource/resource.cpp
merged 2.4 branch into the trunk
[wxWidgets.git] / samples / resource / resource.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: resource.cpp
3 // Purpose: Dialog resource sample
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 // #pragma implementation
14 #endif
15
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
18
19 #ifdef __BORLANDC__
20 #pragma hdrstop
21 #endif
22
23 #ifndef WX_PRECOMP
24 #include "wx/wx.h"
25 #endif
26
27 #if !wxUSE_RESOURCES
28 #error "You should set wxUSE_RESOURCES to 1 to compile this sample"
29 #endif
30
31 #if wxUSE_UNICODE
32 #error "This sample can't be compiled in Unicode mode."
33 #endif // wxUSE_UNICODE
34
35 #include "wx/resource.h"
36
37 #include <ctype.h>
38 #include "resource.h"
39
40 // If we wanted to demonstrate total platform independence,
41 // then we'd use the dynamic file loading form for all platforms.
42 // But this shows how to embed the wxWindows resources
43 // in the program code/executable for UNIX and Windows
44 // platforms.
45
46 // In order to get the ID of the controls defined in the
47 // dialog, we include the header automatically generated
48 // by DialogEd
49
50 #include "dialog1.h"
51
52 // If you have a Windows compiler that can cope with long strings,
53 // then you can always use the #include form for simplicity.
54
55 // NOTE: Borland's brc32.exe resource compiler doesn't recognize
56 // the TEXT resource, for some reason, so either run-time file loading
57 // or file inclusion should be used.
58
59 #if defined(__WXMSW__)
60 // Under Windows, some compilers can't include
61 // a whole .wxr file. So we use a .rc user-defined resource
62 // instead. dialog1 will point to the whole .wxr 'file'.
63 static wxChar *dialog1 = NULL;
64 static wxChar *menu1 = NULL;
65 #else
66 // Other platforms should have sensible compilers that
67 // cope with long strings.
68 #include "dialog1.wxr"
69 #include "menu1.wxr"
70 #endif
71
72 // Declare two frames
73 MyFrame *frame = (MyFrame *) NULL;
74
75 IMPLEMENT_APP(MyApp)
76
77 // Testing of ressources
78 MyApp::MyApp()
79 {
80 }
81
82 // The `main program' equivalent, creating the windows and returning the
83 // main frame
84 bool MyApp::OnInit(void)
85 {
86 #if defined(__WXMSW__)
87 // Load the .wxr 'file' from a .rc resource, under Windows.
88 dialog1 = wxLoadUserResource(wxT("dialog1"), wxT("WXRDATA"));
89 menu1 = wxLoadUserResource(wxT("menu1"), wxT("WXRDATA"));
90 // All resources in the file (only one in this case) get parsed
91 // by this call.
92 wxResourceParseString(dialog1);
93 wxResourceParseString(menu1);
94 #else
95 // Simply parse the data pointed to by the variable dialog1.
96 // If there were several resources, there would be several
97 // variables, and this would need to be called several times.
98 wxResourceParseData(dialog1);
99 wxResourceParseData(menu1);
100 #endif
101
102 // Create the main frame window
103 frame = new MyFrame( (wxFrame *) NULL, -1,
104 (char *) "wxWindows Resource Sample",
105 wxPoint(-1, -1), wxSize(300, 250) );
106
107 // Give it a status line
108 frame->CreateStatusBar(2);
109
110 wxMenuBar *menu_bar = wxResourceCreateMenuBar("menu1");
111
112 // Associate the menu bar with the frame
113 frame->SetMenuBar(menu_bar);
114
115 // Make a panel
116 frame->panel = new MyPanel( frame, -1, wxPoint(0, 0), wxSize(400, 400),
117 0, "MyMainFrame" );
118 frame->Show(TRUE);
119
120 SetTopWindow(frame);
121
122 return TRUE;
123 }
124
125 MyApp::~MyApp()
126 {
127 #if defined(__WXMSW__)
128 delete dialog1;
129 delete menu1;
130 #endif
131 }
132
133 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
134 EVT_LEFT_DOWN( MyPanel::OnClick)
135 END_EVENT_TABLE()
136
137 MyPanel::MyPanel
138 (
139 wxWindow *parent, wxWindowID id, const wxPoint& pos,
140 const wxSize& size,
141 int style, const wxString &name
142 ) : wxPanel( parent, id, pos, size, style, name )
143 {
144 }
145
146 void MyPanel::OnClick( wxMouseEvent &WXUNUSED(event2) )
147 {
148 MyFrame *frame = (MyFrame*)(wxTheApp->GetTopWindow());
149 wxCommandEvent event;
150 frame->OnTestDialog( event );
151 }
152
153
154 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
155 EVT_MENU(RESOURCE_ABOUT, MyFrame::OnAbout)
156 EVT_MENU(RESOURCE_QUIT, MyFrame::OnQuit)
157 EVT_MENU(RESOURCE_TESTDIALOG, MyFrame::OnTestDialog)
158 END_EVENT_TABLE()
159
160 // Define my frame constructor
161 MyFrame::MyFrame
162 (
163 wxWindow *parent, const wxWindowID id,
164 const wxString& title, const wxPoint& pos, const wxSize& size
165 ) : wxFrame(parent, id, title, pos, size)
166 {
167 panel = (wxWindow *) NULL;
168 }
169
170 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
171 {
172 wxMessageBox("wxWindows resource sample.\n"
173 "(c) Julian Smart", "About wxWindows sample",
174 wxICON_INFORMATION | wxOK);
175 }
176
177 void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) )
178 {
179 Close(TRUE);
180 }
181
182 void MyFrame::OnTestDialog(wxCommandEvent& WXUNUSED(event) )
183 {
184 MyDialog *dialog = new MyDialog;
185
186 if (dialog->LoadFromResource(this, "dialog1"))
187 {
188 wxTextCtrl *text = (wxTextCtrl *)wxFindWindowByName("multitext3", dialog);
189 if (text)
190 {
191 text->SetValue("wxWindows resource demo");
192 }
193
194 dialog->ShowModal();
195 }
196
197 dialog->Close(TRUE);
198 }
199
200 BEGIN_EVENT_TABLE(MyDialog, wxDialog)
201 //EVT_BUTTON(RESOURCE_OK, MyDialog::OnOk)
202 EVT_BUTTON(ID_BUTTON109, MyDialog::OnCancel)
203 END_EVENT_TABLE()
204
205
206 void MyDialog::OnOk(wxCommandEvent& WXUNUSED(event) )
207 {
208 // EndModal(RESOURCE_OK);
209 }
210
211 void MyDialog::OnCancel(wxCommandEvent& WXUNUSED(event) )
212 {
213 EndModal(ID_BUTTON109);
214 }
215
216