#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
{
// 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 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;
};
// ----------------------------------------------------------------------------
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);
};
// ----------------------------------------------------------------------------
// without it, an over optimizing linker may discard the object module
// containing the theme implementation entirely
#define WX_USE_THEME(themename) \
+ /* this indirection makes it possible to pass macro as the argument */ \
+ WX_USE_THEME_IMPL(themename)
+
+#define WX_USE_THEME_IMPL(themename) \
extern WXDLLEXPORT_DATA(bool) wxThemeUse##themename; \
static struct wxThemeUserFor##themename \
{ \
wxThemeInfo classname::ms_info##themename(wxCtorFor##themename, \
wxT( #themename ), themedesc)
-#endif // _WX_UNIV_THEME_H_
+// ----------------------------------------------------------------------------
+// determine default theme
+// ----------------------------------------------------------------------------
+
+#if wxUSE_ALL_THEMES
+ #undef wxUSE_THEME_WIN32
+ #define wxUSE_THEME_WIN32 1
+ #undef wxUSE_THEME_GTK
+ #define wxUSE_THEME_GTK 1
+ #undef wxUSE_THEME_MONO
+ #define wxUSE_THEME_MONO 1
+ #undef wxUSE_THEME_METAL
+ #define wxUSE_THEME_METAL 1
+#endif // wxUSE_ALL_THEMES
+
+// determine the default theme to use:
+#if defined(__WXGTK__) && wxUSE_THEME_GTK
+ #define wxUNIV_DEFAULT_THEME gtk
+#elif defined(__WXDFB__) && wxUSE_THEME_MONO
+ // use mono theme for DirectFB port because it cannot correctly
+ // render neither win32 nor gtk themes yet:
+ #define wxUNIV_DEFAULT_THEME mono
+#endif
+
+// if no theme was picked, get any theme compiled in (sorted by
+// quality/completeness of the theme):
+#ifndef wxUNIV_DEFAULT_THEME
+ #if wxUSE_THEME_WIN32
+ #define wxUNIV_DEFAULT_THEME win32
+ #elif wxUSE_THEME_GTK
+ #define wxUNIV_DEFAULT_THEME gtk
+ #elif wxUSE_THEME_MONO
+ #define wxUNIV_DEFAULT_THEME mono
+ #endif
+ // If nothing matches, no themes are compiled and the app must provide
+ // some theme itself
+ // (note that wxUSE_THEME_METAL depends on win32 theme, so we don't have to
+ // try it)
+ //
+#endif // !wxUNIV_DEFAULT_THEME
+#endif // _WX_UNIV_THEME_H_