2015-09-17 08:46:27 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: wx/systhemectrl.h
|
|
|
|
// Purpose: Class to make controls appear in the systems theme
|
|
|
|
// Author: Tobias Taschner
|
|
|
|
// Created: 2014-08-14
|
|
|
|
// Copyright: (c) 2014 wxWidgets development team
|
|
|
|
// Licence: wxWindows licence
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef _WX_SYSTHEMECTRL_H
|
|
|
|
#define _WX_SYSTHEMECTRL_H
|
|
|
|
|
|
|
|
#include "wx/defs.h"
|
|
|
|
|
2018-12-08 14:17:57 -05:00
|
|
|
#if defined(__WXMSW__) && wxUSE_UXTHEME && !defined(__WXUNIVERSAL__)
|
2018-08-05 08:46:50 -04:00
|
|
|
#define wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
#endif
|
|
|
|
|
2015-09-17 08:46:27 -04:00
|
|
|
class WXDLLIMPEXP_FWD_CORE wxWindow;
|
|
|
|
|
|
|
|
class WXDLLIMPEXP_CORE wxSystemThemedControlBase
|
|
|
|
{
|
|
|
|
public:
|
2019-05-26 17:17:47 -04:00
|
|
|
wxSystemThemedControlBase()
|
|
|
|
{
|
|
|
|
#ifdef wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
m_systemThemeDisabled = false;
|
|
|
|
#endif // wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
}
|
|
|
|
|
|
|
|
bool IsSystemThemeDisabled() const
|
|
|
|
{
|
|
|
|
#ifdef wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
return m_systemThemeDisabled;
|
|
|
|
#else // !wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
return false;
|
|
|
|
#endif // wxHAS_SYSTEM_THEMED_CONTROL/!wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
}
|
2015-09-17 08:46:27 -04:00
|
|
|
|
|
|
|
virtual ~wxSystemThemedControlBase() { }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
// This method is virtual and can be overridden, e.g. composite controls do
|
|
|
|
// it to enable the system theme for all of their parts.
|
2018-08-05 08:46:50 -04:00
|
|
|
virtual void DoEnableSystemTheme
|
|
|
|
#ifdef wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
// Only __WXMSW__ has a non-trivial implementation currently.
|
|
|
|
(bool enable, wxWindow* window);
|
|
|
|
#else
|
|
|
|
(bool WXUNUSED(enable), wxWindow* WXUNUSED(window)) { }
|
|
|
|
#endif // wxHAS_SYSTEM_THEMED_CONTROL
|
2015-09-17 08:46:27 -04:00
|
|
|
|
2019-05-26 17:17:47 -04:00
|
|
|
private:
|
|
|
|
#ifdef wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
bool m_systemThemeDisabled;
|
|
|
|
#endif // wxHAS_SYSTEM_THEMED_CONTROL
|
|
|
|
|
2015-09-17 08:46:27 -04:00
|
|
|
wxDECLARE_NO_COPY_CLASS(wxSystemThemedControlBase);
|
|
|
|
};
|
|
|
|
|
|
|
|
// This class used CRTP, i.e. it should be instantiated for the real base class
|
|
|
|
// and inherited from.
|
|
|
|
template <class C>
|
|
|
|
class wxSystemThemedControl : public C,
|
|
|
|
public wxSystemThemedControlBase
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
wxSystemThemedControl() { }
|
|
|
|
|
|
|
|
void EnableSystemTheme(bool enable = true)
|
|
|
|
{
|
|
|
|
DoEnableSystemTheme(enable, this);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
2019-05-26 17:17:47 -04:00
|
|
|
void EnableSystemThemeByDefault()
|
|
|
|
{
|
|
|
|
// Check if the system theme hadn't been explicitly disabled before
|
|
|
|
// enabling it by default.
|
|
|
|
if ( !this->IsSystemThemeDisabled() )
|
|
|
|
DoEnableSystemTheme(true, this);
|
|
|
|
}
|
|
|
|
|
2015-09-17 08:46:27 -04:00
|
|
|
wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxSystemThemedControl, C);
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _WX_SYSTHEMECTRL_H
|