| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: artprov.h
- // Purpose: interface of wxArtProvider
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- This type identifies the client of the art objects requested to wxArtProvider.
- */
- typedef wxString wxArtClient;
- /**
- This type identifies a specific art object which can be requested to wxArtProvider.
- */
- typedef wxString wxArtID;
- wxArtClient wxART_TOOLBAR;
- wxArtClient wxART_MENU;
- wxArtClient wxART_FRAME_ICON;
- wxArtClient wxART_CMN_DIALOG;
- wxArtClient wxART_HELP_BROWSER;
- wxArtClient wxART_MESSAGE_BOX;
- wxArtClient wxART_BUTTON;
- wxArtClient wxART_LIST;
- wxArtClient wxART_OTHER;
- wxArtID wxART_ADD_BOOKMARK;
- wxArtID wxART_DEL_BOOKMARK;
- wxArtID wxART_HELP_SIDE_PANEL;
- wxArtID wxART_HELP_SETTINGS;
- wxArtID wxART_HELP_BOOK;
- wxArtID wxART_HELP_FOLDER;
- wxArtID wxART_HELP_PAGE;
- wxArtID wxART_GO_BACK;
- wxArtID wxART_GO_FORWARD;
- wxArtID wxART_GO_UP;
- wxArtID wxART_GO_DOWN;
- wxArtID wxART_GO_TO_PARENT;
- wxArtID wxART_GO_HOME;
- wxArtID wxART_GOTO_FIRST;
- wxArtID wxART_GOTO_LAST;
- wxArtID wxART_FILE_OPEN;
- wxArtID wxART_FILE_SAVE;
- wxArtID wxART_FILE_SAVE_AS;
- wxArtID wxART_PRINT;
- wxArtID wxART_HELP;
- wxArtID wxART_TIP;
- wxArtID wxART_REPORT_VIEW;
- wxArtID wxART_LIST_VIEW;
- wxArtID wxART_NEW_DIR;
- wxArtID wxART_HARDDISK;
- wxArtID wxART_FLOPPY;
- wxArtID wxART_CDROM;
- wxArtID wxART_REMOVABLE;
- wxArtID wxART_FOLDER;
- wxArtID wxART_FOLDER_OPEN;
- wxArtID wxART_GO_DIR_UP;
- wxArtID wxART_EXECUTABLE_FILE;
- wxArtID wxART_NORMAL_FILE;
- wxArtID wxART_TICK_MARK;
- wxArtID wxART_CROSS_MARK;
- wxArtID wxART_ERROR;
- wxArtID wxART_QUESTION;
- wxArtID wxART_WARNING;
- wxArtID wxART_INFORMATION;
- wxArtID wxART_MISSING_IMAGE;
- wxArtID wxART_COPY;
- wxArtID wxART_CUT;
- wxArtID wxART_PASTE;
- wxArtID wxART_DELETE;
- wxArtID wxART_NEW;
- wxArtID wxART_UNDO;
- wxArtID wxART_REDO;
- wxArtID wxART_PLUS;
- wxArtID wxART_MINUS;
- wxArtID wxART_CLOSE;
- wxArtID wxART_QUIT;
- wxArtID wxART_FIND;
- wxArtID wxART_FIND_AND_REPLACE;
- /**
- @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);
- /**
- * Helper used by GetMessageBoxIcon(): return the art id corresponding to
- * the standard wxICON_INFORMATION/WARNING/ERROR/QUESTION flags (only one
- * can be set)
- */
- static wxArtID GetMessageBoxIconId(int flags);
- /**
- * Helper used by several generic classes: return the icon corresponding to
- * the standard wxICON_INFORMATION/WARNING/ERROR/QUESTION flags (only one
- * can be set)
- */
- static wxIcon GetMessageBoxIcon(int flags);
- 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);
- };
|