]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/univ/theme.cpp
Tries to fix wxListBox focus problems.
[wxWidgets.git] / src / univ / theme.cpp
... / ...
CommitLineData
1///////////////////////////////////////////////////////////////////////////////
2// Name: univ/theme.cpp
3// Purpose: implementation of wxTheme
4// Author: Vadim Zeitlin
5// Modified by:
6// Created: 06.08.00
7// RCS-ID: $Id$
8// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
9// Licence: wxWindows license
10///////////////////////////////////////////////////////////////////////////////
11
12// ===========================================================================
13// declarations
14// ===========================================================================
15
16// ---------------------------------------------------------------------------
17// headers
18// ---------------------------------------------------------------------------
19
20#ifdef __GNUG__
21 #pragma implementation "theme.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#ifndef WX_PRECOMP
32 #include "wx/intl.h"
33 #include "wx/log.h"
34#endif // WX_PRECOMP
35
36#include "wx/univ/renderer.h"
37#include "wx/univ/inphand.h"
38#include "wx/univ/theme.h"
39
40// ============================================================================
41// implementation
42// ============================================================================
43
44wxThemeInfo *wxTheme::ms_allThemes = (wxThemeInfo *)NULL;
45wxTheme *wxTheme::ms_theme = (wxTheme *)NULL;
46
47// ----------------------------------------------------------------------------
48// "dynamic" theme creation
49// ----------------------------------------------------------------------------
50
51wxThemeInfo::wxThemeInfo(Constructor c,
52 const wxChar *n,
53 const wxChar *d)
54 : name(n), desc(d), ctor(c)
55{
56 // insert us (in the head of) the linked list
57 next = wxTheme::ms_allThemes;
58 wxTheme::ms_allThemes = this;
59}
60
61/* static */ wxTheme *wxTheme::Create(const wxString& name)
62{
63 // find the theme in the list by name
64 wxThemeInfo *info = ms_allThemes;
65 while ( info )
66 {
67 if ( name == info->name )
68 {
69 return info->ctor();
70 }
71
72 info = info->next;
73 }
74
75 return (wxTheme *)NULL;
76}
77
78// ----------------------------------------------------------------------------
79// the default theme (called by wxApp::OnInitGui)
80// ----------------------------------------------------------------------------
81
82/* static */ bool wxTheme::CreateDefault()
83{
84 if ( ms_theme )
85 {
86 // we already have a theme
87 return TRUE;
88 }
89
90 wxString nameDefTheme;
91
92 // use the environment variable first
93 const wxChar *p = wxGetenv(_T("WXTHEME"));
94 if ( p )
95 {
96 nameDefTheme = p;
97 }
98 else // use native theme by default
99 {
100 #if defined(__WXMSW__)
101 nameDefTheme = _T("win32");
102 #elif defined(__WXGTK__)
103 nameDefTheme = _T("gtk");
104 #elif defined(__WXMGL__)
105 nameDefTheme = _T("win32");
106 #elif defined(__WXPM__)
107 nameDefTheme = _T("win32");
108 #endif
109 }
110
111 ms_theme = Create(nameDefTheme);
112
113 // fallback to the first one in the list
114 if ( !ms_theme && ms_allThemes )
115 {
116 ms_theme = ms_allThemes->ctor();
117 }
118
119 // abort if still nothing
120 if ( !ms_theme )
121 {
122 wxLogError(_("Failed to initialize GUI: no built-in themes found."));
123
124 return FALSE;
125 }
126
127 return TRUE;
128}
129
130/* static */ wxTheme *wxTheme::Set(wxTheme *theme)
131{
132 wxTheme *themeOld = ms_theme;
133 ms_theme = theme;
134 return themeOld;
135}
136
137// ----------------------------------------------------------------------------
138// assorted trivial dtors
139// ----------------------------------------------------------------------------
140
141wxTheme::~wxTheme()
142{
143}
144