]> git.saurik.com Git - wxWidgets.git/blob - interface/wx/artprov.h
Make storing non-trivial data in wxThreadSpecificInfo possible.
[wxWidgets.git] / interface / wx / artprov.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: artprov.h
3 // Purpose: interface of wxArtProvider
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8 /**
9 This type identifies the client of the art objects requested to wxArtProvider.
10 */
11 typedef wxString wxArtClient;
12
13 /**
14 This type identifies a specific art object which can be requested to wxArtProvider.
15 */
16 typedef wxString wxArtID;
17
18
19 wxArtClient wxART_TOOLBAR;
20 wxArtClient wxART_MENU;
21 wxArtClient wxART_FRAME_ICON;
22
23 wxArtClient wxART_CMN_DIALOG;
24 wxArtClient wxART_HELP_BROWSER;
25 wxArtClient wxART_MESSAGE_BOX;
26 wxArtClient wxART_BUTTON;
27 wxArtClient wxART_LIST;
28
29 wxArtClient wxART_OTHER;
30
31
32 wxArtID wxART_ADD_BOOKMARK;
33 wxArtID wxART_DEL_BOOKMARK;
34 wxArtID wxART_HELP_SIDE_PANEL;
35 wxArtID wxART_HELP_SETTINGS;
36 wxArtID wxART_HELP_BOOK;
37 wxArtID wxART_HELP_FOLDER;
38 wxArtID wxART_HELP_PAGE;
39 wxArtID wxART_GO_BACK;
40 wxArtID wxART_GO_FORWARD;
41 wxArtID wxART_GO_UP;
42 wxArtID wxART_GO_DOWN;
43 wxArtID wxART_GO_TO_PARENT;
44 wxArtID wxART_GO_HOME;
45 wxArtID wxART_GOTO_FIRST;
46 wxArtID wxART_GOTO_LAST;
47 wxArtID wxART_FILE_OPEN;
48 wxArtID wxART_FILE_SAVE;
49 wxArtID wxART_FILE_SAVE_AS;
50 wxArtID wxART_PRINT;
51 wxArtID wxART_HELP;
52 wxArtID wxART_TIP;
53 wxArtID wxART_REPORT_VIEW;
54 wxArtID wxART_LIST_VIEW;
55 wxArtID wxART_NEW_DIR;
56 wxArtID wxART_HARDDISK;
57 wxArtID wxART_FLOPPY;
58 wxArtID wxART_CDROM;
59 wxArtID wxART_REMOVABLE;
60 wxArtID wxART_FOLDER;
61 wxArtID wxART_FOLDER_OPEN;
62 wxArtID wxART_GO_DIR_UP;
63 wxArtID wxART_EXECUTABLE_FILE;
64 wxArtID wxART_NORMAL_FILE;
65 wxArtID wxART_TICK_MARK;
66 wxArtID wxART_CROSS_MARK;
67 wxArtID wxART_ERROR;
68 wxArtID wxART_QUESTION;
69 wxArtID wxART_WARNING;
70 wxArtID wxART_INFORMATION;
71 wxArtID wxART_MISSING_IMAGE;
72
73 wxArtID wxART_COPY;
74 wxArtID wxART_CUT;
75 wxArtID wxART_PASTE;
76 wxArtID wxART_DELETE;
77 wxArtID wxART_NEW;
78
79 wxArtID wxART_UNDO;
80 wxArtID wxART_REDO;
81
82 wxArtID wxART_PLUS;
83 wxArtID wxART_MINUS;
84
85 wxArtID wxART_CLOSE;
86 wxArtID wxART_QUIT;
87
88 wxArtID wxART_FIND;
89 wxArtID wxART_FIND_AND_REPLACE;
90
91
92 /**
93 @class wxArtProvider
94
95 wxArtProvider class is used to customize the look of wxWidgets application.
96
97 When wxWidgets needs to display an icon or a bitmap (e.g. in the standard file
98 dialog), it does not use a hard-coded resource but asks wxArtProvider for it
99 instead. This way users can plug in their own wxArtProvider class and easily
100 replace standard art with their own version.
101
102 All that is needed is to derive a class from wxArtProvider, override either its
103 wxArtProvider::CreateBitmap() and/or its wxArtProvider::CreateIconBundle() methods
104 and register the provider with wxArtProvider::Push():
105
106 @code
107 class MyProvider : public wxArtProvider
108 {
109 protected:
110 wxBitmap CreateBitmap(const wxArtID& id,
111 const wxArtClient& client,
112 const wxSize size)
113
114 // optionally override this one as well
115 wxIconBundle CreateIconBundle(const wxArtID& id,
116 const wxArtClient& client)
117 { ... }
118 };
119 ...
120 wxArtProvider::Push(new MyProvider);
121 @endcode
122
123 If you need bitmap images (of the same artwork) that should be displayed at
124 different sizes you should probably consider overriding wxArtProvider::CreateIconBundle
125 and supplying icon bundles that contain different bitmap sizes.
126
127 There's another way of taking advantage of this class: you can use it in your
128 code and use platform native icons as provided by wxArtProvider::GetBitmap or
129 wxArtProvider::GetIcon.
130
131 @section artprovider_identify Identifying art resources
132
133 Every bitmap and icon bundle are known to wxArtProvider under an unique ID that
134 is used when requesting a resource from it. The ID is represented by the ::wxArtID type
135 and can have one of these predefined values (you can see bitmaps represented by these
136 constants in the @ref page_samples_artprov):
137
138 <table>
139 <tr><td>
140 @li @c wxART_ERROR
141 @li @c wxART_QUESTION
142 @li @c wxART_WARNING
143 @li @c wxART_INFORMATION
144 @li @c wxART_ADD_BOOKMARK
145 @li @c wxART_DEL_BOOKMARK
146 @li @c wxART_HELP_SIDE_PANEL
147 @li @c wxART_HELP_SETTINGS
148 @li @c wxART_HELP_BOOK
149 @li @c wxART_HELP_FOLDER
150 @li @c wxART_HELP_PAGE
151 @li @c wxART_GO_BACK
152 @li @c wxART_GO_FORWARD
153 @li @c wxART_GO_UP
154 @li @c wxART_GO_DOWN
155 @li @c wxART_GO_TO_PARENT
156 @li @c wxART_GO_HOME
157 @li @c wxART_GOTO_FIRST (since 2.9.2)
158 </td><td>
159 @li @c wxART_GOTO_LAST (since 2.9.2)
160 @li @c wxART_PRINT
161 @li @c wxART_HELP
162 @li @c wxART_TIP
163 @li @c wxART_REPORT_VIEW
164 @li @c wxART_LIST_VIEW
165 @li @c wxART_NEW_DIR
166 @li @c wxART_FOLDER
167 @li @c wxART_FOLDER_OPEN
168 @li @c wxART_GO_DIR_UP
169 @li @c wxART_EXECUTABLE_FILE
170 @li @c wxART_NORMAL_FILE
171 @li @c wxART_TICK_MARK
172 @li @c wxART_CROSS_MARK
173 @li @c wxART_MISSING_IMAGE
174 @li @c wxART_NEW
175 @li @c wxART_FILE_OPEN
176 @li @c wxART_FILE_SAVE
177 </td><td>
178 @li @c wxART_FILE_SAVE_AS
179 @li @c wxART_DELETE
180 @li @c wxART_COPY
181 @li @c wxART_CUT
182 @li @c wxART_PASTE
183 @li @c wxART_UNDO
184 @li @c wxART_REDO
185 @li @c wxART_PLUS (since 2.9.2)
186 @li @c wxART_MINUS (since 2.9.2)
187 @li @c wxART_CLOSE
188 @li @c wxART_QUIT
189 @li @c wxART_FIND
190 @li @c wxART_FIND_AND_REPLACE
191 @li @c wxART_HARDDISK
192 @li @c wxART_FLOPPY
193 @li @c wxART_CDROM
194 @li @c wxART_REMOVABLE
195 </td></tr>
196 </table>
197
198 Additionally, any string recognized by custom art providers registered using
199 wxArtProvider::Push may be used.
200
201 @note
202 When running under GTK+ 2, GTK+ stock item IDs (e.g. @c "gtk-cdrom") may be used
203 as well:
204 @code
205 #ifdef __WXGTK__
206 wxBitmap bmp = wxArtProvider::GetBitmap("gtk-cdrom", wxART_MENU);
207 #endif
208 @endcode
209 For a list of the GTK+ stock items please refer to the
210 <a href="http://library.gnome.org/devel/gtk/stable/gtk-Stock-Items.html">GTK+ documentation
211 page</a>.
212 It is also possible to load icons from the current icon theme by specifying their name
213 (without extension and directory components).
214 Icon themes recognized by GTK+ follow the freedesktop.org
215 <a href="http://freedesktop.org/Standards/icon-theme-spec">Icon Themes specification</a>.
216 Note that themes are not guaranteed to contain all icons, so wxArtProvider may
217 return ::wxNullBitmap or ::wxNullIcon.
218 The default theme is typically installed in @c /usr/share/icons/hicolor.
219
220
221 @section artprovider_clients Clients
222
223 The @e client is the entity that calls wxArtProvider's GetBitmap() or GetIcon() function.
224 It is represented by wxClientID type and can have one of these values:
225
226 @li @c wxART_TOOLBAR
227 @li @c wxART_MENU
228 @li @c wxART_BUTTON
229 @li @c wxART_FRAME_ICON
230 @li @c wxART_CMN_DIALOG
231 @li @c wxART_HELP_BROWSER
232 @li @c wxART_MESSAGE_BOX
233 @li @c wxART_OTHER (used for all requests that don't fit into any of the
234 categories above)
235
236 Client ID serve as a hint to wxArtProvider that is supposed to help it to
237 choose the best looking bitmap. For example it is often desirable to use
238 slightly different icons in menus and toolbars even though they represent
239 the same action (e.g. wxART_FILE_OPEN). Remember that this is really only a
240 hint for wxArtProvider -- it is common that wxArtProvider::GetBitmap returns
241 identical bitmap for different client values!
242
243 @library{wxcore}
244 @category{misc}
245
246 @see @ref page_samples_artprov for an example of wxArtProvider usage;
247 @ref page_stockitems "stock ID list"
248 */
249 class wxArtProvider : public wxObject
250 {
251 public:
252 /**
253 The destructor automatically removes the provider from the provider stack used
254 by GetBitmap().
255 */
256 virtual ~wxArtProvider();
257
258 /**
259 Delete the given @a provider.
260 */
261 static bool Delete(wxArtProvider* provider);
262
263 /**
264 Query registered providers for bitmap with given ID.
265
266 @param id
267 wxArtID unique identifier of the bitmap.
268 @param client
269 wxArtClient identifier of the client (i.e. who is asking for the bitmap).
270 @param size
271 Size of the returned bitmap or wxDefaultSize if size doesn't matter.
272
273 @return The bitmap if one of registered providers recognizes the ID or
274 wxNullBitmap otherwise.
275 */
276 static wxBitmap GetBitmap(const wxArtID& id,
277 const wxArtClient& client = wxART_OTHER,
278 const wxSize& size = wxDefaultSize);
279
280 /**
281 Same as wxArtProvider::GetBitmap, but return a wxIcon object
282 (or ::wxNullIcon on failure).
283 */
284 static wxIcon GetIcon(const wxArtID& id,
285 const wxArtClient& client = wxART_OTHER,
286 const wxSize& size = wxDefaultSize);
287
288 /**
289 Returns native icon size for use specified by @a client hint.
290
291 If the platform has no commonly used default for this use or if
292 @a client is not recognized, returns wxDefaultSize.
293
294 @note In some cases, a platform may have @em several appropriate
295 native sizes (for example, wxART_FRAME_ICON for frame icons).
296 In that case, this method returns only one of them, picked
297 reasonably.
298
299 @since 2.9.0
300 */
301 static wxSize GetNativeSizeHint(const wxArtClient& client);
302
303 /**
304 Returns a suitable size hint for the given @e wxArtClient.
305
306 If @a platform_default is @true, return a size based on the current
307 platform using GetNativeSizeHint(), otherwise return the size from the
308 topmost wxArtProvider. @e wxDefaultSize may be returned if the client
309 doesn't have a specified size, like wxART_OTHER for example.
310
311 @see GetNativeSizeHint()
312 */
313 static wxSize GetSizeHint(const wxArtClient& client,
314 bool platform_default = false);
315
316 /**
317 Query registered providers for icon bundle with given ID.
318
319 @param id
320 wxArtID unique identifier of the icon bundle.
321 @param client
322 wxArtClient identifier of the client (i.e. who is asking for the icon
323 bundle).
324
325 @return The icon bundle if one of registered providers recognizes the ID
326 or wxNullIconBundle otherwise.
327 */
328 static wxIconBundle GetIconBundle(const wxArtID& id,
329 const wxArtClient& client = wxART_OTHER);
330
331 /**
332 Returns true if the platform uses native icons provider that should
333 take precedence over any customizations.
334
335 This is true for any platform that has user-customizable icon themes,
336 currently only wxGTK.
337
338 A typical use for this method is to decide whether a custom art provider
339 should be plugged in using Push() or PushBack().
340
341 @since 2.9.0
342 */
343 static bool HasNativeProvider();
344
345 /**
346 @deprecated Use PushBack() instead.
347 */
348 static void Insert(wxArtProvider* provider);
349
350 /**
351 Remove latest added provider and delete it.
352 */
353 static bool Pop();
354
355 /**
356 Register new art provider and add it to the top of providers stack
357 (i.e. it will be queried as the first provider).
358
359 @see PushBack()
360 */
361 static void Push(wxArtProvider* provider);
362
363 /**
364 Register new art provider and add it to the bottom of providers stack.
365 In other words, it will be queried as the last one, after all others,
366 including the default provider.
367
368 @see Push()
369
370 @since 2.9.0
371 */
372 static void PushBack(wxArtProvider* provider);
373
374 /**
375 Remove a provider from the stack if it is on it. The provider is not
376 deleted, unlike when using Delete().
377 */
378 static bool Remove(wxArtProvider* provider);
379
380 /**
381 * Helper used by GetMessageBoxIcon(): return the art id corresponding to
382 * the standard wxICON_INFORMATION/WARNING/ERROR/QUESTION flags (only one
383 * can be set)
384 */
385 static wxArtID GetMessageBoxIconId(int flags);
386
387 /**
388 * Helper used by several generic classes: return the icon corresponding to
389 * the standard wxICON_INFORMATION/WARNING/ERROR/QUESTION flags (only one
390 * can be set)
391 */
392 static wxIcon GetMessageBoxIcon(int flags);
393
394
395 protected:
396
397 /**
398 Derived art provider classes must override this method to create requested art
399 resource. Note that returned bitmaps are cached by wxArtProvider and it is
400 therefore not necessary to optimize CreateBitmap() for speed (e.g. you may
401 create wxBitmap objects from XPMs here).
402
403 @param id
404 wxArtID unique identifier of the bitmap.
405 @param client
406 wxArtClient identifier of the client (i.e. who is asking for the bitmap).
407 This only servers as a hint.
408 @param size
409 Preferred size of the bitmap. The function may return a bitmap of different
410 dimensions, it will be automatically rescaled to meet client's request.
411
412 @note
413 This is not part of wxArtProvider's public API, use wxArtProvider::GetBitmap
414 or wxArtProvider::GetIconBundle or wxArtProvider::GetIcon to query wxArtProvider
415 for a resource.
416
417 @see CreateIconBundle()
418 */
419 virtual wxBitmap CreateBitmap(const wxArtID& id,
420 const wxArtClient& client,
421 const wxSize& size);
422
423 /**
424 This method is similar to CreateBitmap() but can be used when a bitmap
425 (or an icon) exists in several sizes.
426 */
427 virtual wxIconBundle CreateIconBundle(const wxArtID& id,
428 const wxArtClient& client);
429 };
430