]> git.saurik.com Git - wxWidgets.git/blame - samples/resource/resource.cpp
applied (part of) patch 433176 (reduce flicker)
[wxWidgets.git] / samples / resource / resource.cpp
CommitLineData
457814b5
JS
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#include "wx/resource.h"
28
29#include <ctype.h>
30#include "resource.h"
31
32// If we wanted to demonstrate total platform independence,
33// then we'd use the dynamic file loading form for all platforms.
34// But this shows how to embed the wxWindows resources
35// in the program code/executable for UNIX and Windows
36// platforms.
37
da865392
RR
38// In order to get the ID of the controls defined in the
39// dialog, we include the header automatically generated
40// by DialogEd
41
42#include "dialog1.h"
43
457814b5
JS
44// If you have a Windows compiler that can cope with long strings,
45// then you can always use the #include form for simplicity.
46
47// NOTE: Borland's brc32.exe resource compiler doesn't recognize
48// the TEXT resource, for some reason, so either run-time file loading
49// or file inclusion should be used.
50
44c4a334 51#if defined(__WXMSW__)
457814b5
JS
52// Under Windows, some compilers can't include
53// a whole .wxr file. So we use a .rc user-defined resource
54// instead. dialog1 will point to the whole .wxr 'file'.
55static char *dialog1 = NULL;
56static char *menu1 = NULL;
57#else
58// Other platforms should have sensible compilers that
59// cope with long strings.
60#include "dialog1.wxr"
61#include "menu1.wxr"
62#endif
63
64// Declare two frames
c67daf87 65MyFrame *frame = (MyFrame *) NULL;
457814b5
JS
66
67IMPLEMENT_APP(MyApp)
68
69// Testing of ressources
70MyApp::MyApp()
71{
72}
73
74// The `main program' equivalent, creating the windows and returning the
75// main frame
76bool MyApp::OnInit(void)
77{
44c4a334 78#if defined(__WXMSW__)
457814b5 79 // Load the .wxr 'file' from a .rc resource, under Windows.
44c4a334
JS
80 dialog1 = wxLoadUserResource("dialog1", "WXRDATA");
81 menu1 = wxLoadUserResource("menu1", "WXRDATA");
457814b5
JS
82 // All resources in the file (only one in this case) get parsed
83 // by this call.
84 wxResourceParseString(dialog1);
85 wxResourceParseString(menu1);
86#else
87 // Simply parse the data pointed to by the variable dialog1.
88 // If there were several resources, there would be several
89 // variables, and this would need to be called several times.
90 wxResourceParseData(dialog1);
91 wxResourceParseData(menu1);
92#endif
93
94 // Create the main frame window
da865392 95 frame = new MyFrame((wxFrame *) NULL, -1, (char *) "wxWindows Resource Sample", wxPoint(-1, -1), wxSize(300, 250));
457814b5
JS
96
97 // Give it a status line
98 frame->CreateStatusBar(2);
99
457814b5
JS
100 wxMenuBar *menu_bar = wxResourceCreateMenuBar("menu1");
101
102 // Associate the menu bar with the frame
103 frame->SetMenuBar(menu_bar);
104
105 // Make a panel
8d71b555 106 frame->panel = new MyPanel(frame, -1, wxPoint(0, 0), wxSize(400, 400), 0, "MyMainFrame");
457814b5
JS
107 frame->Show(TRUE);
108
109 SetTopWindow(frame);
110
111 return TRUE;
112}
113
1d5b7a0b
VZ
114MyApp::~MyApp()
115{
f6bcfd97 116#if defined(__WXMSW__)
1d5b7a0b
VZ
117 delete dialog1;
118 delete menu1;
f6bcfd97 119#endif
1d5b7a0b
VZ
120}
121
8d71b555
RR
122BEGIN_EVENT_TABLE(MyPanel, wxPanel)
123 EVT_LEFT_DOWN( MyPanel::OnClick)
124END_EVENT_TABLE()
125
126MyPanel::MyPanel( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
127 int style, const wxString &name ) :
128 wxPanel( parent, id, pos, size, style, name )
129{
130}
131
1d5b7a0b 132void MyPanel::OnClick( wxMouseEvent &WXUNUSED(event2) )
8d71b555
RR
133{
134 MyFrame *frame = (MyFrame*)(wxTheApp->GetTopWindow());
135 wxCommandEvent event;
1d5b7a0b 136 frame->OnTestDialog( event );
8d71b555
RR
137}
138
139
457814b5 140BEGIN_EVENT_TABLE(MyFrame, wxFrame)
1d5b7a0b 141 EVT_MENU(RESOURCE_ABOUT, MyFrame::OnAbout)
457814b5 142 EVT_MENU(RESOURCE_QUIT, MyFrame::OnQuit)
1d5b7a0b 143 EVT_MENU(RESOURCE_TESTDIALOG, MyFrame::OnTestDialog)
457814b5
JS
144END_EVENT_TABLE()
145
146// Define my frame constructor
147MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size):
148 wxFrame(parent, id, title, pos, size)
149{
c67daf87 150 panel = (wxWindow *) NULL;
457814b5
JS
151}
152
1d5b7a0b
VZ
153void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
154{
155 wxMessageBox("wxWindows resource sample.\n"
156 "(c) Julian Smart", "About wxWindows sample",
157 wxICON_INFORMATION | wxOK);
158}
159
8d71b555 160void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) )
457814b5
JS
161{
162 Close(TRUE);
163}
164
1d5b7a0b 165void MyFrame::OnTestDialog(wxCommandEvent& WXUNUSED(event) )
457814b5
JS
166{
167 MyDialog *dialog = new MyDialog;
168 if (dialog->LoadFromResource(this, "dialog1"))
169 {
170 wxTextCtrl *text = (wxTextCtrl *)wxFindWindowByName("multitext3", dialog);
171 if (text)
172 text->SetValue("wxWindows resource demo");
457814b5
JS
173 dialog->ShowModal();
174 }
175 dialog->Close(TRUE);
176}
177
457814b5 178BEGIN_EVENT_TABLE(MyDialog, wxDialog)
b412f9be
JS
179 // EVT_BUTTON(RESOURCE_OK, MyDialog::OnOk)
180 EVT_BUTTON(ID_BUTTON109, MyDialog::OnCancel)
457814b5
JS
181END_EVENT_TABLE()
182
183
8d71b555 184void MyDialog::OnOk(wxCommandEvent& WXUNUSED(event) )
457814b5 185{
b412f9be 186 // EndModal(RESOURCE_OK);
457814b5
JS
187}
188
8d71b555 189void MyDialog::OnCancel(wxCommandEvent& WXUNUSED(event) )
457814b5 190{
b412f9be 191 EndModal(ID_BUTTON109);
457814b5
JS
192}
193
194