/sources/plug_wx/interface/wx/artprov.h
C Header | 343 lines | 31 code | 20 blank | 292 comment | 0 complexity | 312151f7020a330e0e0f8911485b2a3d MD5 | raw file
- /////////////////////////////////////////////////////////////////////////////
- // Name: artprov.h
- // Purpose: interface of wxArtProvider
- // Author: wxWidgets team
- // RCS-ID: $Id$
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- This type identifies the client of the art objects requested to wxArtProvider.
- */
- typedef class wxString wxArtClient;
- /**
- This type identifies a specific art object which can be requested to wxArtProvider.
- */
- typedef class wxString wxArtID;
- /**
- @class wxArtProvider
- wxArtProvider class is used to customize the look of wxWidgets application.
- When wxWidgets needs to display an icon or a bitmap (e.g. in the standard file
- dialog), it does not use a hard-coded resource but asks wxArtProvider for it
- instead. This way users can plug in their own wxArtProvider class and easily
- replace standard art with their own version.
- All that is needed is to derive a class from wxArtProvider, override either its
- wxArtProvider::CreateBitmap() and/or its wxArtProvider::CreateIconBundle() methods
- and register the provider with wxArtProvider::Push():
- @code
- class MyProvider : public wxArtProvider
- {
- protected:
- wxBitmap CreateBitmap(const wxArtID& id,
- const wxArtClient& client,
- const wxSize size)
- // optionally override this one as well
- wxIconBundle CreateIconBundle(const wxArtID& id,
- const wxArtClient& client)
- { ... }
- };
- ...
- wxArtProvider::Push(new MyProvider);
- @endcode
- If you need bitmap images (of the same artwork) that should be displayed at
- different sizes you should probably consider overriding wxArtProvider::CreateIconBundle
- and supplying icon bundles that contain different bitmap sizes.
- There's another way of taking advantage of this class: you can use it in your
- code and use platform native icons as provided by wxArtProvider::GetBitmap or
- wxArtProvider::GetIcon.
- @section artprovider_identify Identifying art resources
- Every bitmap and icon bundle are known to wxArtProvider under an unique ID that
- is used when requesting a resource from it. The ID is represented by the ::wxArtID type
- and can have one of these predefined values (you can see bitmaps represented by these
- constants in the @ref page_samples_artprov):
- <table>
- <tr><td>
- @li @c wxART_ERROR
- @li @c wxART_QUESTION
- @li @c wxART_WARNING
- @li @c wxART_INFORMATION
- @li @c wxART_ADD_BOOKMARK
- @li @c wxART_DEL_BOOKMARK
- @li @c wxART_HELP_SIDE_PANEL
- @li @c wxART_HELP_SETTINGS
- @li @c wxART_HELP_BOOK
- @li @c wxART_HELP_FOLDER
- @li @c wxART_HELP_PAGE
- @li @c wxART_GO_BACK
- @li @c wxART_GO_FORWARD
- @li @c wxART_GO_UP
- @li @c wxART_GO_DOWN
- @li @c wxART_GO_TO_PARENT
- @li @c wxART_GO_HOME
- @li @c wxART_GOTO_FIRST (since 2.9.2)
- </td><td>
- @li @c wxART_GOTO_LAST (since 2.9.2)
- @li @c wxART_PRINT
- @li @c wxART_HELP
- @li @c wxART_TIP
- @li @c wxART_REPORT_VIEW
- @li @c wxART_LIST_VIEW
- @li @c wxART_NEW_DIR
- @li @c wxART_FOLDER
- @li @c wxART_FOLDER_OPEN
- @li @c wxART_GO_DIR_UP
- @li @c wxART_EXECUTABLE_FILE
- @li @c wxART_NORMAL_FILE
- @li @c wxART_TICK_MARK
- @li @c wxART_CROSS_MARK
- @li @c wxART_MISSING_IMAGE
- @li @c wxART_NEW
- @li @c wxART_FILE_OPEN
- @li @c wxART_FILE_SAVE
- </td><td>
- @li @c wxART_FILE_SAVE_AS
- @li @c wxART_DELETE
- @li @c wxART_COPY
- @li @c wxART_CUT
- @li @c wxART_PASTE
- @li @c wxART_UNDO
- @li @c wxART_REDO
- @li @c wxART_PLUS (since 2.9.2)
- @li @c wxART_MINUS (since 2.9.2)
- @li @c wxART_CLOSE
- @li @c wxART_QUIT
- @li @c wxART_FIND
- @li @c wxART_FIND_AND_REPLACE
- @li @c wxART_HARDDISK
- @li @c wxART_FLOPPY
- @li @c wxART_CDROM
- @li @c wxART_REMOVABLE
- </td></tr>
- </table>
- Additionally, any string recognized by custom art providers registered using
- wxArtProvider::Push may be used.
- @note
- When running under GTK+ 2, GTK+ stock item IDs (e.g. @c "gtk-cdrom") may be used
- as well:
- @code
- #ifdef __WXGTK__
- wxBitmap bmp = wxArtProvider::GetBitmap("gtk-cdrom", wxART_MENU);
- #endif
- @endcode
- For a list of the GTK+ stock items please refer to the
- <a href="http://library.gnome.org/devel/gtk/stable/gtk-Stock-Items.html">GTK+ documentation
- page</a>.
- It is also possible to load icons from the current icon theme by specifying their name
- (without extension and directory components).
- Icon themes recognized by GTK+ follow the freedesktop.org
- <a href="http://freedesktop.org/Standards/icon-theme-spec">Icon Themes specification</a>.
- Note that themes are not guaranteed to contain all icons, so wxArtProvider may
- return ::wxNullBitmap or ::wxNullIcon.
- The default theme is typically installed in @c /usr/share/icons/hicolor.
- @section artprovider_clients Clients
- The @e client is the entity that calls wxArtProvider's GetBitmap() or GetIcon() function.
- It is represented by wxClientID type and can have one of these values:
- @li @c wxART_TOOLBAR
- @li @c wxART_MENU
- @li @c wxART_BUTTON
- @li @c wxART_FRAME_ICON
- @li @c wxART_CMN_DIALOG
- @li @c wxART_HELP_BROWSER
- @li @c wxART_MESSAGE_BOX
- @li @c wxART_OTHER (used for all requests that don't fit into any of the
- categories above)
- Client ID serve as a hint to wxArtProvider that is supposed to help it to
- choose the best looking bitmap. For example it is often desirable to use
- slightly different icons in menus and toolbars even though they represent
- the same action (e.g. wxART_FILE_OPEN). Remember that this is really only a
- hint for wxArtProvider -- it is common that wxArtProvider::GetBitmap returns
- identical bitmap for different client values!
- @library{wxcore}
- @category{misc}
- @see @ref page_samples_artprov for an example of wxArtProvider usage;
- @ref page_stockitems "stock ID list"
- */
- class wxArtProvider : public wxObject
- {
- public:
- /**
- The destructor automatically removes the provider from the provider stack used
- by GetBitmap().
- */
- virtual ~wxArtProvider();
- /**
- Delete the given @a provider.
- */
- static bool Delete(wxArtProvider* provider);
- /**
- Query registered providers for bitmap with given ID.
- @param id
- wxArtID unique identifier of the bitmap.
- @param client
- wxArtClient identifier of the client (i.e. who is asking for the bitmap).
- @param size
- Size of the returned bitmap or wxDefaultSize if size doesn't matter.
- @return The bitmap if one of registered providers recognizes the ID or
- wxNullBitmap otherwise.
- */
- static wxBitmap GetBitmap(const wxArtID& id,
- const wxArtClient& client = wxART_OTHER,
- const wxSize& size = wxDefaultSize);
- /**
- Same as wxArtProvider::GetBitmap, but return a wxIcon object
- (or ::wxNullIcon on failure).
- */
- static wxIcon GetIcon(const wxArtID& id,
- const wxArtClient& client = wxART_OTHER,
- const wxSize& size = wxDefaultSize);
- /**
- Returns native icon size for use specified by @a client hint.
- If the platform has no commonly used default for this use or if
- @a client is not recognized, returns wxDefaultSize.
- @note In some cases, a platform may have @em several appropriate
- native sizes (for example, wxART_FRAME_ICON for frame icons).
- In that case, this method returns only one of them, picked
- reasonably.
- @since 2.9.0
- */
- static wxSize GetNativeSizeHint(const wxArtClient& client);
- /**
- Returns a suitable size hint for the given @e wxArtClient.
- If @a platform_default is @true, return a size based on the current
- platform using GetNativeSizeHint(), otherwise return the size from the
- topmost wxArtProvider. @e wxDefaultSize may be returned if the client
- doesn't have a specified size, like wxART_OTHER for example.
- @see GetNativeSizeHint()
- */
- static wxSize GetSizeHint(const wxArtClient& client,
- bool platform_default = false);
- /**
- Query registered providers for icon bundle with given ID.
- @param id
- wxArtID unique identifier of the icon bundle.
- @param client
- wxArtClient identifier of the client (i.e. who is asking for the icon
- bundle).
- @return The icon bundle if one of registered providers recognizes the ID
- or wxNullIconBundle otherwise.
- */
- static wxIconBundle GetIconBundle(const wxArtID& id,
- const wxArtClient& client = wxART_OTHER);
- /**
- Returns true if the platform uses native icons provider that should
- take precedence over any customizations.
- This is true for any platform that has user-customizable icon themes,
- currently only wxGTK.
- A typical use for this method is to decide whether a custom art provider
- should be plugged in using Push() or PushBack().
- @since 2.9.0
- */
- static bool HasNativeProvider();
- /**
- @deprecated Use PushBack() instead.
- */
- static void Insert(wxArtProvider* provider);
- /**
- Remove latest added provider and delete it.
- */
- static bool Pop();
- /**
- Register new art provider and add it to the top of providers stack
- (i.e. it will be queried as the first provider).
- @see PushBack()
- */
- static void Push(wxArtProvider* provider);
- /**
- Register new art provider and add it to the bottom of providers stack.
- In other words, it will be queried as the last one, after all others,
- including the default provider.
- @see Push()
- @since 2.9.0
- */
- static void PushBack(wxArtProvider* provider);
- /**
- Remove a provider from the stack if it is on it. The provider is not
- deleted, unlike when using Delete().
- */
- static bool Remove(wxArtProvider* provider);
- protected:
- /**
- Derived art provider classes must override this method to create requested art
- resource. Note that returned bitmaps are cached by wxArtProvider and it is
- therefore not necessary to optimize CreateBitmap() for speed (e.g. you may
- create wxBitmap objects from XPMs here).
- @param id
- wxArtID unique identifier of the bitmap.
- @param client
- wxArtClient identifier of the client (i.e. who is asking for the bitmap).
- This only servers as a hint.
- @param size
- Preferred size of the bitmap. The function may return a bitmap of different
- dimensions, it will be automatically rescaled to meet client's request.
- @note
- This is not part of wxArtProvider's public API, use wxArtProvider::GetBitmap
- or wxArtProvider::GetIconBundle or wxArtProvider::GetIcon to query wxArtProvider
- for a resource.
- @see CreateIconBundle()
- */
- virtual wxBitmap CreateBitmap(const wxArtID& id,
- const wxArtClient& client,
- const wxSize& size);
- /**
- This method is similar to CreateBitmap() but can be used when a bitmap
- (or an icon) exists in several sizes.
- */
- virtual wxIconBundle CreateIconBundle(const wxArtID& id,
- const wxArtClient& client);
- };