]> git.saurik.com Git - wxWidgets.git/blame - include/wx/univ/theme.h
Further wxUniv fixes
[wxWidgets.git] / include / wx / univ / theme.h
CommitLineData
1e6feb95
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: wx/univ/theme.h
3// Purpose: wxTheme class manages all configurable aspects of the
4// application including the look (wxRenderer), feel
5// (wxInputHandler) and the colours (wxColourScheme)
6// Author: Vadim Zeitlin
7// Modified by:
8// Created: 06.08.00
9// RCS-ID: $Id$
10// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
11// Licence: wxWindows license
12///////////////////////////////////////////////////////////////////////////////
13
14#ifndef _WX_UNIV_THEME_H_
15#define _WX_UNIV_THEME_H_
16
17#ifdef __GNUG__
18 #pragma interface "theme.h"
19#endif
20
21// ----------------------------------------------------------------------------
22// wxTheme
23// ----------------------------------------------------------------------------
24
25class WXDLLEXPORT wxRenderer;
26class WXDLLEXPORT wxColourScheme;
27class WXDLLEXPORT wxInputHandler;
28struct WXDLLEXPORT wxThemeInfo;
29
30class WXDLLEXPORT wxTheme
31{
32public:
33 // static methods
34 // --------------
35
36 // create the default theme
37 static bool CreateDefault();
38
39 // create the theme by name (will return NULL if not found)
40 static wxTheme *Create(const wxString& name);
41
42 // change the current scheme
43 static wxTheme *Set(wxTheme *theme);
44
45 // get the current theme (never NULL)
46 static wxTheme *Get() { return ms_theme; }
47
48 // the theme methods
49 // -----------------
50
51 // get the renderer implementing all the control-drawing operations in
52 // this theme
53 virtual wxRenderer *GetRenderer() = 0;
54
55 // get the input handler of the given type
56 virtual wxInputHandler *GetInputHandler(const wxString& handlerType) = 0;
57
58 // get the colour scheme for the control with this name
59 virtual wxColourScheme *GetColourScheme() = 0;
60
61 // implementation only from now on
62 // -------------------------------
63
64 virtual ~wxTheme();
65
66private:
67 // the list of descriptions of all known themes
68 static wxThemeInfo *ms_allThemes;
69
70 // the current theme
71 static wxTheme *ms_theme;
72
73 friend wxThemeInfo;
74};
75
76// ----------------------------------------------------------------------------
77// dynamic theme creation helpers
78// ----------------------------------------------------------------------------
79
80struct WXDLLEXPORT wxThemeInfo
81{
82 typedef wxTheme *(*Constructor)();
83
84 // theme name and (user readable) description
85 wxString name, desc;
86
87 // the function to create a theme object
88 Constructor ctor;
89
90 // next node in the linked list or NULL
91 wxThemeInfo *next;
92
93 // constructor for the struct itself
94 wxThemeInfo(Constructor ctor, const wxChar *name, const wxChar *desc);
95};
96
97// ----------------------------------------------------------------------------
98// macros
99// ----------------------------------------------------------------------------
100
101// to use a standard theme insert this macro into one of the application files:
102// without it, an over optimizing linker may discard the object module
103// containing the theme implementation entirely
104#define WX_USE_THEME(themename) \
105 extern bool wxThemeUse##themename; \
106 static struct wxThemeUserFor##themename \
107 { \
108 wxThemeUserFor##themename() { wxThemeUse##themename = TRUE; } \
109 } wxThemeDoUse##themename
110
111// to declare a new theme, this macro must be used in the class declaration
112#define WX_DECLARE_THEME(themename) \
113 private: \
114 static wxThemeInfo ms_info##themename; \
115 public: \
116 const wxThemeInfo *GetThemeInfo() const \
117 { return &ms_info##themename; }
118
119// and this one must be inserted in the source file
120#define WX_IMPLEMENT_THEME(classname, themename, themedesc) \
121 bool wxThemeUse##themename = TRUE; \
122 wxTheme *wxCtorFor##themename() { return new classname; } \
123 wxThemeInfo classname::ms_info##themename(wxCtorFor##themename, \
124 #themename, themedesc)
125
126#endif // _WX_UNIV_THEME_H_
127