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:
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "wx/button.h"
|
#include "wx/button.h"
|
||||||
#include "wx/toplevel.h"
|
#include "wx/toplevel.h"
|
||||||
|
#include "wx/tglbtn.h"
|
||||||
|
|
||||||
#include "wx/osx/private.h"
|
#include "wx/osx/private.h"
|
||||||
|
|
||||||
@@ -82,124 +83,120 @@
|
|||||||
- (NSControlSize)controlSize;
|
- (NSControlSize)controlSize;
|
||||||
@end
|
@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:
|
// switch bezel style for plain pushbuttons
|
||||||
wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v)
|
if ( bitmap.IsOk() )
|
||||||
: wxWidgetCocoaImpl(wxpeer, v)
|
|
||||||
{
|
{
|
||||||
SetNeedsFrame(false);
|
if ([GetNSButton() bezelStyle] == NSRoundedBezelStyle)
|
||||||
|
[GetNSButton() setBezelStyle:NSRegularSquareBezelStyle];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
virtual void SetBitmap(const wxBitmap& bitmap)
|
|
||||||
{
|
{
|
||||||
// switch bezel style for plain pushbuttons
|
[GetNSButton() setBezelStyle:NSRoundedBezelStyle];
|
||||||
if ( bitmap.IsOk() )
|
|
||||||
{
|
|
||||||
if ([GetNSButton() bezelStyle] == NSRoundedBezelStyle)
|
|
||||||
[GetNSButton() setBezelStyle:NSRegularSquareBezelStyle];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[GetNSButton() setBezelStyle:NSRoundedBezelStyle];
|
|
||||||
}
|
|
||||||
|
|
||||||
wxWidgetCocoaImpl::SetBitmap(bitmap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxWidgetCocoaImpl::SetBitmap(bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
#if wxUSE_MARKUP
|
#if wxUSE_MARKUP
|
||||||
virtual void SetLabelMarkup(const wxString& markup)
|
void wxButtonCocoaImpl::SetLabelMarkup(const wxString& markup)
|
||||||
{
|
{
|
||||||
wxMarkupToAttrString toAttr(GetWXPeer(), markup);
|
wxMarkupToAttrString toAttr(GetWXPeer(), markup);
|
||||||
NSMutableAttributedString *attrString = toAttr.GetNSAttributedString();
|
NSMutableAttributedString *attrString = toAttr.GetNSAttributedString();
|
||||||
|
|
||||||
// Button text is always centered.
|
// Button text is always centered.
|
||||||
NSMutableParagraphStyle *
|
NSMutableParagraphStyle *
|
||||||
paragraphStyle = [[NSMutableParagraphStyle alloc] init];
|
paragraphStyle = [[NSMutableParagraphStyle alloc] init];
|
||||||
[paragraphStyle setAlignment: NSCenterTextAlignment];
|
[paragraphStyle setAlignment: NSCenterTextAlignment];
|
||||||
[attrString addAttribute:NSParagraphStyleAttributeName
|
[attrString addAttribute:NSParagraphStyleAttributeName
|
||||||
value:paragraphStyle
|
value:paragraphStyle
|
||||||
range:NSMakeRange(0, [attrString length])];
|
range:NSMakeRange(0, [attrString length])];
|
||||||
[paragraphStyle release];
|
[paragraphStyle release];
|
||||||
|
|
||||||
[GetNSButton() setAttributedTitle:attrString];
|
[GetNSButton() setAttributedTitle:attrString];
|
||||||
}
|
}
|
||||||
#endif // wxUSE_MARKUP
|
#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];
|
[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;
|
id cell = [(id)m_osxView cell];
|
||||||
NSControlSize size = NSRegularControlSize;
|
if ([cell respondsToSelector:@selector(controlSize)])
|
||||||
if ( [m_osxView respondsToSelector:@selector(controlSize)] )
|
size = [cell 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:@""];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( [GetNSButton() bezelStyle] == NSRoundedBezelStyle )
|
||||||
private:
|
|
||||||
NSButton *GetNSButton() const
|
|
||||||
{
|
{
|
||||||
wxASSERT( [m_osxView isKindOfClass:[NSButton class]] );
|
switch( size )
|
||||||
|
{
|
||||||
return static_cast<NSButton *>(m_osxView);
|
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")
|
// Set the keyboard accelerator key from the label (e.g. "Click &Me")
|
||||||
void wxButton::OSXSetAcceleratorFromLabel(const wxString& label)
|
void wxButton::OSXSetAcceleratorFromLabel(const wxString& label)
|
||||||
|
Reference in New Issue
Block a user