]> git.saurik.com Git - wxWidgets.git/blame - include/wx/univ/theme.h
Fix memory leak by letting the base class version handle the
[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$
442b35b5 10// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
77ffb593 11// Licence: wxWidgets licence
1e6feb95
VZ
12///////////////////////////////////////////////////////////////////////////////
13
14#ifndef _WX_UNIV_THEME_H_
15#define _WX_UNIV_THEME_H_
16
12028905 17#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
1e6feb95
VZ
18 #pragma interface "theme.h"
19#endif
20
21// ----------------------------------------------------------------------------
22// wxTheme
23// ----------------------------------------------------------------------------
24
25class WXDLLEXPORT wxRenderer;
26class WXDLLEXPORT wxColourScheme;
27class WXDLLEXPORT wxInputHandler;
536b70ac 28class WXDLLEXPORT wxArtProvider;
1e6feb95
VZ
29struct WXDLLEXPORT wxThemeInfo;
30
31class WXDLLEXPORT wxTheme
32{
33public:
34 // static methods
35 // --------------
36
37 // create the default theme
38 static bool CreateDefault();
39
40 // create the theme by name (will return NULL if not found)
41 static wxTheme *Create(const wxString& name);
42
43 // change the current scheme
44 static wxTheme *Set(wxTheme *theme);
45
46 // get the current theme (never NULL)
47 static wxTheme *Get() { return ms_theme; }
48
49 // the theme methods
50 // -----------------
51
52 // get the renderer implementing all the control-drawing operations in
53 // this theme
54 virtual wxRenderer *GetRenderer() = 0;
536b70ac
VS
55
56 // get the art provider to be used together with this theme
57 virtual wxArtProvider *GetArtProvider() = 0;
1e6feb95
VZ
58
59 // get the input handler of the given type
60 virtual wxInputHandler *GetInputHandler(const wxString& handlerType) = 0;
61
62 // get the colour scheme for the control with this name
63 virtual wxColourScheme *GetColourScheme() = 0;
64
65 // implementation only from now on
66 // -------------------------------
67
68 virtual ~wxTheme();
69
70private:
71 // the list of descriptions of all known themes
72 static wxThemeInfo *ms_allThemes;
73
74 // the current theme
75 static wxTheme *ms_theme;
3ad252c9 76 friend struct WXDLLEXPORT wxThemeInfo;
1e6feb95
VZ
77};
78
79// ----------------------------------------------------------------------------
80// dynamic theme creation helpers
81// ----------------------------------------------------------------------------
82
83struct WXDLLEXPORT wxThemeInfo
84{
85 typedef wxTheme *(*Constructor)();
86
87 // theme name and (user readable) description
88 wxString name, desc;
89
90 // the function to create a theme object
91 Constructor ctor;
92
93 // next node in the linked list or NULL
94 wxThemeInfo *next;
95
96 // constructor for the struct itself
97 wxThemeInfo(Constructor ctor, const wxChar *name, const wxChar *desc);
98};
99
100// ----------------------------------------------------------------------------
101// macros
102// ----------------------------------------------------------------------------
103
104// to use a standard theme insert this macro into one of the application files:
105// without it, an over optimizing linker may discard the object module
106// containing the theme implementation entirely
107#define WX_USE_THEME(themename) \
603fd221 108 WXDLLEXPORT_DATA(extern bool) wxThemeUse##themename; \
1e6feb95
VZ
109 static struct wxThemeUserFor##themename \
110 { \
111 wxThemeUserFor##themename() { wxThemeUse##themename = TRUE; } \
112 } wxThemeDoUse##themename
113
114// to declare a new theme, this macro must be used in the class declaration
115#define WX_DECLARE_THEME(themename) \
116 private: \
117 static wxThemeInfo ms_info##themename; \
118 public: \
119 const wxThemeInfo *GetThemeInfo() const \
120 { return &ms_info##themename; }
121
122// and this one must be inserted in the source file
123#define WX_IMPLEMENT_THEME(classname, themename, themedesc) \
603fd221 124 WXDLLEXPORT_DATA(bool) wxThemeUse##themename = TRUE; \
1e6feb95
VZ
125 wxTheme *wxCtorFor##themename() { return new classname; } \
126 wxThemeInfo classname::ms_info##themename(wxCtorFor##themename, \
f63e248e 127 wxT( #themename ), themedesc)
1e6feb95
VZ
128
129#endif // _WX_UNIV_THEME_H_
130