1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/artprov.h
3// Purpose:     wxArtProvider class
4// Author:      Vaclav Slavik
5// Modified by:
6// Created:     18/03/2002
7// RCS-ID:      $Id: artprov.h 61872 2009-09-09 22:37:05Z VZ $
8// Copyright:   (c) Vaclav Slavik
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_ARTPROV_H_
13#define _WX_ARTPROV_H_
14
15#include "wx/string.h"
16#include "wx/bitmap.h"
17#include "wx/icon.h"
18
19class WXDLLIMPEXP_FWD_CORE wxArtProvidersList;
20class WXDLLIMPEXP_FWD_CORE wxArtProviderCache;
21class wxArtProviderModule;
22
23// ----------------------------------------------------------------------------
24// Types
25// ----------------------------------------------------------------------------
26
27typedef wxString wxArtClient;
28typedef wxString wxArtID;
29
30#define wxART_MAKE_CLIENT_ID_FROM_STR(id)  (id + wxT("_C"))
31#define wxART_MAKE_CLIENT_ID(id)           wxT(#id) wxT("_C")
32#define wxART_MAKE_ART_ID_FROM_STR(id)     (id)
33#define wxART_MAKE_ART_ID(id)              wxT(#id)
34
35// ----------------------------------------------------------------------------
36// Art clients
37// ----------------------------------------------------------------------------
38
39#define wxART_TOOLBAR              wxART_MAKE_CLIENT_ID(wxART_TOOLBAR)
40#define wxART_MENU                 wxART_MAKE_CLIENT_ID(wxART_MENU)
41#define wxART_FRAME_ICON           wxART_MAKE_CLIENT_ID(wxART_FRAME_ICON)
42
43#define wxART_CMN_DIALOG           wxART_MAKE_CLIENT_ID(wxART_CMN_DIALOG)
44#define wxART_HELP_BROWSER         wxART_MAKE_CLIENT_ID(wxART_HELP_BROWSER)
45#define wxART_MESSAGE_BOX          wxART_MAKE_CLIENT_ID(wxART_MESSAGE_BOX)
46#define wxART_BUTTON               wxART_MAKE_CLIENT_ID(wxART_BUTTON)
47
48#define wxART_OTHER                wxART_MAKE_CLIENT_ID(wxART_OTHER)
49
50// ----------------------------------------------------------------------------
51// Art IDs
52// ----------------------------------------------------------------------------
53
54#define wxART_ADD_BOOKMARK         wxART_MAKE_ART_ID(wxART_ADD_BOOKMARK)
55#define wxART_DEL_BOOKMARK         wxART_MAKE_ART_ID(wxART_DEL_BOOKMARK)
56#define wxART_HELP_SIDE_PANEL      wxART_MAKE_ART_ID(wxART_HELP_SIDE_PANEL)
57#define wxART_HELP_SETTINGS        wxART_MAKE_ART_ID(wxART_HELP_SETTINGS)
58#define wxART_HELP_BOOK            wxART_MAKE_ART_ID(wxART_HELP_BOOK)
59#define wxART_HELP_FOLDER          wxART_MAKE_ART_ID(wxART_HELP_FOLDER)
60#define wxART_HELP_PAGE            wxART_MAKE_ART_ID(wxART_HELP_PAGE)
61#define wxART_GO_BACK              wxART_MAKE_ART_ID(wxART_GO_BACK)
62#define wxART_GO_FORWARD           wxART_MAKE_ART_ID(wxART_GO_FORWARD)
63#define wxART_GO_UP                wxART_MAKE_ART_ID(wxART_GO_UP)
64#define wxART_GO_DOWN              wxART_MAKE_ART_ID(wxART_GO_DOWN)
65#define wxART_GO_TO_PARENT         wxART_MAKE_ART_ID(wxART_GO_TO_PARENT)
66#define wxART_GO_HOME              wxART_MAKE_ART_ID(wxART_GO_HOME)
67#define wxART_FILE_OPEN            wxART_MAKE_ART_ID(wxART_FILE_OPEN)
68#define wxART_FILE_SAVE            wxART_MAKE_ART_ID(wxART_FILE_SAVE)
69#define wxART_FILE_SAVE_AS         wxART_MAKE_ART_ID(wxART_FILE_SAVE_AS)
70#define wxART_PRINT                wxART_MAKE_ART_ID(wxART_PRINT)
71#define wxART_HELP                 wxART_MAKE_ART_ID(wxART_HELP)
72#define wxART_TIP                  wxART_MAKE_ART_ID(wxART_TIP)
73#define wxART_REPORT_VIEW          wxART_MAKE_ART_ID(wxART_REPORT_VIEW)
74#define wxART_LIST_VIEW            wxART_MAKE_ART_ID(wxART_LIST_VIEW)
75#define wxART_NEW_DIR              wxART_MAKE_ART_ID(wxART_NEW_DIR)
76#define wxART_HARDDISK             wxART_MAKE_ART_ID(wxART_HARDDISK)
77#define wxART_FLOPPY               wxART_MAKE_ART_ID(wxART_FLOPPY)
78#define wxART_CDROM                wxART_MAKE_ART_ID(wxART_CDROM)
79#define wxART_REMOVABLE            wxART_MAKE_ART_ID(wxART_REMOVABLE)
80#define wxART_FOLDER               wxART_MAKE_ART_ID(wxART_FOLDER)
81#define wxART_FOLDER_OPEN          wxART_MAKE_ART_ID(wxART_FOLDER_OPEN)
82#define wxART_GO_DIR_UP            wxART_MAKE_ART_ID(wxART_GO_DIR_UP)
83#define wxART_EXECUTABLE_FILE      wxART_MAKE_ART_ID(wxART_EXECUTABLE_FILE)
84#define wxART_NORMAL_FILE          wxART_MAKE_ART_ID(wxART_NORMAL_FILE)
85#define wxART_TICK_MARK            wxART_MAKE_ART_ID(wxART_TICK_MARK)
86#define wxART_CROSS_MARK           wxART_MAKE_ART_ID(wxART_CROSS_MARK)
87#define wxART_ERROR                wxART_MAKE_ART_ID(wxART_ERROR)
88#define wxART_QUESTION             wxART_MAKE_ART_ID(wxART_QUESTION)
89#define wxART_WARNING              wxART_MAKE_ART_ID(wxART_WARNING)
90#define wxART_INFORMATION          wxART_MAKE_ART_ID(wxART_INFORMATION)
91#define wxART_MISSING_IMAGE        wxART_MAKE_ART_ID(wxART_MISSING_IMAGE)
92
93#define wxART_COPY                 wxART_MAKE_ART_ID(wxART_COPY)
94#define wxART_CUT                  wxART_MAKE_ART_ID(wxART_CUT)
95#define wxART_PASTE                wxART_MAKE_ART_ID(wxART_PASTE)
96#define wxART_DELETE               wxART_MAKE_ART_ID(wxART_DELETE)
97#define wxART_NEW                  wxART_MAKE_ART_ID(wxART_NEW)
98
99#define wxART_UNDO                 wxART_MAKE_ART_ID(wxART_UNDO)
100#define wxART_REDO                 wxART_MAKE_ART_ID(wxART_REDO)
101
102#define wxART_QUIT                 wxART_MAKE_ART_ID(wxART_QUIT)
103
104#define wxART_FIND                 wxART_MAKE_ART_ID(wxART_FIND)
105#define wxART_FIND_AND_REPLACE     wxART_MAKE_ART_ID(wxART_FIND_AND_REPLACE)
106
107
108// ----------------------------------------------------------------------------
109// wxArtProvider class
110// ----------------------------------------------------------------------------
111
112class WXDLLEXPORT wxArtProvider : public wxObject
113{
114public:
115    // Dtor removes the provider from providers stack if it's still on it
116    virtual ~wxArtProvider();
117
118
119    // Add new provider to the top of providers stack (i.e. the provider will
120    // be queried first of all).
121    static void Push(wxArtProvider *provider);
122
123    // Add new provider to the bottom of providers stack (i.e. the provider
124    // will be queried as the last one).
125#if wxABI_VERSION >= 20810
126    static void PushBack(wxArtProvider *provider);
127#endif
128    // same as PushBack()
129    static void Insert(wxArtProvider *provider);
130
131    // Remove latest added provider and delete it.
132    static bool Pop();
133
134    // Remove provider from providers stack but don't delete it.
135    static bool Remove(wxArtProvider *provider);
136
137    // Delete the given provider and remove it from the providers stack.
138    static bool Delete(wxArtProvider *provider);
139
140
141    // Query the providers for bitmap with given ID and return it. Return
142    // wxNullBitmap if no provider provides it.
143    static wxBitmap GetBitmap(const wxArtID& id,
144                              const wxArtClient& client = wxART_OTHER,
145                              const wxSize& size = wxDefaultSize);
146
147    // Query the providers for icon with given ID and return it. Return
148    // wxNullIcon if no provider provides it.
149    static wxIcon GetIcon(const wxArtID& id,
150                          const wxArtClient& client = wxART_OTHER,
151                          const wxSize& size = wxDefaultSize);
152
153    // Get the size hint of an icon from a specific wxArtClient, queries
154    // the topmost provider if platform_dependent = false
155    static wxSize GetSizeHint(const wxArtClient& client, bool platform_dependent = false);
156
157#if WXWIN_COMPATIBILITY_2_6
158    // use the corresponding methods without redundant "Provider" suffix
159    wxDEPRECATED( static void PushProvider(wxArtProvider *provider) );
160    wxDEPRECATED( static void InsertProvider(wxArtProvider *provider) );
161    wxDEPRECATED( static bool PopProvider() );
162
163    // use Delete() if this is what you really need, or just delete the
164    // provider pointer, do not use Remove() as it does not delete the pointer
165    // unlike RemoveProvider() which does
166    wxDEPRECATED( static bool RemoveProvider(wxArtProvider *provider) );
167#endif // WXWIN_COMPATIBILITY_2_6
168
169protected:
170    friend class wxArtProviderModule;
171    // Initializes default provider
172    static void InitStdProvider();
173    // Initializes platform's native provider, if available (e.g. GTK2)
174    static void InitNativeProvider();
175    // Destroy caches & all providers
176    static void CleanUpProviders();
177
178    // Get the default size of an icon for a specific client
179    virtual wxSize DoGetSizeHint(const wxArtClient& client)
180    {
181        return GetSizeHint(client, true);
182    }
183
184    // Derived classes must override this method to create requested
185    // art resource. This method is called only once per instance's
186    // lifetime for each requested wxArtID.
187    virtual wxBitmap CreateBitmap(const wxArtID& WXUNUSED(id),
188                                  const wxArtClient& WXUNUSED(client),
189                                  const wxSize& WXUNUSED(size)) = 0;
190
191private:
192    static void CommonAddingProvider();
193
194private:
195    // list of providers:
196    static wxArtProvidersList *sm_providers;
197    // art resources cache (so that CreateXXX is not called that often):
198    static wxArtProviderCache *sm_cache;
199
200    DECLARE_ABSTRACT_CLASS(wxArtProvider)
201};
202
203
204#endif // _WX_ARTPROV_H_
205