]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/univ/theme.h
Don't create multiple parent-less top level frames in layout sample.
[wxWidgets.git] / include / wx / univ / theme.h
index a5712c0c85786f00cb09c794d2f5ded2be94cf45..4694f37960db5d47287eb903233d9d8a40b34109 100644 (file)
 #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
@@ -71,14 +73,42 @@ private:
 
     // 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)();
 
@@ -92,7 +122,7 @@ struct WXDLLEXPORT wxThemeInfo
     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);
 };
 
 // ----------------------------------------------------------------------------
@@ -107,7 +137,7 @@ struct WXDLLEXPORT wxThemeInfo
     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; }       \
@@ -123,7 +153,7 @@ struct WXDLLEXPORT wxThemeInfo
 
 // 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)