dolphin/Externals/wxWidgets3/src/osx/cocoa/stattext.mm

178 lines
4.8 KiB
Plaintext

/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/cocoa/stattext.mm
// Purpose: wxStaticText
// Author: Stefan Csomor
// Modified by:
// Created: 04/01/98
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#if wxUSE_STATTEXT
#include "wx/stattext.h"
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/dcclient.h"
#include "wx/settings.h"
#endif // WX_PRECOMP
#include "wx/osx/private.h"
#if wxUSE_MARKUP
#include "wx/osx/cocoa/private/markuptoattr.h"
#endif // wxUSE_MARKUP
#include <stdio.h>
@interface wxNSStaticTextView : NSTextField
{
NSColor *m_textColor;
}
@end
@implementation wxNSStaticTextView
+ (void)initialize
{
static BOOL initialized = NO;
if (!initialized)
{
initialized = YES;
wxOSXCocoaClassAddWXMethods( self );
}
}
- (void)dealloc
{
[m_textColor release];
[super dealloc];
}
- (void) setEnabled:(BOOL) flag
{
bool wasEnabled = [self isEnabled];
[super setEnabled: flag];
if (![self drawsBackground]) {
// Static text is drawn incorrectly when disabled.
// For an explanation, see
// http://www.cocoabuilder.com/archive/message/cocoa/2006/7/21/168028
if (flag)
{
if (m_textColor)
[self setTextColor: m_textColor];
}
else
{
if (wasEnabled)
{
[m_textColor release];
m_textColor = [[self textColor] retain];
}
[self setTextColor: [NSColor disabledControlTextColor]];
}
}
}
@end
class wxStaticTextCocoaImpl : public wxWidgetCocoaImpl
{
public:
wxStaticTextCocoaImpl( wxWindowMac* peer , WXWidget w , NSLineBreakMode lineBreak) : wxWidgetCocoaImpl(peer, w)
{
m_lineBreak = lineBreak;
}
virtual void SetLabel(const wxString& title, wxFontEncoding encoding) wxOVERRIDE
{
wxCFStringRef text( title , encoding );
NSMutableAttributedString *
attrstring = [[NSMutableAttributedString alloc] initWithString:text.AsNSString()];
DoSetAttrString(attrstring);
[attrstring release];
}
#if wxUSE_MARKUP
virtual void SetLabelMarkup( const wxString& markup) wxOVERRIDE
{
wxMarkupToAttrString toAttr(GetWXPeer(), markup);
DoSetAttrString(toAttr.GetNSAttributedString());
}
#endif // wxUSE_MARKUP
private:
void DoSetAttrString(NSMutableAttributedString *attrstring)
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineBreakMode:m_lineBreak];
int style = GetWXPeer()->GetWindowStyleFlag();
if (style & wxALIGN_CENTER_HORIZONTAL)
[paragraphStyle setAlignment: NSCenterTextAlignment];
else if (style & wxALIGN_RIGHT)
[paragraphStyle setAlignment: NSRightTextAlignment];
[attrstring addAttribute:NSParagraphStyleAttributeName
value:paragraphStyle
range:NSMakeRange(0, [attrstring length])];
NSCell* cell = [(wxNSStaticTextView *)GetWXWidget() cell];
[cell setAttributedStringValue:attrstring];
[paragraphStyle release];
}
NSLineBreakMode m_lineBreak;
};
wxSize wxStaticText::DoGetBestSize() const
{
return wxWindowMac::DoGetBestSize() ;
}
wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
wxWindowMac* WXUNUSED(parent),
wxWindowID WXUNUSED(id),
const wxString& WXUNUSED(label),
const wxPoint& pos,
const wxSize& size,
long style,
long WXUNUSED(extraStyle))
{
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxNSStaticTextView* v = [[wxNSStaticTextView alloc] initWithFrame:r];
[v setEditable:NO];
[v setDrawsBackground:NO];
[v setSelectable: NO];
[v setBezeled:NO];
[v setBordered:NO];
NSLineBreakMode linebreak = NSLineBreakByClipping;
if ( style & wxST_ELLIPSIZE_MASK )
{
if ( style & wxST_ELLIPSIZE_MIDDLE )
linebreak = NSLineBreakByTruncatingMiddle;
else if (style & wxST_ELLIPSIZE_END )
linebreak = NSLineBreakByTruncatingTail;
else if (style & wxST_ELLIPSIZE_START )
linebreak = NSLineBreakByTruncatingHead;
}
else
{
[[v cell] setWraps:YES];
}
wxWidgetCocoaImpl* c = new wxStaticTextCocoaImpl( wxpeer, v, linebreak );
return c;
}
#endif //if wxUSE_STATTEXT