The pre-3.1.4 definitions of the constants were just string literals, while the type were wxString typedefs. To avoid implicit conversion these were converted to actual wxStrings. While the interface now matched the implementation, this has several drawbacks: - every use of the "constant" now is a string construction at runtime - the constant now is an rvalue, i.e. it is impossible to take its address. The latter breaks its use from wxPython. The IDs are moved to a separate file which can be included multiple times, once from the header to have the declarations in place, and once to instantiate the wxStrings. Using a common file avoids the declaration and definition going out of sync.
180 lines
6.4 KiB
C++
180 lines
6.4 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/artprov.h
|
|
// Purpose: wxArtProvider class
|
|
// Author: Vaclav Slavik
|
|
// Modified by:
|
|
// Created: 18/03/2002
|
|
// Copyright: (c) Vaclav Slavik
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_ARTPROV_H_
|
|
#define _WX_ARTPROV_H_
|
|
|
|
#include "wx/string.h"
|
|
#include "wx/bitmap.h"
|
|
#include "wx/icon.h"
|
|
#include "wx/iconbndl.h"
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxArtProvidersList;
|
|
class WXDLLIMPEXP_FWD_CORE wxArtProviderCache;
|
|
class wxArtProviderModule;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Types
|
|
// ----------------------------------------------------------------------------
|
|
|
|
typedef wxString wxArtClient;
|
|
typedef wxString wxArtID;
|
|
|
|
#define wxART_MAKE_CLIENT_ID_FROM_STR(id) ((id) + wxASCII_STR("_C"))
|
|
#define wxART_MAKE_ART_ID_FROM_STR(id) (id)
|
|
|
|
#define wxART_MAKE_CLIENT_ID(id) \
|
|
extern WXDLLIMPEXP_DATA_CORE(const wxArtClient) id;
|
|
#define wxART_MAKE_ART_ID(id) \
|
|
extern WXDLLIMPEXP_DATA_CORE(const wxArtID) id;
|
|
|
|
#include "wx/artids.h"
|
|
#undef wxART_MAKE_ART_ID
|
|
#undef wxART_MAKE_CLIENT_ID
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxArtProvider class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxArtProvider : public wxObject
|
|
{
|
|
public:
|
|
// Dtor removes the provider from providers stack if it's still on it
|
|
virtual ~wxArtProvider();
|
|
|
|
// Does this platform implement native icons theme?
|
|
static bool HasNativeProvider();
|
|
|
|
// Add new provider to the top of providers stack (i.e. the provider will
|
|
// be queried first of all).
|
|
static void Push(wxArtProvider *provider);
|
|
|
|
// Add new provider to the bottom of providers stack (i.e. the provider
|
|
// will be queried as the last one).
|
|
static void PushBack(wxArtProvider *provider);
|
|
|
|
#if WXWIN_COMPATIBILITY_2_8
|
|
// use PushBack(), it's the same thing
|
|
static wxDEPRECATED( void Insert(wxArtProvider *provider) );
|
|
#endif
|
|
|
|
// Remove latest added provider and delete it.
|
|
static bool Pop();
|
|
|
|
// Remove provider from providers stack but don't delete it.
|
|
static bool Remove(wxArtProvider *provider);
|
|
|
|
// Delete the given provider and remove it from the providers stack.
|
|
static bool Delete(wxArtProvider *provider);
|
|
|
|
|
|
// Query the providers for bitmap with given ID and return it. Return
|
|
// wxNullBitmap if no provider provides it.
|
|
static wxBitmap GetBitmap(const wxArtID& id,
|
|
const wxArtClient& client = wxART_OTHER,
|
|
const wxSize& size = wxDefaultSize);
|
|
|
|
// Query the providers for icon with given ID and return it. Return
|
|
// wxNullIcon if no provider provides it.
|
|
static wxIcon GetIcon(const wxArtID& id,
|
|
const wxArtClient& client = wxART_OTHER,
|
|
const wxSize& size = wxDefaultSize);
|
|
|
|
// 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)
|
|
{
|
|
return GetIcon(GetMessageBoxIconId(flags), wxART_MESSAGE_BOX);
|
|
}
|
|
|
|
// Query the providers for iconbundle with given ID and return it. Return
|
|
// wxNullIconBundle if no provider provides it.
|
|
static wxIconBundle GetIconBundle(const wxArtID& id,
|
|
const wxArtClient& client = wxART_OTHER);
|
|
|
|
// Gets native size for given 'client' or wxDefaultSize if it doesn't
|
|
// have native equivalent
|
|
static wxSize GetNativeSizeHint(const wxArtClient& client);
|
|
|
|
// Get the size hint of an icon from a specific wxArtClient, queries
|
|
// the topmost provider if platform_dependent = false
|
|
static wxSize GetSizeHint(const wxArtClient& client, bool platform_dependent = false);
|
|
|
|
// Rescale bitmap (used internally if requested size is other than the available).
|
|
static void RescaleBitmap(wxBitmap& bmp, const wxSize& sizeNeeded);
|
|
|
|
protected:
|
|
friend class wxArtProviderModule;
|
|
#if wxUSE_ARTPROVIDER_STD
|
|
// Initializes default provider
|
|
static void InitStdProvider();
|
|
#endif // wxUSE_ARTPROVIDER_STD
|
|
// Initializes Tango-based icon provider
|
|
#if wxUSE_ARTPROVIDER_TANGO
|
|
static void InitTangoProvider();
|
|
#endif // wxUSE_ARTPROVIDER_TANGO
|
|
// Initializes platform's native provider, if available (e.g. GTK2)
|
|
static void InitNativeProvider();
|
|
// Destroy caches & all providers
|
|
static void CleanUpProviders();
|
|
|
|
// Get the default size of an icon for a specific client
|
|
virtual wxSize DoGetSizeHint(const wxArtClient& client)
|
|
{
|
|
return GetSizeHint(client, true);
|
|
}
|
|
|
|
// Derived classes must override CreateBitmap or CreateIconBundle
|
|
// (or both) to create requested art resource. This method is called
|
|
// only once per instance's lifetime for each requested wxArtID.
|
|
virtual wxBitmap CreateBitmap(const wxArtID& WXUNUSED(id),
|
|
const wxArtClient& WXUNUSED(client),
|
|
const wxSize& WXUNUSED(size))
|
|
{
|
|
return wxNullBitmap;
|
|
}
|
|
|
|
virtual wxIconBundle CreateIconBundle(const wxArtID& WXUNUSED(id),
|
|
const wxArtClient& WXUNUSED(client))
|
|
{
|
|
return wxNullIconBundle;
|
|
}
|
|
|
|
private:
|
|
static void CommonAddingProvider();
|
|
static wxIconBundle DoGetIconBundle(const wxArtID& id,
|
|
const wxArtClient& client);
|
|
|
|
private:
|
|
// list of providers:
|
|
static wxArtProvidersList *sm_providers;
|
|
// art resources cache (so that CreateXXX is not called that often):
|
|
static wxArtProviderCache *sm_cache;
|
|
|
|
wxDECLARE_ABSTRACT_CLASS(wxArtProvider);
|
|
};
|
|
|
|
|
|
#if !defined(__WXUNIVERSAL__) && \
|
|
((defined(__WXGTK__) && defined(__WXGTK20__)) || defined(__WXMSW__) || \
|
|
defined(__WXMAC__))
|
|
// *some* (partial) native implementation of wxArtProvider exists; this is
|
|
// not the same as wxArtProvider::HasNativeProvider()!
|
|
#define wxHAS_NATIVE_ART_PROVIDER_IMPL
|
|
#endif
|
|
|
|
#endif // _WX_ARTPROV_H_
|