From f8b13b5868b380ba53a0c030d6349f72dc4a9fae Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 5 Dec 2007 15:01:13 +0000 Subject: [PATCH] Added wxToggleBitmapButton git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50481 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/carbon/tglbtn.h | 46 ++++++++++++++++++++++- src/mac/carbon/tglbtn.cpp | 69 +++++++++++++++++++++++++++++++++- 2 files changed, 112 insertions(+), 3 deletions(-) diff --git a/include/wx/mac/carbon/tglbtn.h b/include/wx/mac/carbon/tglbtn.h index 6b9610e03f..43db82863b 100644 --- a/include/wx/mac/carbon/tglbtn.h +++ b/include/wx/mac/carbon/tglbtn.h @@ -15,7 +15,51 @@ WXDLLEXPORT_DATA(extern const char) wxCheckBoxNameStr[]; -// Checkbox item (single checkbox) + +class WXDLLEXPORT wxToggleBitmapButton : public wxControl +{ +public: + wxToggleBitmapButton() {} + wxToggleBitmapButton(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr) + { + Create(parent, id, label, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, + wxWindowID id, + const wxBitmap& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr); + + virtual void SetValue(bool value); + virtual bool GetValue() const ; + + virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; + + virtual void Command(wxCommandEvent& event); + +private: + wxBitmap m_bitmap; + +protected: + virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } + virtual wxSize DoGetBestSize() const; + +private: + DECLARE_DYNAMIC_CLASS_NO_COPY(wxToggleBitmapButton) +}; + + class WXDLLEXPORT wxToggleButton : public wxControl { public: diff --git a/src/mac/carbon/tglbtn.cpp b/src/mac/carbon/tglbtn.cpp index 27bb8c15e6..f36eb04099 100644 --- a/src/mac/carbon/tglbtn.cpp +++ b/src/mac/carbon/tglbtn.cpp @@ -36,12 +36,10 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED) // ============================================================================ // implementation // ============================================================================ - // ---------------------------------------------------------------------------- // wxToggleButton // ---------------------------------------------------------------------------- -// Single check box item bool wxToggleButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, @@ -105,5 +103,72 @@ wxInt32 wxToggleButton::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEV return noErr ; } +// ---------------------------------------------------------------------------- +// wxToggleBitmapButton +// ---------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxToggleBitmapButton, wxControl) + +bool wxToggleBitmapButton::Create(wxWindow *parent, wxWindowID id, + const wxBitmap& label, + const wxPoint& pos, + const wxSize& size, long style, + const wxValidator& validator, + const wxString& name) +{ + m_macIsUserPane = FALSE ; + + m_bitmap = label; + + if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) + return false; + + Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; + + m_peer = new wxMacControl(this) ; + + ControlButtonContentInfo info; + wxMacCreateBitmapButton( &info, m_bitmap ); + verify_noerr ( CreateBevelButtonControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , CFSTR("") , + kControlBevelButtonNormalBevel , kControlBehaviorOffsetContents | kControlBehaviorToggles , &info , 0 , 0 , 0 , m_peer->GetControlRefAddr() ) ); + + MacPostControlCreate(pos,size) ; + + return TRUE; +} + +wxSize wxToggleBitmapButton::DoGetBestSize() const +{ + if (!m_bitmap.IsOk()) + return wxSize(20,20); + + return wxSize ( m_bitmap.GetWidth()+6, m_bitmap.GetHeight()+6 ) ; +} + +void wxToggleBitmapButton::SetValue(bool val) +{ + m_peer->SetValue( val ) ; +} + +bool wxToggleBitmapButton::GetValue() const +{ + return m_peer->GetValue() ; +} + +void wxToggleBitmapButton::Command(wxCommandEvent & event) +{ + SetValue((event.GetInt() != 0)); + ProcessCommand(event); +} + +wxInt32 wxToggleBitmapButton::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) ) +{ + wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, m_windowId); + event.SetInt(GetValue()); + event.SetEventObject(this); + ProcessCommand(event); + return noErr ; +} + #endif // wxUSE_TOGGLEBTN