///////////////////////////////////////////////////////////////////////////// // Name: src/univ/tglbtn.cpp // Purpose: wxToggleButton // Author: Vadim Zeitlin // Modified by: David Bjorkevik // Created: 16.05.06 // Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if wxUSE_TOGGLEBTN #include "wx/tglbtn.h" #include "wx/univ/renderer.h" #include "wx/univ/colschem.h" #include "wx/univ/theme.h" #include "wx/stockitem.h" wxDEFINE_EVENT( wxEVT_TOGGLEBUTTON, wxCommandEvent ); wxIMPLEMENT_DYNAMIC_CLASS(wxToggleButton, wxToggleButtonBase); wxToggleButton::wxToggleButton() { Init(); } wxToggleButton::wxToggleButton(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { Init(); Create(parent, id, label, pos, size, style, validator, name); } bool wxToggleButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { wxString label(lbl); if (label.empty() && wxIsStockID(id)) label = wxGetStockLabel(id); long ctrl_style = style & ~wxBU_ALIGN_MASK; ctrl_style = ctrl_style & ~wxALIGN_MASK; if((style & wxBU_RIGHT) == wxBU_RIGHT) ctrl_style |= wxALIGN_RIGHT; else if((style & wxBU_LEFT) == wxBU_LEFT) ctrl_style |= wxALIGN_LEFT; else ctrl_style |= wxALIGN_CENTRE_HORIZONTAL; if((style & wxBU_TOP) == wxBU_TOP) ctrl_style |= wxALIGN_TOP; else if((style & wxBU_BOTTOM) == wxBU_BOTTOM) ctrl_style |= wxALIGN_BOTTOM; else ctrl_style |= wxALIGN_CENTRE_VERTICAL; if ( !wxToggleButtonBase::Create(parent, id, pos, size, ctrl_style, validator, name) ) { wxFAIL_MSG(wxT("wxToggleButton creation failed")); return false; } SetLabel(label); CreateInputHandler(wxINP_HANDLER_BUTTON); return true; } void wxToggleButton::Init() { m_isPressed = false; m_value = false; } void wxToggleButton::Toggle() { if ( m_isPressed ) Release(); else Press(); if ( !m_isPressed ) { // releasing button after it had been pressed generates a click event // and toggles value m_value = !m_value; Click(); } } void wxToggleButton::Click() { wxCommandEvent event(wxEVT_TOGGLEBUTTON, GetId()); InitCommandEvent(event); event.SetInt(GetValue()); Command(event); } void wxToggleButton::SetValue(bool state) { m_value = state; Refresh(); } #endif // wxUSE_TOGGLEBTN