From b108581c99f60bb8b513f98a4b9b4080d574af4c Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Fri, 2 Nov 2012 10:41:22 +0000 Subject: [PATCH 1/1] exposing common used button impl class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72861 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/osx/cocoa/button.mm | 183 ++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 93 deletions(-) diff --git a/src/osx/cocoa/button.mm b/src/osx/cocoa/button.mm index 7e68cc0d79..3b7c601be6 100644 --- a/src/osx/cocoa/button.mm +++ b/src/osx/cocoa/button.mm @@ -17,6 +17,7 @@ #include "wx/button.h" #include "wx/toplevel.h" +#include "wx/tglbtn.h" #include "wx/osx/private.h" @@ -82,124 +83,120 @@ - (NSControlSize)controlSize; @end -namespace +wxButtonCocoaImpl::wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v) +: wxWidgetCocoaImpl(wxpeer, v) { + SetNeedsFrame(false); +} -class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl +void wxButtonCocoaImpl::SetBitmap(const wxBitmap& bitmap) { -public: - wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v) - : wxWidgetCocoaImpl(wxpeer, v) + // switch bezel style for plain pushbuttons + if ( bitmap.IsOk() ) { - SetNeedsFrame(false); + if ([GetNSButton() bezelStyle] == NSRoundedBezelStyle) + [GetNSButton() setBezelStyle:NSRegularSquareBezelStyle]; } - - virtual void SetBitmap(const wxBitmap& bitmap) + else { - // switch bezel style for plain pushbuttons - if ( bitmap.IsOk() ) - { - if ([GetNSButton() bezelStyle] == NSRoundedBezelStyle) - [GetNSButton() setBezelStyle:NSRegularSquareBezelStyle]; - } - else - { - [GetNSButton() setBezelStyle:NSRoundedBezelStyle]; - } - - wxWidgetCocoaImpl::SetBitmap(bitmap); + [GetNSButton() setBezelStyle:NSRoundedBezelStyle]; } + + wxWidgetCocoaImpl::SetBitmap(bitmap); +} #if wxUSE_MARKUP - virtual void SetLabelMarkup(const wxString& markup) - { - wxMarkupToAttrString toAttr(GetWXPeer(), markup); - NSMutableAttributedString *attrString = toAttr.GetNSAttributedString(); - - // Button text is always centered. - NSMutableParagraphStyle * - paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - [paragraphStyle setAlignment: NSCenterTextAlignment]; - [attrString addAttribute:NSParagraphStyleAttributeName - value:paragraphStyle - range:NSMakeRange(0, [attrString length])]; - [paragraphStyle release]; - - [GetNSButton() setAttributedTitle:attrString]; - } +void wxButtonCocoaImpl::SetLabelMarkup(const wxString& markup) +{ + wxMarkupToAttrString toAttr(GetWXPeer(), markup); + NSMutableAttributedString *attrString = toAttr.GetNSAttributedString(); + + // Button text is always centered. + NSMutableParagraphStyle * + paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setAlignment: NSCenterTextAlignment]; + [attrString addAttribute:NSParagraphStyleAttributeName + value:paragraphStyle + range:NSMakeRange(0, [attrString length])]; + [paragraphStyle release]; + + [GetNSButton() setAttributedTitle:attrString]; +} #endif // wxUSE_MARKUP - void SetPressedBitmap( const wxBitmap& bitmap ) +void wxButtonCocoaImpl::SetPressedBitmap( const wxBitmap& bitmap ) +{ + NSButton* button = GetNSButton(); + [button setAlternateImage: bitmap.GetNSImage()]; + if ( GetWXPeer()->IsKindOf(wxCLASSINFO(wxToggleButton)) ) + { + [button setButtonType:NSToggleButton]; + } + else { - NSButton* button = GetNSButton(); - [button setAlternateImage: bitmap.GetNSImage()]; [button setButtonType:NSMomentaryChangeButton]; } +} - void GetLayoutInset(int &left , int &top , int &right, int &bottom) const +void wxButtonCocoaImpl::GetLayoutInset(int &left , int &top , int &right, int &bottom) const +{ + left = top = right = bottom = 0; + NSControlSize size = NSRegularControlSize; + if ( [m_osxView respondsToSelector:@selector(controlSize)] ) + size = [m_osxView controlSize]; + else if ([m_osxView respondsToSelector:@selector(cell)]) { - left = top = right = bottom = 0; - NSControlSize size = NSRegularControlSize; - if ( [m_osxView respondsToSelector:@selector(controlSize)] ) - size = [m_osxView controlSize]; - else if ([m_osxView respondsToSelector:@selector(cell)]) - { - id cell = [(id)m_osxView cell]; - if ([cell respondsToSelector:@selector(controlSize)]) - size = [cell controlSize]; - } - - if ( [GetNSButton() bezelStyle] == NSRoundedBezelStyle ) + id cell = [(id)m_osxView cell]; + if ([cell respondsToSelector:@selector(controlSize)]) + size = [cell controlSize]; + } + + if ( [GetNSButton() bezelStyle] == NSRoundedBezelStyle ) + { + switch( size ) { - switch( size ) - { - case NSRegularControlSize: - left = right = 6; - top = 4; - bottom = 8; - break; - case NSSmallControlSize: - left = right = 5; - top = 4; - bottom = 7; - break; - case NSMiniControlSize: - left = right = 1; - top = 0; - bottom = 2; - break; - } + case NSRegularControlSize: + left = right = 6; + top = 4; + bottom = 8; + break; + case NSSmallControlSize: + left = right = 5; + top = 4; + bottom = 7; + break; + case NSMiniControlSize: + left = right = 1; + top = 0; + bottom = 2; + break; } } +} - void SetAcceleratorFromLabel(const wxString& label) +void wxButtonCocoaImpl::SetAcceleratorFromLabel(const wxString& label) +{ + const int accelPos = wxControl::FindAccelIndex(label); + if ( accelPos != wxNOT_FOUND ) { - const int accelPos = wxControl::FindAccelIndex(label); - if ( accelPos != wxNOT_FOUND ) - { - wxString accelstring(label[accelPos + 1]); // Skip '&' itself - accelstring.MakeLower(); - wxCFStringRef cfText(accelstring); - [GetNSButton() setKeyEquivalent:cfText.AsNSString()]; - [GetNSButton() setKeyEquivalentModifierMask:NSCommandKeyMask]; - } - else - { - [GetNSButton() setKeyEquivalent:@""]; - } + wxString accelstring(label[accelPos + 1]); // Skip '&' itself + accelstring.MakeLower(); + wxCFStringRef cfText(accelstring); + [GetNSButton() setKeyEquivalent:cfText.AsNSString()]; + [GetNSButton() setKeyEquivalentModifierMask:NSCommandKeyMask]; } - - -private: - NSButton *GetNSButton() const + else { - wxASSERT( [m_osxView isKindOfClass:[NSButton class]] ); - - return static_cast(m_osxView); + [GetNSButton() setKeyEquivalent:@""]; } -}; +} -} // anonymous namespace +NSButton *wxButtonCocoaImpl::GetNSButton() const +{ + wxASSERT( [m_osxView isKindOfClass:[NSButton class]] ); + + return static_cast(m_osxView); +} // Set the keyboard accelerator key from the label (e.g. "Click &Me") void wxButton::OSXSetAcceleratorFromLabel(const wxString& label) -- 2.45.2