Add wxSystemThemedControl and use it in wxMSW
wxSystemThemedControl allows to use the "system theme" (i.e. the theme used by the system applications such as file manager and which can, surprisingly, be different from the default one). Currently it is only implemented for wxMSW and does nothing under the other platforms. Use wxSystemThemedControl for wxDataViewCtrl, wxListCtrl and, optionally, if wxTR_TWIST_BUTTONS style is specified, wxTreeCtrl to give them more native appearance under MSW. Closes #16414.
This commit is contained in:
committed by
Vadim Zeitlin
parent
b7a89f8746
commit
2fff3cd29f
@@ -26,6 +26,7 @@
|
||||
#include "wx/vector.h"
|
||||
#include "wx/dataobj.h"
|
||||
#include "wx/withimages.h"
|
||||
#include "wx/systhemectrl.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
@@ -513,7 +514,7 @@ private:
|
||||
#define wxDV_ROW_LINES 0x0010 // alternating colour in rows
|
||||
#define wxDV_VARIABLE_LINE_HEIGHT 0x0020 // variable line height
|
||||
|
||||
class WXDLLIMPEXP_ADV wxDataViewCtrlBase: public wxControl
|
||||
class WXDLLIMPEXP_ADV wxDataViewCtrlBase: public wxSystemThemedControl<wxControl>
|
||||
{
|
||||
public:
|
||||
wxDataViewCtrlBase();
|
||||
|
@@ -220,6 +220,8 @@ protected:
|
||||
// Reset all columns currently used for sorting.
|
||||
void ResetAllSortColumns();
|
||||
|
||||
virtual void DoEnableSystemTheme(bool enable, wxWindow* window) wxOVERRIDE;
|
||||
|
||||
public: // utility functions not part of the API
|
||||
|
||||
// returns the "best" width for the idx-th column
|
||||
|
@@ -16,6 +16,7 @@
|
||||
#include "wx/gdicmn.h"
|
||||
#include "wx/event.h"
|
||||
#include "wx/control.h"
|
||||
#include "wx/systhemectrl.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
@@ -377,7 +378,7 @@ private:
|
||||
// the real control class but is just used for implementation convenience. We
|
||||
// should define the public class functions as pure virtual here in the future
|
||||
// however.
|
||||
class WXDLLIMPEXP_CORE wxListCtrlBase : public wxControl
|
||||
class WXDLLIMPEXP_CORE wxListCtrlBase : public wxSystemThemedControl<wxControl>
|
||||
{
|
||||
public:
|
||||
wxListCtrlBase() { }
|
||||
|
66
include/wx/systhemectrl.h
Normal file
66
include/wx/systhemectrl.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 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"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxWindow;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxSystemThemedControlBase
|
||||
{
|
||||
public:
|
||||
wxSystemThemedControlBase() { }
|
||||
|
||||
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.
|
||||
virtual void DoEnableSystemTheme(bool enable, wxWindow* window);
|
||||
|
||||
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:
|
||||
wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxSystemThemedControl, C);
|
||||
};
|
||||
|
||||
// Only __WXMSW__ has a non-trivial implementation currently.
|
||||
#ifdef __WXMSW__
|
||||
#define wxHAS_SYSTEM_THEMED_CONTROL
|
||||
#endif
|
||||
|
||||
#ifndef wxHAS_SYSTEM_THEMED_CONTROL
|
||||
|
||||
inline void
|
||||
wxSystemThemedControlBase::DoEnableSystemTheme(bool WXUNUSED(enable),
|
||||
wxWindow* WXUNUSED(window))
|
||||
{
|
||||
// Nothing to do.
|
||||
}
|
||||
|
||||
#endif // !wxHAS_SYSTEM_THEMED_CONTROL
|
||||
|
||||
#endif // _WX_SYSTHEMECTRL_H
|
@@ -22,6 +22,7 @@
|
||||
#include "wx/control.h"
|
||||
#include "wx/treebase.h"
|
||||
#include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through wxCLASSINFO macro
|
||||
#include "wx/systhemectrl.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
@@ -33,7 +34,7 @@ class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
// wxTreeCtrlBase
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxTreeCtrlBase : public wxControl
|
||||
class WXDLLIMPEXP_CORE wxTreeCtrlBase : public wxSystemThemedControl<wxControl>
|
||||
{
|
||||
public:
|
||||
wxTreeCtrlBase();
|
||||
|
Reference in New Issue
Block a user