#ifndef _WX_UNIV_THEME_H_
#define _WX_UNIV_THEME_H_
+#include "wx/string.h"
+
// ----------------------------------------------------------------------------
// wxTheme
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxArtProvider;
-class WXDLLEXPORT wxColourScheme;
-class WXDLLEXPORT wxInputConsumer;
-class WXDLLEXPORT wxInputHandler;
-class WXDLLEXPORT wxRenderer;
-struct WXDLLEXPORT wxThemeInfo;
+class WXDLLIMPEXP_FWD_CORE wxArtProvider;
+class WXDLLIMPEXP_FWD_CORE wxColourScheme;
+class WXDLLIMPEXP_FWD_CORE wxInputConsumer;
+class WXDLLIMPEXP_FWD_CORE wxInputHandler;
+class WXDLLIMPEXP_FWD_CORE wxRenderer;
+struct WXDLLIMPEXP_FWD_CORE wxThemeInfo;
-class WXDLLEXPORT wxTheme
+class WXDLLIMPEXP_CORE wxTheme
{
public:
// static methods
// the current theme
static wxTheme *ms_theme;
- friend struct WXDLLEXPORT wxThemeInfo;
+ friend struct wxThemeInfo;
+};
+
+// ----------------------------------------------------------------------------
+// wxDelegateTheme: it is impossible to inherit from any of standard
+// themes as their declarations are in private code, but you can use this
+// class to override only some of their functions - all the other ones
+// will be left to the original theme
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxDelegateTheme : public wxTheme
+{
+public:
+ wxDelegateTheme(const wxString& theme);
+ virtual ~wxDelegateTheme();
+
+ virtual wxRenderer *GetRenderer();
+ virtual wxArtProvider *GetArtProvider();
+ virtual wxInputHandler *GetInputHandler(const wxString& control,
+ wxInputConsumer *consumer);
+ virtual wxColourScheme *GetColourScheme();
+
+protected:
+ // gets or creates theme and sets m_theme to point to it,
+ // returns true on success
+ bool GetOrCreateTheme();
+
+ wxString m_themeName;
+ wxTheme *m_theme;
};
// ----------------------------------------------------------------------------
// dynamic theme creation helpers
// ----------------------------------------------------------------------------
-struct WXDLLEXPORT wxThemeInfo
+struct WXDLLIMPEXP_CORE wxThemeInfo
{
typedef wxTheme *(*Constructor)();
wxThemeInfo *next;
// constructor for the struct itself
- wxThemeInfo(Constructor ctor, const wxChar *name, const wxChar *desc);
+ wxThemeInfo(Constructor ctor, const wxString& name, const wxString& desc);
};
// ----------------------------------------------------------------------------
WX_USE_THEME_IMPL(themename)
#define WX_USE_THEME_IMPL(themename) \
- extern WXDLLEXPORT_DATA(bool) wxThemeUse##themename; \
+ extern WXDLLIMPEXP_DATA_CORE(bool) wxThemeUse##themename; \
static struct wxThemeUserFor##themename \
{ \
wxThemeUserFor##themename() { wxThemeUse##themename = true; } \
// and this one must be inserted in the source file
#define WX_IMPLEMENT_THEME(classname, themename, themedesc) \
- WXDLLEXPORT_DATA(bool) wxThemeUse##themename = true; \
+ WXDLLIMPEXP_DATA_CORE(bool) wxThemeUse##themename = true; \
wxTheme *wxCtorFor##themename() { return new classname; } \
wxThemeInfo classname::ms_info##themename(wxCtorFor##themename, \
wxT( #themename ), themedesc)