///////////////////////////////////////////////////////////////////////////////
-// Name: univ/theme.cpp
+// Name: src/univ/theme.cpp
// Purpose: implementation of wxTheme
// Author: Vadim Zeitlin
// Modified by:
// Created: 06.08.00
-// RCS-ID: $Id$
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// headers
// ---------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "theme.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
// implementation
// ============================================================================
-wxThemeInfo *wxTheme::ms_allThemes = (wxThemeInfo *)NULL;
-wxTheme *wxTheme::ms_theme = (wxTheme *)NULL;
+wxThemeInfo *wxTheme::ms_allThemes = NULL;
+wxTheme *wxTheme::ms_theme = NULL;
// ----------------------------------------------------------------------------
// "dynamic" theme creation
// ----------------------------------------------------------------------------
wxThemeInfo::wxThemeInfo(Constructor c,
- const wxChar *n,
- const wxChar *d)
+ const wxString& n,
+ const wxString& d)
: name(n), desc(d), ctor(c)
{
// insert us (in the head of) the linked list
info = info->next;
}
- return (wxTheme *)NULL;
+ return NULL;
}
// ----------------------------------------------------------------------------
if ( ms_theme )
{
// we already have a theme
- return TRUE;
+ return true;
}
wxString nameDefTheme;
// use the environment variable first
- const wxChar *p = wxGetenv(_T("WXTHEME"));
+ const wxChar *p = wxGetenv(wxT("WXTHEME"));
if ( p )
{
nameDefTheme = p;
}
+#ifdef wxUNIV_DEFAULT_THEME
else // use native theme by default
{
- #if defined(__WXGTK__)
- nameDefTheme = _T("gtk");
- #elif defined(__WXX11__)
- nameDefTheme = _T("win32");
- #else
- nameDefTheme = _T("win32");
- #endif
+ nameDefTheme = wxSTRINGIZE_T(wxUNIV_DEFAULT_THEME);
}
+#endif // wxUNIV_DEFAULT_THEME
wxTheme *theme = Create(nameDefTheme);
{
wxLogError(_("Failed to initialize GUI: no built-in themes found."));
- return FALSE;
+ return false;
}
// Set the theme as current.
wxTheme::Set(theme);
- return TRUE;
+ return true;
}
/* static */ wxTheme *wxTheme::Set(wxTheme *theme)
// has one
wxArtProvider *art = ms_theme->GetArtProvider();
if ( art )
- wxArtProvider::PushProvider(art);
+ wxArtProvider::Push(art);
}
return themeOld;
{
}
+
+// ----------------------------------------------------------------------------
+// wxDelegateTheme
+// ----------------------------------------------------------------------------
+
+wxDelegateTheme::wxDelegateTheme(const wxString& theme)
+{
+ m_themeName = theme;
+ m_theme = NULL;
+}
+
+wxDelegateTheme::~wxDelegateTheme()
+{
+ delete m_theme;
+}
+
+bool wxDelegateTheme::GetOrCreateTheme()
+{
+ if ( !m_theme )
+ m_theme = wxTheme::Create(m_themeName);
+ return m_theme != NULL;
+}
+
+wxRenderer *wxDelegateTheme::GetRenderer()
+{
+ if ( !GetOrCreateTheme() )
+ return NULL;
+
+ return m_theme->GetRenderer();
+}
+
+wxArtProvider *wxDelegateTheme::GetArtProvider()
+{
+ if ( !GetOrCreateTheme() )
+ return NULL;
+
+ return m_theme->GetArtProvider();
+}
+
+wxInputHandler *wxDelegateTheme::GetInputHandler(const wxString& control,
+ wxInputConsumer *consumer)
+{
+ if ( !GetOrCreateTheme() )
+ return NULL;
+
+ return m_theme->GetInputHandler(control, consumer);
+}
+
+wxColourScheme *wxDelegateTheme::GetColourScheme()
+{
+ if ( !GetOrCreateTheme() )
+ return NULL;
+
+ return m_theme->GetColourScheme();
+}