Files
wxWidgets/src/xrc/xh_tglbtn.cpp
Vadim Zeitlin 38ad817163 Use GetBitmapBundle() whenever possible in XRC handlers
This allows specifying multiple bitmaps and/or SVG in the XRC for the
controls which support them.
2022-02-20 18:06:09 +01:00

110 lines
2.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/xrc/xh_tglbtn.cpp
// Purpose: XRC resource for wxToggleButton
// Author: Bob Mitchell
// Created: 2000/03/21
// Copyright: (c) 2000 Bob Mitchell and Verant Interactive
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_XRC && wxUSE_TOGGLEBTN
# if !defined(__WXUNIVERSAL__) && !defined(__WXMOTIF__) && !(defined(__WXGTK__) && !defined(__WXGTK20__))
# define wxHAVE_BITMAPS_IN_BUTTON 1
# endif
#include "wx/xrc/xh_tglbtn.h"
#include "wx/tglbtn.h"
#include "wx/button.h" // solely for wxBU_EXACTFIT
wxIMPLEMENT_DYNAMIC_CLASS(wxToggleButtonXmlHandler, wxXmlResourceHandler);
wxToggleButtonXmlHandler::wxToggleButtonXmlHandler()
: wxXmlResourceHandler()
{
XRC_ADD_STYLE(wxBU_EXACTFIT);
AddWindowStyles();
}
wxObject *wxToggleButtonXmlHandler::DoCreateResource()
{
wxObject *control = m_instance;
#ifdef wxHAVE_BITMAPS_IN_BUTTON
if (m_class == wxT("wxBitmapToggleButton"))
{
if (!control)
control = new wxBitmapToggleButton;
DoCreateBitmapToggleButton(control);
}
else
#endif
{
if (!control)
control = new wxToggleButton;
DoCreateToggleButton(control);
}
SetupWindow(wxDynamicCast(control, wxWindow));
return control;
}
bool wxToggleButtonXmlHandler::CanHandle(wxXmlNode *node)
{
return (
IsOfClass(node, wxT("wxToggleButton")) ||
IsOfClass(node, wxT("wxBitmapToggleButton"))
);
}
void wxToggleButtonXmlHandler::DoCreateToggleButton(wxObject *control)
{
wxToggleButton *button = wxDynamicCast(control, wxToggleButton);
button->Create(m_parentAsWindow,
GetID(),
GetText(wxT("label")),
GetPosition(), GetSize(),
GetStyle(),
wxDefaultValidator,
GetName());
#ifdef wxHAVE_BITMAPS_IN_BUTTON
if ( GetParamNode("bitmap") )
{
button->SetBitmap(GetBitmapBundle("bitmap", wxART_BUTTON),
GetDirection("bitmapposition"));
}
#endif
button->SetValue(GetBool( wxT("checked")));
}
#ifdef wxHAVE_BITMAPS_IN_BUTTON
void wxToggleButtonXmlHandler::DoCreateBitmapToggleButton(wxObject *control)
{
wxBitmapToggleButton *button = wxDynamicCast(control, wxBitmapToggleButton);
button->Create(m_parentAsWindow,
GetID(),
GetBitmapBundle(wxT("bitmap"), wxART_BUTTON),
GetPosition(), GetSize(),
GetStyle(),
wxDefaultValidator,
GetName());
button->SetValue(GetBool( wxT("checked")));
}
#endif
#endif // wxUSE_XRC && wxUSE_TOGGLEBTN