]> git.saurik.com Git - wxWidgets.git/blob - samples/artprov/arttest.cpp
fixing reentrancy which happened in tests, bringing client coordinates origins in...
[wxWidgets.git] / samples / artprov / arttest.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: arttest.cpp
3 // Purpose: wxArtProvider sample
4 // Author: Vaclav Slavik
5 // Modified by:
6 // Created: 2002/03/25
7 // RCS-ID: $Id$
8 // Copyright: (c) Vaclav Slavik
9 // Licence: wxWindows licence
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 #ifndef wxHAS_IMAGES_IN_RESOURCES
24 #include "../sample.xpm"
25 #endif
26
27 #include "wx/artprov.h"
28 #include "artbrows.h"
29
30 // ----------------------------------------------------------------------------
31 // private classes
32 // ----------------------------------------------------------------------------
33
34 class MyApp : public wxApp
35 {
36 public:
37 virtual bool OnInit();
38 };
39
40 class MyFrame : public wxFrame
41 {
42 public:
43 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
44 long style = wxDEFAULT_FRAME_STYLE);
45
46 private:
47 // event handlers (these functions should _not_ be virtual)
48 void OnQuit(wxCommandEvent& event);
49 void OnAbout(wxCommandEvent& event);
50 #if wxUSE_LOG
51 void OnLogs(wxCommandEvent& event);
52 #endif // wxUSE_LOG
53 void OnBrowser(wxCommandEvent& event);
54 void OnPlugProvider(wxCommandEvent& event);
55
56 DECLARE_EVENT_TABLE()
57 };
58
59 // ----------------------------------------------------------------------------
60 // constants
61 // ----------------------------------------------------------------------------
62
63 // IDs for the controls and the menu commands
64 enum
65 {
66 ID_Quit = wxID_EXIT,
67 ID_Logs = wxID_HIGHEST+1,
68 ID_Browser,
69 ID_PlugProvider
70 };
71
72 // ----------------------------------------------------------------------------
73 // event tables and other macros for wxWidgets
74 // ----------------------------------------------------------------------------
75
76 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
77 EVT_MENU(ID_Quit, MyFrame::OnQuit)
78 #if wxUSE_LOG
79 EVT_MENU(ID_Logs, MyFrame::OnLogs)
80 #endif // wxUSE_LOG
81 EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
82 EVT_MENU(ID_Browser, MyFrame::OnBrowser)
83 EVT_MENU(ID_PlugProvider, MyFrame::OnPlugProvider)
84 END_EVENT_TABLE()
85
86 IMPLEMENT_APP(MyApp)
87
88 // ============================================================================
89 // implementation
90 // ============================================================================
91
92 // ----------------------------------------------------------------------------
93 // the application class
94 // ----------------------------------------------------------------------------
95
96 // 'Main program' equivalent: the program execution "starts" here
97 bool MyApp::OnInit()
98 {
99 if ( !wxApp::OnInit() )
100 return false;
101
102 // create the main application window
103 MyFrame *frame = new MyFrame(wxT("wxArtProvider sample"),
104 wxPoint(50, 50), wxSize(450, 340));
105 frame->Show(true);
106 return true;
107 }
108
109 // ----------------------------------------------------------------------------
110 // custom art provider
111 // ----------------------------------------------------------------------------
112
113 class MyArtProvider : public wxArtProvider
114 {
115 protected:
116 virtual wxBitmap CreateBitmap(const wxArtID& id, const wxArtClient& client,
117 const wxSize& size);
118 };
119
120 #include "info.xpm"
121 #include "error.xpm"
122 #include "warning.xpm"
123 #include "question.xpm"
124
125 wxBitmap MyArtProvider::CreateBitmap(const wxArtID& id,
126 const wxArtClient& client,
127 const wxSize& WXUNUSED(size))
128 {
129 if ( client == wxART_MESSAGE_BOX )
130 {
131 if ( id == wxART_INFORMATION )
132 return wxBitmap(info_xpm);
133 if ( id == wxART_ERROR )
134 return wxBitmap(error_xpm);
135 if ( id == wxART_WARNING )
136 return wxBitmap(warning_xpm);
137 if ( id == wxART_QUESTION )
138 return wxBitmap(question_xpm);
139 }
140 return wxNullBitmap;
141 }
142
143
144
145 // ----------------------------------------------------------------------------
146 // main frame
147 // ----------------------------------------------------------------------------
148
149 // frame constructor
150 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style)
151 : wxFrame(NULL, wxID_ANY, title, pos, size, style)
152 {
153 SetIcon(wxICON(sample));
154
155 // create a menu bar
156 wxMenu *menuFile = new wxMenu;
157
158 // the "About" item should be in the help menu
159 wxMenu *helpMenu = new wxMenu;
160 helpMenu->Append(wxID_ABOUT, wxT("&About\tF1"), wxT("Show about dialog"));
161
162 menuFile->AppendCheckItem(ID_PlugProvider, wxT("&Plug-in art provider"), wxT("Enable custom art provider"));
163 menuFile->AppendSeparator();
164
165 #if wxUSE_LOG
166 menuFile->Append(ID_Logs, wxT("&Logging test"), wxT("Show some logging output"));
167 #endif // wxUSE_LOG
168 menuFile->Append(ID_Browser, wxT("&Resources browser"), wxT("Browse all available icons"));
169 menuFile->AppendSeparator();
170
171 menuFile->Append(ID_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
172
173 // now append the freshly created menu to the menu bar...
174 wxMenuBar *menuBar = new wxMenuBar();
175 menuBar->Append(menuFile, wxT("&File"));
176 menuBar->Append(helpMenu, wxT("&Help"));
177
178 // ... and attach this menu bar to the frame
179 SetMenuBar(menuBar);
180 }
181
182
183 // event handlers
184
185 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
186 {
187 // true is to force the frame to close
188 Close(true);
189 }
190
191 #if wxUSE_LOG
192 void MyFrame::OnLogs(wxCommandEvent& WXUNUSED(event))
193 {
194 wxLogMessage(wxT("Some information."));
195 wxLogError(wxT("This is an error."));
196 wxLogWarning(wxT("A warning."));
197 wxLogError(wxT("Yet another error."));
198 wxLog::GetActiveTarget()->Flush();
199 wxLogMessage(wxT("Check/uncheck 'File/Plug-in art provider' and try again."));
200 }
201 #endif // wxUSE_LOG
202
203 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
204 {
205 wxString msg;
206 msg.Printf( wxT("This is the about dialog of wxArtProvider sample.\n")
207 wxT("Welcome to %s"), wxVERSION_STRING);
208
209 wxMessageBox(msg, wxT("About wxArtProvider sample"),
210 wxOK | wxICON_INFORMATION, this);
211 }
212
213 void MyFrame::OnBrowser(wxCommandEvent& WXUNUSED(event))
214 {
215 wxArtBrowserDialog dlg(this);
216 dlg.ShowModal();
217 }
218
219 void MyFrame::OnPlugProvider(wxCommandEvent& event)
220 {
221 if ( event.IsChecked() )
222 wxArtProvider::Push(new MyArtProvider);
223 else
224 wxArtProvider::Pop();
225 }