Files
wxWidgets/src/xrc/xh_spin.cpp
Vadim Zeitlin 74cf8370ce Avoid code duplication between wxSpinCtrl XRC handlers
Extract styles initialization into a function reused by both
wxSpinCtrlXmlHandler and wxSpinCtrlDoubleXmlHandler.

No real changes, this is a pure refactoring.
2018-01-10 17:44:37 +01:00

156 lines
4.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/xrc/xh_spin.cpp
// Purpose: XRC resource for wxSpinButton
// 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"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_XRC
#include "wx/xrc/xh_spin.h"
#if wxUSE_SPINBTN
#include "wx/spinbutt.h"
static const long DEFAULT_VALUE = 0;
static const long DEFAULT_MIN = 0;
static const long DEFAULT_MAX = 100;
wxIMPLEMENT_DYNAMIC_CLASS(wxSpinButtonXmlHandler, wxXmlResourceHandler);
wxSpinButtonXmlHandler::wxSpinButtonXmlHandler()
: wxXmlResourceHandler()
{
XRC_ADD_STYLE(wxSP_HORIZONTAL);
XRC_ADD_STYLE(wxSP_VERTICAL);
XRC_ADD_STYLE(wxSP_ARROW_KEYS);
XRC_ADD_STYLE(wxSP_WRAP);
AddWindowStyles();
}
wxObject *wxSpinButtonXmlHandler::DoCreateResource()
{
XRC_MAKE_INSTANCE(control, wxSpinButton)
control->Create(m_parentAsWindow,
GetID(),
GetPosition(), GetSize(),
GetStyle(wxT("style"), wxSP_VERTICAL | wxSP_ARROW_KEYS),
GetName());
control->SetValue(GetLong( wxT("value"), DEFAULT_VALUE));
control->SetRange(GetLong( wxT("min"), DEFAULT_MIN),
GetLong(wxT("max"), DEFAULT_MAX));
SetupWindow(control);
return control;
}
bool wxSpinButtonXmlHandler::CanHandle(wxXmlNode *node)
{
return IsOfClass(node, wxT("wxSpinButton"));
}
#endif // wxUSE_SPINBTN
#if wxUSE_SPINCTRL
#include "wx/spinctrl.h"
static const float DEFAULT_INC = 1.;
static void AddSpinCtrlStyles(wxXmlResourceHandler& handler)
{
handler.XRC_ADD_STYLE(wxSP_HORIZONTAL);
handler.XRC_ADD_STYLE(wxSP_VERTICAL);
handler.XRC_ADD_STYLE(wxSP_ARROW_KEYS);
handler.XRC_ADD_STYLE(wxSP_WRAP);
handler.XRC_ADD_STYLE(wxALIGN_LEFT);
handler.XRC_ADD_STYLE(wxALIGN_CENTER);
handler.XRC_ADD_STYLE(wxALIGN_RIGHT);
}
wxIMPLEMENT_DYNAMIC_CLASS(wxSpinCtrlXmlHandler, wxXmlResourceHandler);
wxSpinCtrlXmlHandler::wxSpinCtrlXmlHandler()
: wxXmlResourceHandler()
{
AddSpinCtrlStyles(*this);
}
wxObject *wxSpinCtrlXmlHandler::DoCreateResource()
{
XRC_MAKE_INSTANCE(control, wxSpinCtrl)
control->Create(m_parentAsWindow,
GetID(),
GetText(wxT("value")),
GetPosition(), GetSize(),
GetStyle(wxT("style"), wxSP_ARROW_KEYS | wxALIGN_RIGHT),
GetLong(wxT("min"), DEFAULT_MIN),
GetLong(wxT("max"), DEFAULT_MAX),
GetLong(wxT("value"), DEFAULT_VALUE),
GetName());
const long base = GetLong(wxS("base"), 10);
if ( base != 10 )
control->SetBase(base);
SetupWindow(control);
return control;
}
bool wxSpinCtrlXmlHandler::CanHandle(wxXmlNode *node)
{
return IsOfClass(node, wxT("wxSpinCtrl"));
}
wxIMPLEMENT_DYNAMIC_CLASS(wxSpinCtrlDoubleXmlHandler, wxXmlResourceHandler);
wxSpinCtrlDoubleXmlHandler::wxSpinCtrlDoubleXmlHandler()
: wxXmlResourceHandler()
{
AddSpinCtrlStyles(*this);
}
wxObject *wxSpinCtrlDoubleXmlHandler::DoCreateResource()
{
XRC_MAKE_INSTANCE(control, wxSpinCtrlDouble)
control->Create(m_parentAsWindow,
GetID(),
GetText(wxS("value")),
GetPosition(), GetSize(),
GetStyle(wxS("style"), wxSP_ARROW_KEYS | wxALIGN_RIGHT),
GetFloat(wxS("min"), (float)DEFAULT_MIN),
GetFloat(wxS("max"), (float)DEFAULT_MAX),
GetFloat(wxS("value"), (float)DEFAULT_VALUE),
GetFloat(wxS("inc"), DEFAULT_INC),
GetName());
SetupWindow(control);
return control;
}
bool wxSpinCtrlDoubleXmlHandler::CanHandle(wxXmlNode *node)
{
return IsOfClass(node, wxS("wxSpinCtrlDouble"));
}
#endif // wxUSE_SPINCTRL
#endif // wxUSE_XRC