]> git.saurik.com Git - wxWidgets.git/blob - samples/html/widget/widget.cpp
added wxGetTopLevelParent()
[wxWidgets.git] / samples / html / widget / widget.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: virtua;.cpp
3 // Purpose: wxHtml testing example
4 // demonstrates virtual file systems feature
5 /////////////////////////////////////////////////////////////////////////////
6
7 #ifdef __GNUG__
8 #pragma implementation "test.cpp"
9 #pragma interface "test.cpp"
10 #endif
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 // for all others, include the necessary headers (this file is usually all you
20 // need because it includes almost all "standard" wxWindows headers
21 #ifndef WX_PRECOMP
22 #include "wx/wx.h"
23 #endif
24
25
26 #include "wx/html/htmlwin.h"
27
28
29
30
31 /*
32
33
34 TAG HANDER FOR 'MYBIND' TAG
35
36
37 */
38
39 #include "wx/html/m_templ.h"
40
41
42 TAG_HANDLER_BEGIN(MYBIND, "MYBIND")
43
44 TAG_HANDLER_PROC(tag)
45 {
46 wxWindow *wnd;
47 int ax, ay;
48 int fl = 0;
49
50 tag.ScanParam(wxT("X"), wxT("%i"), &ax);
51 tag.ScanParam(wxT("Y"), wxT("%i"), &ay);
52 if (tag.HasParam(wxT("FLOAT")))
53 fl = ax;
54
55 wnd = new wxTextCtrl(m_WParser->GetWindow(), -1, tag.GetParam(wxT("NAME")),
56 wxPoint(0,0), wxSize(ax, ay), wxTE_MULTILINE);
57 wnd->Show(TRUE);
58
59 m_WParser->GetContainer()->InsertCell(new wxHtmlWidgetCell(wnd, fl));
60
61 return FALSE;
62 }
63
64 TAG_HANDLER_END(MYBIND)
65
66
67
68 TAGS_MODULE_BEGIN(MyBind)
69
70 TAGS_MODULE_ADD(MYBIND)
71
72 TAGS_MODULE_END(MyBind)
73
74
75
76
77
78
79
80
81
82 // ----------------------------------------------------------------------------
83 // private classes
84 // ----------------------------------------------------------------------------
85
86 // Define a new application type, each program should derive a class from wxApp
87 class MyApp : public wxApp
88 {
89 public:
90 // override base class virtuals
91 // ----------------------------
92
93 // this one is called on application startup and is a good place for the app
94 // initialization (doing it here and not in the ctor allows to have an error
95 // return: if OnInit() returns false, the application terminates)
96 virtual bool OnInit();
97 };
98
99 // Define a new frame type: this is going to be our main frame
100 class MyFrame : public wxFrame
101 {
102 public:
103 // ctor(s)
104 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
105
106 // event handlers (these functions should _not_ be virtual)
107 void OnQuit(wxCommandEvent& event);
108 void OnAbout(wxCommandEvent& event);
109 void OnBack(wxCommandEvent& event);
110 void OnForward(wxCommandEvent& event);
111
112 private:
113 // any class wishing to process wxWindows events must use this macro
114 DECLARE_EVENT_TABLE()
115 };
116
117 // ----------------------------------------------------------------------------
118 // constants
119 // ----------------------------------------------------------------------------
120
121 // IDs for the controls and the menu commands
122 enum
123 {
124 // menu items
125 Minimal_Quit = 1,
126 Minimal_About,
127 Minimal_Back,
128 Minimal_Forward,
129
130 // controls start here (the numbers are, of course, arbitrary)
131 Minimal_Text = 1000,
132 };
133
134 // ----------------------------------------------------------------------------
135 // event tables and other macros for wxWindows
136 // ----------------------------------------------------------------------------
137
138 // the event tables connect the wxWindows events with the functions (event
139 // handlers) which process them. It can be also done at run-time, but for the
140 // simple menu events like this the static method is much simpler.
141 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
142 EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
143 EVT_MENU(Minimal_About, MyFrame::OnAbout)
144 EVT_MENU(Minimal_Back, MyFrame::OnBack)
145 EVT_MENU(Minimal_Forward, MyFrame::OnForward)
146 END_EVENT_TABLE()
147
148 // Create a new application object: this macro will allow wxWindows to create
149 // the application object during program execution (it's better than using a
150 // static object for many reasons) and also declares the accessor function
151 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
152 // not wxApp)
153 IMPLEMENT_APP(MyApp)
154
155 // ============================================================================
156 // implementation
157 // ============================================================================
158
159 // ----------------------------------------------------------------------------
160 // the application class
161 // ----------------------------------------------------------------------------
162
163 // `Main program' equivalent: the program execution "starts" here
164 bool MyApp::OnInit()
165 {
166 // Create the main application window
167 MyFrame *frame = new MyFrame("wxHtmlWindow testing application",
168 wxPoint(50, 50), wxSize(640, 480));
169
170 // Show it and tell the application that it's our main window
171 // @@@ what does it do exactly, in fact? is it necessary here?
172 frame->Show(TRUE);
173 SetTopWindow(frame);
174
175 // success: wxApp::OnRun() will be called which will enter the main message
176 // loop and the application will run. If we returned FALSE here, the
177 // application would exit immediately.
178 return TRUE;
179 }
180
181 // ----------------------------------------------------------------------------
182 // main frame
183 // ----------------------------------------------------------------------------
184
185 wxHtmlWindow *html;
186
187 // frame constructor
188 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
189 : wxFrame((wxFrame *)NULL, -1, title, pos, size)
190 {
191 // create a menu bar
192 wxMenu *menuFile = new wxMenu;
193 wxMenu *menuNav = new wxMenu;
194
195 menuFile->Append(Minimal_Quit, "E&xit");
196 menuNav->Append(Minimal_Back, "Go &BACK");
197 menuNav->Append(Minimal_Forward, "Go &FORWARD");
198
199 // now append the freshly created menu to the menu bar...
200 wxMenuBar *menuBar = new wxMenuBar;
201 menuBar->Append(menuFile, "&File");
202 menuBar->Append(menuNav, "&Navigate");
203
204 // ... and attach this menu bar to the frame
205 SetMenuBar(menuBar);
206
207 CreateStatusBar(2);
208
209 html = new wxHtmlWindow(this);
210 html -> SetRelatedFrame(this, "VFS Demo: '%s'");
211 html -> SetRelatedStatusBar(1);
212 html -> LoadPage("start.htm");
213 }
214
215
216 // event handlers
217
218 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
219 {
220 // TRUE is to force the frame to close
221 Close(TRUE);
222 }
223
224 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
225 {
226 }
227
228
229
230 void MyFrame::OnBack(wxCommandEvent& WXUNUSED(event))
231 {
232 if (!html -> HistoryBack()) wxMessageBox("You reached prehistory era!");
233 }
234
235
236 void MyFrame::OnForward(wxCommandEvent& WXUNUSED(event))
237 {
238 if (!html -> HistoryForward()) wxMessageBox("No more items in history!");
239 }
240
241
242
243
244
245