exposing common used button impl class

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72861 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2012-11-02 10:41:22 +00:00
parent a1b719bc74
commit b108581c99

View File

@@ -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 )
{
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;
}
}
}
void SetAcceleratorFromLabel(const wxString& label)
{
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:@""];
}
id cell = [(id)m_osxView cell];
if ([cell respondsToSelector:@selector(controlSize)])
size = [cell controlSize];
}
private:
NSButton *GetNSButton() const
if ( [GetNSButton() bezelStyle] == NSRoundedBezelStyle )
{
wxASSERT( [m_osxView isKindOfClass:[NSButton class]] );
return static_cast<NSButton *>(m_osxView);
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;
}
}
};
}
} // anonymous namespace
void wxButtonCocoaImpl::SetAcceleratorFromLabel(const wxString& label)
{
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:@""];
}
}
NSButton *wxButtonCocoaImpl::GetNSButton() const
{
wxASSERT( [m_osxView isKindOfClass:[NSButton class]] );
return static_cast<NSButton *>(m_osxView);
}
// Set the keyboard accelerator key from the label (e.g. "Click &Me")
void wxButton::OSXSetAcceleratorFromLabel(const wxString& label)