#include <stdio.h>
-@interface wxNSStaticTextView : NSTextView
+@interface wxNSStaticTextView : NSTextField
{
- wxWidgetCocoaImpl* impl;
}
-
-- (void) setImplementation:(wxWidgetCocoaImpl*) item;
-- (wxWidgetCocoaImpl*) implementation;
@end
+
@implementation wxNSStaticTextView
+ (void)initialize
{
static BOOL initialized = NO;
- if (!initialized)
- {
+ if (!initialized)
+ {
initialized = YES;
wxOSXCocoaClassAddWXMethods( self );
}
}
-- (wxWidgetCocoaImpl*) implementation
-{
- return impl;
-}
-
-- (void) setImplementation:(wxWidgetCocoaImpl*) item
-{
- impl = item;
-}
@end
-
-wxSize wxStaticText::DoGetBestSize() const
+class wxStaticTextCocoaImpl : public wxWidgetCocoaImpl
{
-Point bounds;
-
-#if wxOSX_USE_ATSU_TEXT
- OSStatus err = noErr;
- wxCFStringRef str( m_label, GetFont().GetEncoding() );
-
- SInt16 baseline;
- if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
+public:
+ wxStaticTextCocoaImpl( wxWindowMac* peer , WXWidget w , NSLineBreakMode lineBreak) : wxWidgetCocoaImpl(peer, w)
{
- err = GetThemeTextDimensions(
- (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")),
- m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline );
- verify_noerr( err );
+ m_lineBreak = lineBreak;
}
- else
-#endif
+
+ virtual void SetLabel(const wxString& title, wxFontEncoding encoding)
{
- wxClientDC dc(const_cast<wxStaticText*>(this));
- wxCoord width, height ;
- dc.GetMultiLineTextExtent( m_label , &width, &height);
- // FIXME: Some labels seem to have their last characters
- // stripped out. Adding 12 pixels seems to be enough to fix this.
- // Perhaps m_label is not being synced properly...
- bounds.h = width+12;
- bounds.v = height;
+ wxNSStaticTextView* v = (wxNSStaticTextView*)GetWXWidget();
+ wxWindow* wxpeer = GetWXPeer();
+ NSCell* cell = [v cell];
+ wxCFStringRef text( title , encoding );
+
+ NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+ [paragraphStyle setLineBreakMode:m_lineBreak];
+ int style = wxpeer->GetWindowStyleFlag();
+ if (style & wxALIGN_CENTER)
+ [paragraphStyle setAlignment: NSCenterTextAlignment];
+ else if (style & wxALIGN_RIGHT)
+ [paragraphStyle setAlignment: NSRightTextAlignment];
+
+ NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:paragraphStyle, NSParagraphStyleAttributeName, nil];
+ NSAttributedString *attrstring = [[NSAttributedString alloc] initWithString:text.AsNSString() attributes:dict];
+ [cell setAttributedStringValue:attrstring];
+ [attrstring release];
+ [paragraphStyle release];
}
+private :
+ NSLineBreakMode m_lineBreak;
+};
- if ( m_label.empty() )
- bounds.h = 0;
-
- bounds.h += MacGetLeftBorderSize() + MacGetRightBorderSize();
- bounds.v += MacGetTopBorderSize() + MacGetBottomBorderSize();
-
- return wxSize( bounds.h, bounds.v );
+wxSize wxStaticText::DoGetBestSize() const
+{
+ return wxWindowMac::DoGetBestSize() ;
}
-// for wxST_ELLIPSIZE_* support:
-
-/*
- FIXME: UpdateLabel() should be called on size events when wxST_ELLIPSIZE_START is set
- to allow correct dynamic ellipsizing of the label
-*/
-
wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
- wxWindowMac* parent,
- wxWindowID id,
- const wxString& label,
+ wxWindowMac* WXUNUSED(parent),
+ wxWindowID WXUNUSED(id),
+ const wxString& WXUNUSED(label),
const wxPoint& pos,
const wxSize& size,
long style,
- long extraStyle)
+ long WXUNUSED(extraStyle))
{
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxNSStaticTextView* v = [[wxNSStaticTextView alloc] initWithFrame:r];
[v setEditable:NO];
[v setDrawsBackground:NO];
- [v setString: wxCFStringRef( label , wxpeer->GetFont().GetEncoding() ).AsNSString()];
-
- NSRange allText = NSMakeRange(0, label.length());
- if (style & wxALIGN_CENTER)
- [v setAlignment: NSCenterTextAlignment range: allText];
- else if (style & wxALIGN_RIGHT)
- [v setAlignment: NSRightTextAlignment range: allText];
-
- wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
- return c;
-/*
- Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
+ [v setSelectable: NO];
+ [v setBezeled:NO];
+ [v setBordered:NO];
- wxMacControl* peer = new wxMacControl( wxpeer );
- OSStatus err = CreateStaticTextControl(
- MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
- &bounds, NULL, NULL, peer->GetControlRefAddr() );
- verify_noerr( err );
-
- if ( ( style & wxST_ELLIPSIZE_END ) || ( style & wxST_ELLIPSIZE_MIDDLE ) )
+ NSLineBreakMode linebreak = NSLineBreakByWordWrapping;
+ if ( ((wxStaticText*)wxpeer)->IsEllipsized() )
{
- TruncCode tCode = truncEnd;
if ( style & wxST_ELLIPSIZE_MIDDLE )
- tCode = truncMiddle;
-
- err = peer->SetData( kControlStaticTextTruncTag, tCode );
- err = peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 );
+ linebreak = NSLineBreakByTruncatingMiddle;
+ else if (style & wxST_ELLIPSIZE_END )
+ linebreak = NSLineBreakByTruncatingTail;
+ else if (style & wxST_ELLIPSIZE_START )
+ linebreak = NSLineBreakByTruncatingHead;
}
- return peer;
- */
+ else
+ {
+ [[v cell] setWraps:YES];
+ }
+
+ wxWidgetCocoaImpl* c = new wxStaticTextCocoaImpl( wxpeer, v, linebreak );
+ return c;
}
#endif //if wxUSE_STATTEXT