| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/univ/theme.h
 
- // Purpose:     wxTheme class manages all configurable aspects of the
 
- //              application including the look (wxRenderer), feel
 
- //              (wxInputHandler) and the colours (wxColourScheme)
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     06.08.00
 
- // Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_UNIV_THEME_H_
 
- #define _WX_UNIV_THEME_H_
 
- #include "wx/string.h"
 
- // ----------------------------------------------------------------------------
 
- // wxTheme
 
- // ----------------------------------------------------------------------------
 
- 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 WXDLLIMPEXP_CORE wxTheme
 
- {
 
- public:
 
-     // static methods
 
-     // --------------
 
-     // create the default theme
 
-     static bool CreateDefault();
 
-     // create the theme by name (will return NULL if not found)
 
-     static wxTheme *Create(const wxString& name);
 
-     // change the current scheme
 
-     static wxTheme *Set(wxTheme *theme);
 
-     // get the current theme (never NULL)
 
-     static wxTheme *Get() { return ms_theme; }
 
-     // the theme methods
 
-     // -----------------
 
-     // get the renderer implementing all the control-drawing operations in
 
-     // this theme
 
-     virtual wxRenderer *GetRenderer() = 0;
 
-     // get the art provider to be used together with this theme
 
-     virtual wxArtProvider *GetArtProvider() = 0;
 
-     // get the input handler of the given type, forward to the standard one
 
-     virtual wxInputHandler *GetInputHandler(const wxString& handlerType,
 
-                                             wxInputConsumer *consumer) = 0;
 
-     // get the colour scheme for the control with this name
 
-     virtual wxColourScheme *GetColourScheme() = 0;
 
-     // implementation only from now on
 
-     // -------------------------------
 
-     virtual ~wxTheme();
 
- private:
 
-     // the list of descriptions of all known themes
 
-     static wxThemeInfo *ms_allThemes;
 
-     // the current theme
 
-     static wxTheme *ms_theme;
 
-     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 WXDLLIMPEXP_CORE wxThemeInfo
 
- {
 
-     typedef wxTheme *(*Constructor)();
 
-     // theme name and (user readable) description
 
-     wxString name, desc;
 
-     // the function to create a theme object
 
-     Constructor ctor;
 
-     // next node in the linked list or NULL
 
-     wxThemeInfo *next;
 
-     // constructor for the struct itself
 
-     wxThemeInfo(Constructor ctor, const wxString& name, const wxString& desc);
 
- };
 
- // ----------------------------------------------------------------------------
 
- // macros
 
- // ----------------------------------------------------------------------------
 
- // to use a standard theme insert this macro into one of the application files:
 
- // 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 WXDLLIMPEXP_DATA_CORE(bool) wxThemeUse##themename;                    \
 
-     static struct wxThemeUserFor##themename                                 \
 
-     {                                                                       \
 
-         wxThemeUserFor##themename() { wxThemeUse##themename = true; }       \
 
-     } wxThemeDoUse##themename
 
- // to declare a new theme, this macro must be used in the class declaration
 
- #define WX_DECLARE_THEME(themename)                                         \
 
-     private:                                                                \
 
-         static wxThemeInfo ms_info##themename;                              \
 
-     public:                                                                 \
 
-         const wxThemeInfo *GetThemeInfo() const                             \
 
-             { return &ms_info##themename; }
 
- // and this one must be inserted in the source file
 
- #define WX_IMPLEMENT_THEME(classname, themename, themedesc)                 \
 
-     WXDLLIMPEXP_DATA_CORE(bool) wxThemeUse##themename = true;                    \
 
-     wxTheme *wxCtorFor##themename() { return new classname; }               \
 
-     wxThemeInfo classname::ms_info##themename(wxCtorFor##themename,         \
 
-                                               wxT( #themename ), themedesc)
 
- // ----------------------------------------------------------------------------
 
- // 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_
 
 
  |