--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/mac/carbon/bmpbuttn.cpp
+// Purpose: wxBitmapButton
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: bmpbuttn.cpp 54820 2008-07-29 20:04:11Z SC $
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_BMPBUTTON
+
+#include "wx/bmpbuttn.h"
+#include "wx/image.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/dcmemory.h"
+#endif
+
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxBitmap& bitmap,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ [v setBezelStyle:NSRegularSquareBezelStyle];
+
+ [v setButtonType:NSMomentaryPushInButton];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/button.mm
+// Purpose: wxButton
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: button.cpp 54845 2008-07-30 14:52:41Z SC $
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#include "wx/button.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/panel.h"
+ #include "wx/toplevel.h"
+ #include "wx/dcclient.h"
+#endif
+
+#include "wx/stockitem.h"
+
+#include "wx/osx/private.h"
+
+wxSize wxButton::DoGetBestSize() const
+{
+ if ( GetId() == wxID_HELP )
+ return wxSize( 20 , 20 ) ;
+
+ wxSize sz = GetDefaultSize() ;
+
+ switch (GetWindowVariant())
+ {
+ case wxWINDOW_VARIANT_NORMAL:
+ case wxWINDOW_VARIANT_LARGE:
+ sz.y = 20 ;
+ break;
+
+ case wxWINDOW_VARIANT_SMALL:
+ sz.y = 17 ;
+ break;
+
+ case wxWINDOW_VARIANT_MINI:
+ sz.y = 15 ;
+ break;
+
+ default:
+ break;
+ }
+
+#if wxOSX_USE_CARBON
+ Rect bestsize = { 0 , 0 , 0 , 0 } ;
+ m_peer->GetBestRect( &bestsize ) ;
+
+ int wBtn;
+ if ( EmptyRect( &bestsize ) || ( GetWindowStyle() & wxBU_EXACTFIT) )
+ {
+ Point bounds;
+
+ ControlFontStyleRec controlFont;
+ OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont );
+ verify_noerr( err );
+
+ wxCFStringRef str( m_label, GetFont().GetEncoding() );
+
+#if wxOSX_USE_ATSU_TEXT
+ SInt16 baseline;
+ if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
+ {
+ err = GetThemeTextDimensions(
+ (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")),
+ m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline );
+ verify_noerr( err );
+ }
+ else
+#endif
+ {
+ wxClientDC dc(const_cast<wxButton*>(this));
+ wxCoord width, height ;
+ dc.GetTextExtent( m_label , &width, &height);
+ bounds.h = width;
+ bounds.v = height;
+ }
+
+ wBtn = bounds.h + sz.y;
+ }
+ else
+ {
+ wBtn = bestsize.right - bestsize.left ;
+ // non 'normal' window variants don't return the correct height
+ // sz.y = bestsize.bottom - bestsize.top ;
+ }
+ if ((wBtn > sz.x) || ( GetWindowStyle() & wxBU_EXACTFIT))
+ sz.x = wBtn;
+#endif
+
+ return sz ;
+}
+
+wxSize wxButton::GetDefaultSize()
+{
+ int wBtn = 70 ;
+ int hBtn = 20 ;
+
+ return wxSize(wBtn, hBtn);
+}
+
+@implementation wxNSButton
+
+- (id)initWithFrame:(NSRect)frame
+{
+ [super initWithFrame:frame];
+ m_impl = NULL;
+ [self setTarget: self];
+ [self setAction: @selector(clickedAction:)];
+ return self;
+}
+
+- (void) clickedAction: (id) sender
+{
+ if ( m_impl )
+ {
+ wxButton* wxpeer = (wxButton*) m_impl->GetWXPeer();
+ if ( wxpeer )
+ wxpeer->HandleClicked(0);
+ }
+}
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation
+{
+ m_impl = theImplementation;
+}
+
+- (wxWidgetImpl*) implementation
+{
+ return m_impl;
+}
+
+- (BOOL) isFlipped
+{
+ return YES;
+}
+
+- (int) intValue
+{
+ switch ( [self state] )
+ {
+ case NSOnState:
+ return 1;
+ case NSMixedState:
+ return 2;
+ default:
+ return 0;
+ }
+}
+
+- (void) setIntValue: (int) v
+{
+ switch( v )
+ {
+ case 2:
+ [self setState:NSMixedState];
+ break;
+ case 1:
+ [self setState:NSOnState];
+ break;
+ default :
+ [self setState:NSOffState];
+ break;
+ }
+}
+
+@end
+
+
+wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ if ( id == wxID_HELP )
+ {
+ [v setBezelStyle:NSHelpButtonBezelStyle];
+ }
+ else
+ {
+ [v setBezelStyle:NSRoundedBezelStyle];
+ }
+
+ [v setButtonType:NSMomentaryPushInButton];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+/*
+ OSStatus err;
+ Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
+ wxMacControl* peer = new wxMacControl(wxpeer) ;
+ if ( id == wxID_HELP )
+ {
+ ControlButtonContentInfo info ;
+ info.contentType = kControlContentIconRef ;
+ GetIconRef(kOnSystemDisk, kSystemIconsCreator, kHelpIcon, &info.u.iconRef);
+ err = CreateRoundButtonControl(
+ MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
+ &bounds, kControlRoundButtonNormalSize,
+ &info, peer->GetControlRefAddr() );
+ }
+ else if ( label.Find('\n' ) == wxNOT_FOUND && label.Find('\r' ) == wxNOT_FOUND)
+ {
+ // Button height is static in Mac, can't be changed, so we need to force it here
+ int maxHeight;
+ switch (wxpeer->GetWindowVariant() )
+ {
+ case wxWINDOW_VARIANT_NORMAL:
+ case wxWINDOW_VARIANT_LARGE:
+ maxHeight = 20 ;
+ break;
+ case wxWINDOW_VARIANT_SMALL:
+ maxHeight = 17;
+ case wxWINDOW_VARIANT_MINI:
+ maxHeight = 15;
+ default:
+ break;
+ }
+ bounds.bottom = bounds.top + maxHeight ;
+ wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight ));
+ err = CreatePushButtonControl(
+ MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
+ &bounds, CFSTR(""), peer->GetControlRefAddr() );
+ }
+ else
+ {
+ ControlButtonContentInfo info ;
+ info.contentType = kControlNoContent ;
+ err = CreateBevelButtonControl(
+ MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds, CFSTR(""),
+ kControlBevelButtonLargeBevel, kControlBehaviorPushbutton,
+ &info, 0, 0, 0, peer->GetControlRefAddr() );
+ }
+ verify_noerr( err );
+ return peer;
+ */
+}
+
+void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault )
+{
+ [m_osxView setKeyEquivalent: isDefault ? @"\r" : nil ];
+// SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) isDefault ) ;
+}
+
+void wxWidgetCocoaImpl::PerformClick()
+{
+}
+
+// TODO for the disclosure button : NSDisclosureBezelStyle and the button type to NSOnOffButton.
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/checkbox.mm
+// Purpose: wxCheckBox
+// Author: Stefan Csomor
+// Modified by:
+// Created: 2008-08-20
+// RCS-ID: $Id: checkbox.mm 54129 2008-06-11 19:30:52Z SC $
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_CHECKBOX
+
+#include "wx/checkbox.h"
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateCheckBox( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ [v setButtonType:NSSwitchButton];
+ if (style & wxCHK_3STATE)
+ [v setAllowsMixedState:YES];
+
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/notebook.mm
+// Purpose: implementation of wxNotebook
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: notebmac.cpp 55079 2008-08-13 14:56:42Z PC $
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_NOTEBOOK
+
+#include "wx/notebook.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/string.h"
+ #include "wx/log.h"
+ #include "wx/app.h"
+ #include "wx/image.h"
+#endif
+
+#include "wx/string.h"
+#include "wx/imaglist.h"
+#include "wx/osx/private.h"
+
+@interface wxNSTabView : NSTabView
+{
+ wxWidgetImpl* m_impl;
+}
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation;
+- (wxWidgetImpl*) implementation;
+- (BOOL) isFlipped;
+- (int) intValue;
+- (void) setIntValue:(int) v;
+
+@end
+
+@implementation wxNSTabView
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation
+{
+ m_impl = theImplementation;
+}
+
+- (wxWidgetImpl*) implementation
+{
+ return m_impl;
+}
+
+- (BOOL) isFlipped
+{
+ return YES;
+}
+
+- (int) intValue
+{
+ NSTabViewItem* selectedItem = [self selectedTabViewItem];
+ if ( selectedItem == nil )
+ return 0;
+ else
+ return [self indexOfTabViewItem:selectedItem]+1;
+}
+
+- (void) setIntValue:(int) v
+{
+ [self selectTabViewItemAtIndex:(v-1)];
+}
+
+@end
+
+/*
+#if 0
+ Rect bounds = wxMacGetBoundsForControl( this, pos, size );
+
+ if ( bounds.right <= bounds.left )
+ bounds.right = bounds.left + 100;
+ if ( bounds.bottom <= bounds.top )
+ bounds.bottom = bounds.top + 100;
+
+ UInt16 tabstyle = kControlTabDirectionNorth;
+ if ( HasFlag(wxBK_LEFT) )
+ tabstyle = kControlTabDirectionWest;
+ else if ( HasFlag( wxBK_RIGHT ) )
+ tabstyle = kControlTabDirectionEast;
+ else if ( HasFlag( wxBK_BOTTOM ) )
+ tabstyle = kControlTabDirectionSouth;
+
+ ControlTabSize tabsize;
+ switch (GetWindowVariant())
+ {
+ case wxWINDOW_VARIANT_MINI:
+ tabsize = 3 ;
+ break;
+
+ case wxWINDOW_VARIANT_SMALL:
+ tabsize = kControlTabSizeSmall;
+ break;
+
+ default:
+ tabsize = kControlTabSizeLarge;
+ break;
+ }
+
+ m_peer = new wxMacControl( this );
+ OSStatus err = CreateTabsControl(
+ MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
+ tabsize, tabstyle, 0, NULL, m_peer->GetControlRefAddr() );
+ verify_noerr( err );
+#endif
+*/
+wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ /* if ( bounds.right <= bounds.left )
+ bounds.right = bounds.left + 100;
+ if ( bounds.bottom <= bounds.top )
+ bounds.bottom = bounds.top + 100;
+ */
+
+ NSTabViewType tabstyle = NSTopTabsBezelBorder;
+ if ( style & wxBK_LEFT )
+ tabstyle = NSLeftTabsBezelBorder;
+ else if ( style & wxBK_RIGHT )
+ tabstyle = NSRightTabsBezelBorder;
+ else if ( style & wxBK_BOTTOM )
+ tabstyle = NSBottomTabsBezelBorder;
+
+ wxNSTabView* v = [[wxNSTabView alloc] initWithFrame:r];
+ [sv addSubview:v];
+ [v setTabViewType:tabstyle];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+void wxWidgetCocoaImpl::SetupTabs( const wxNotebook& notebook)
+{
+ int pcount = notebook.GetPageCount();
+ int cocoacount = [ (wxNSTabView*) m_osxView numberOfTabViewItems ];
+
+ if ( pcount > cocoacount )
+ {
+ for ( int i = cocoacount ; i < pcount ; ++i )
+ {
+ NSTabViewItem* item = [[NSTabViewItem alloc] init];
+ [(wxNSTabView*) m_osxView addTabViewItem:item];
+ [item release];
+ }
+ }
+ else if ( pcount < cocoacount )
+ {
+ for ( int i = cocoacount -1 ; i >= pcount ; --i )
+ {
+ NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
+ [(wxNSTabView*) m_osxView removeTabViewItem:item];
+ }
+ }
+
+ for ( int i = 0 ; i < pcount ; ++i )
+ {
+ wxNotebookPage* page = notebook.GetPage(i);
+ NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
+ [item setLabel:wxCFStringRef( page->GetLabel() , notebook.GetFont().GetEncoding() ).AsNSString()];
+ }
+/*
+ SetMaximum( GetPageCount() ) ;
+
+ wxNotebookPage *page;
+ ControlTabInfoRecV1 info;
+
+ const size_t countPages = GetPageCount();
+ for (size_t ii = 0; ii < countPages; ii++)
+ {
+ page = (wxNotebookPage*) notebook->GetPage[ii];
+ info.version = kControlTabInfoVersionOne;
+ info.iconSuiteID = 0;
+ wxCFStringRef cflabel( page->GetLabel(), GetFont().GetEncoding() ) ;
+ info.name = cflabel ;
+ SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
+
+ if ( GetImageList() && GetPageImage(ii) >= 0 )
+ {
+ const wxBitmap bmap = GetImageList()->GetBitmap( GetPageImage( ii ) ) ;
+ if ( bmap.Ok() )
+ {
+ ControlButtonContentInfo info ;
+
+ wxMacCreateBitmapButton( &info, bmap ) ;
+
+ OSStatus err = SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
+ if ( err != noErr )
+ {
+ wxFAIL_MSG("Error when setting icon on tab");
+ }
+
+ wxMacReleaseBitmapButton( &info ) ;
+ }
+ }
+ SetTabEnabled( ii + 1, true ) ;
+ }
+*/
+}
+
+#endif
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/radiobut.mm
+// Purpose: wxRadioButton
+// Author: Stefan Csomor
+// Modified by: JS Lair (99/11/15) adding the cyclic group notion for radiobox
+// Created: ??/??/98
+// RCS-ID: $Id: radiobut.cpp 54129 2008-06-11 19:30:52Z SC $
+// Copyright: (c) AUTHOR
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_RADIOBTN
+
+#include "wx/radiobut.h"
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateRadioButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ [v setButtonType:NSRadioButton];
+
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: statbox.cpp
+// Purpose: wxStaticBox
+// Author: Stefan Csomor
+// Modified by:
+// Created: 1998-01-01
+// RCS-ID: $Id: statbox.cpp 54129 2008-06-11 19:30:52Z SC $
+// Copyright: (c) Stefan Csomor
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#if wxUSE_STATBOX
+
+#include "wx/statbox.h"
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif // wxUSE_STATBOX
+
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/statline.mm
+// Purpose: wxStaticLine class
+// Author: Stefan Csomor
+// Created: 28.06.99
+// Version: $Id: statline.mm 54129 2008-06-11 19:30:52Z SC $
+// Copyright: (c) 2008 Stefan Csomor
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#if wxUSE_STATLINE
+
+#include "wx/statline.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/statbox.h"
+#endif
+
+#include "wx/osx/private.h"
+
+@implementation wxNSBox
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation
+{
+ m_impl = theImplementation;
+}
+
+- (wxWidgetImpl*) implementation
+{
+ return m_impl;
+}
+
+- (BOOL) isFlipped
+{
+ return YES;
+}
+
+@end
+
+wxWidgetImplType* wxWidgetImpl::CreateStaticLine( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif //wxUSE_STATLINE
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/stattext.mm
+// Purpose: wxStaticText
+// Author: Stefan Csomor
+// Modified by:
+// Created: 04/01/98
+// RCS-ID: $Id: stattext.cpp 54845 2008-07-30 14:52:41Z SC $
+// 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/notebook.h"
+#include "wx/tabctrl.h"
+
+#include "wx/osx/private.h"
+
+#include <stdio.h>
+
+wxSize wxStaticText::DoGetBestSize() const
+{
+ Point bounds;
+#if wxOSX_USE_CARBON
+ Rect bestsize = { 0 , 0 , 0 , 0 } ;
+
+ // try the built-in best size if available
+ Boolean former = m_peer->GetData<Boolean>( kControlStaticTextIsMultilineTag);
+ m_peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 );
+ m_peer->GetBestRect( &bestsize ) ;
+ m_peer->SetData( kControlStaticTextIsMultilineTag, former );
+ if ( !EmptyRect( &bestsize ) )
+ {
+ bounds.h = bestsize.right - bestsize.left ;
+ bounds.v = bestsize.bottom - bestsize.top ;
+ }
+ else
+#endif
+ {
+#if wxOSX_USE_CARBON
+ ControlFontStyleRec controlFont;
+ OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont );
+ verify_noerr( err );
+
+ wxCFStringRef str( m_label, GetFont().GetEncoding() );
+
+#if wxOSX_USE_ATSU_TEXT
+ SInt16 baseline;
+ if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
+ {
+ err = GetThemeTextDimensions(
+ (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")),
+ m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline );
+ verify_noerr( err );
+ }
+ else
+#endif
+#endif
+ {
+ wxClientDC dc(const_cast<wxStaticText*>(this));
+ wxCoord width, height ;
+ dc.GetTextExtent( m_label , &width, &height);
+ bounds.h = width;
+ bounds.v = height;
+ }
+
+ if ( m_label.empty() )
+ bounds.h = 0;
+ }
+ bounds.h += MacGetLeftBorderSize() + MacGetRightBorderSize();
+ bounds.v += MacGetTopBorderSize() + MacGetBottomBorderSize();
+
+ return wxSize( bounds.h, bounds.v );
+}
+
+// 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
+*/
+
+@interface wxNSTextField : NSTextField
+{
+ wxWidgetImpl* m_impl;
+}
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation;
+- (wxWidgetImpl*) implementation;
+- (BOOL) isFlipped;
+
+@end
+
+@implementation wxNSTextField
+
+- (void)setImplementation: (wxWidgetImpl *) theImplementation
+{
+ m_impl = theImplementation;
+}
+
+- (wxWidgetImpl*) implementation
+{
+ return m_impl;
+}
+
+- (BOOL) isFlipped
+{
+ return YES;
+}
+
+// use our common calls
+- (void) setTitle:(NSString *) title
+{
+ [self setStringValue: title];
+}
+
+@end
+
+
+wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSTextField* v = [[wxNSTextField alloc] initWithFrame:r];
+ [sv addSubview:v];
+
+ [v setBezeled:NO];
+ [v setEditable:NO];
+ [v setDrawsBackground:NO];
+
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+/*
+ Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
+
+ 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 ) )
+ {
+ TruncCode tCode = truncEnd;
+ if ( style & wxST_ELLIPSIZE_MIDDLE )
+ tCode = truncMiddle;
+
+ err = peer->SetData( kControlStaticTextTruncTag, tCode );
+ err = peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 );
+ }
+ return peer;
+ */
+}
+
+#endif //if wxUSE_STATTEXT
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/osx/cocoa/tglbtn.mm
+// Purpose: Definition of the wxToggleButton class, which implements a
+// toggle button under wxMac.
+// Author: Stefan Csomor
+// Modified by:
+// Created: 08.02.01
+// RCS-ID: $Id: tglbtn.cpp 54129 2008-06-11 19:30:52Z SC $
+// Copyright: (c) Stefan Csomor
+// License: wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declatations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#if wxUSE_TOGGLEBTN
+
+#include "wx/tglbtn.h"
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ [v setBezelStyle:NSRoundedBezelStyle];
+ [v setButtonType:NSOnOffButton];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+wxWidgetImplType* wxWidgetImpl::CreateBitmapToggleButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxBitmap& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
+{
+ NSView* sv = (wxpeer->GetParent()->GetHandle() );
+
+ NSRect r = wxToNSRect( sv, wxRect( pos, size) );
+ // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
+ wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
+
+ [v setBezelStyle:NSRegularSquareBezelStyle];
+ [v setButtonType:NSOnOffButton];
+ [sv addSubview:v];
+ wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+ [v setImplementation:c];
+ return c;
+}
+
+#endif // wxUSE_TOGGLEBTN
+