1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/cocoa/stattext.mm
3 // Purpose: wxStaticText
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
16 #include "wx/stattext.h"
22 #include "wx/dcclient.h"
23 #include "wx/settings.h"
26 #include "wx/osx/private.h"
29 #include "wx/osx/cocoa/private/markuptoattr.h"
30 #endif // wxUSE_MARKUP
34 @interface wxNSStaticTextView : NSTextField
39 @implementation wxNSStaticTextView
43 static BOOL initialized = NO;
47 wxOSXCocoaClassAddWXMethods( self );
51 - (void) setEnabled:(BOOL) flag
53 [super setEnabled: flag];
55 if (![self drawsBackground]) {
56 // Static text is drawn incorrectly when disabled.
57 // For an explanation, see
58 // http://www.cocoabuilder.com/archive/message/cocoa/2006/7/21/168028
61 [self setTextColor: [NSColor controlTextColor]];
65 [self setTextColor: [NSColor secondarySelectedControlColor]];
72 class wxStaticTextCocoaImpl : public wxWidgetCocoaImpl
75 wxStaticTextCocoaImpl( wxWindowMac* peer , WXWidget w , NSLineBreakMode lineBreak) : wxWidgetCocoaImpl(peer, w)
77 m_lineBreak = lineBreak;
80 virtual void SetLabel(const wxString& title, wxFontEncoding encoding)
82 wxCFStringRef text( title , encoding );
84 NSMutableAttributedString *
85 attrstring = [[NSMutableAttributedString alloc] initWithString:text.AsNSString()];
86 DoSetAttrString(attrstring);
91 virtual void SetLabelMarkup( const wxString& markup)
93 wxMarkupToAttrString toAttr(GetWXPeer(), markup);
95 DoSetAttrString(toAttr.GetNSAttributedString());
97 #endif // wxUSE_MARKUP
100 void DoSetAttrString(NSMutableAttributedString *attrstring)
102 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
103 [paragraphStyle setLineBreakMode:m_lineBreak];
104 int style = GetWXPeer()->GetWindowStyleFlag();
105 if (style & wxALIGN_CENTER_HORIZONTAL)
106 [paragraphStyle setAlignment: NSCenterTextAlignment];
107 else if (style & wxALIGN_RIGHT)
108 [paragraphStyle setAlignment: NSRightTextAlignment];
110 [attrstring addAttribute:NSParagraphStyleAttributeName
112 range:NSMakeRange(0, [attrstring length])];
113 NSCell* cell = [(wxNSStaticTextView *)GetWXWidget() cell];
114 [cell setAttributedStringValue:attrstring];
115 [paragraphStyle release];
118 NSLineBreakMode m_lineBreak;
121 wxSize wxStaticText::DoGetBestSize() const
123 return wxWindowMac::DoGetBestSize() ;
126 wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
127 wxWindowMac* WXUNUSED(parent),
128 wxWindowID WXUNUSED(id),
129 const wxString& WXUNUSED(label),
133 long WXUNUSED(extraStyle))
135 NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
136 wxNSStaticTextView* v = [[wxNSStaticTextView alloc] initWithFrame:r];
139 [v setDrawsBackground:NO];
140 [v setSelectable: NO];
144 NSLineBreakMode linebreak = NSLineBreakByWordWrapping;
145 if ( ((wxStaticText*)wxpeer)->IsEllipsized() )
147 if ( style & wxST_ELLIPSIZE_MIDDLE )
148 linebreak = NSLineBreakByTruncatingMiddle;
149 else if (style & wxST_ELLIPSIZE_END )
150 linebreak = NSLineBreakByTruncatingTail;
151 else if (style & wxST_ELLIPSIZE_START )
152 linebreak = NSLineBreakByTruncatingHead;
156 [[v cell] setWraps:YES];
159 wxWidgetCocoaImpl* c = new wxStaticTextCocoaImpl( wxpeer, v, linebreak );
163 #endif //if wxUSE_STATTEXT