#include "wx/wx.h"
#endif
+#include "wx/app.h"
#include "wx/mac/uma.h"
#include "wx/geometry.h"
const wxString& shortHelp,
const wxString& longHelp );
- wxToolBarTool(wxToolBar *tbar, wxControl *control)
- : wxToolBarToolBase(tbar, control)
+ wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label)
+ : wxToolBarToolBase(tbar, control, label)
{
Init();
if (control != NULL)
virtual ~wxToolBarTool()
{
ClearControl();
-
-#if wxMAC_USE_NATIVE_TOOLBAR
- if ( m_toolbarItemRef )
- CFRelease( m_toolbarItemRef );
-#endif
}
WXWidget GetControlHandle()
m_control = NULL;
if ( m_controlHandle )
{
- DisposeControl( m_controlHandle );
+ if ( !IsControl() )
+ DisposeControl( m_controlHandle );
+ else
+ {
+ // the embedded control is not under the responsibility of the tool
+ }
m_controlHandle = NULL ;
}
#if wxMAC_USE_NATIVE_TOOLBAR
- m_toolbarItemRef = NULL;
+ if ( m_toolbarItemRef )
+ {
+ CFIndex count = CFGetRetainCount( m_toolbarItemRef ) ;
+ wxASSERT_MSG( count == 1 , wxT("Reference Count of native tool was not 1 in wxToolBarTool destructor") );
+ wxTheApp->MacAddToAutorelease(m_toolbarItemRef);
+ CFRelease(m_toolbarItemRef);
+ m_toolbarItemRef = NULL;
+ }
#endif
}
m_toolbarItemRef = ref;
if ( m_toolbarItemRef )
{
+ wxFont f;
+ wxFontEncoding enc;
+ if ( GetToolBar() )
+ f = GetToolBar()->GetFont();
+ if ( f.IsOk() )
+ enc = f.GetEncoding();
+ else
+ enc = wxFont::GetDefaultEncoding();
+
HIToolbarItemSetHelpText(
m_toolbarItemRef,
- wxMacCFStringHolder( GetShortHelp(), GetToolBar()->GetFont().GetEncoding() ),
- wxMacCFStringHolder( GetLongHelp(), GetToolBar()->GetFont().GetEncoding() ) );
+ wxMacCFStringHolder( GetShortHelp(), enc ),
+ wxMacCFStringHolder( GetLongHelp(), enc ) );
}
}
m_x = position.x;
m_y = position.y;
- int x, y;
- x = y = 0;
int mac_x = position.x;
int mac_y = position.y;
}
else if ( IsControl() )
{
- GetControl()->Move( position );
+ // embedded native controls are moved by the OS
+#if wxMAC_USE_NATIVE_TOOLBAR
+ if ( ((wxToolBar*)GetToolBar())->MacWantsNativeToolbar() == false )
+#endif
+ {
+ GetControl()->Move( position );
+ }
}
else
{
void wxToolBarTool::UpdateToggleImage( bool toggle )
{
-#if wxMAC_USE_NATIVE_TOOLBAR
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4
-#define kHIToolbarItemSelected (1 << 7)
-#endif
-
- // FIXME: this should be a OSX v10.4 runtime check
- if (m_toolbarItemRef != NULL)
- {
- OptionBits addAttrs, removeAttrs;
- OSStatus result;
-
- if (toggle)
- {
- addAttrs = kHIToolbarItemSelected;
- removeAttrs = kHIToolbarItemNoAttributes;
- }
- else
- {
- addAttrs = kHIToolbarItemNoAttributes;
- removeAttrs = kHIToolbarItemSelected;
- }
-
- result = HIToolbarItemChangeAttributes( m_toolbarItemRef, addAttrs, removeAttrs );
- }
-#endif
-
#ifdef __WXMAC_OSX__
if ( toggle )
{
wxMemoryDC dc;
dc.SelectObject( bmp );
- dc.SetPen( wxNullPen );
- dc.SetBackground( *wxWHITE );
+ dc.SetPen( wxPen(*wxBLACK) );
+ dc.SetBrush( wxBrush( *wxLIGHT_GREY ));
dc.DrawRectangle( 0, 0, w, h );
dc.DrawBitmap( m_bmpNormal, 0, 0, true );
dc.SelectObject( wxNullBitmap );
ControlButtonContentInfo info;
- wxMacCreateBitmapButton( &info, bmp );
+ wxMacCreateBitmapButton( &info, bmp, kControlContentIconRef );
SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info );
+#if wxMAC_USE_NATIVE_TOOLBAR
+ if (m_toolbarItemRef != NULL)
+ {
+ HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef );
+ }
+#endif
wxMacReleaseBitmapButton( &info );
}
else
{
ControlButtonContentInfo info;
- wxMacCreateBitmapButton( &info, m_bmpNormal );
+ wxMacCreateBitmapButton( &info, m_bmpNormal, kControlContentIconRef );
SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info );
+#if wxMAC_USE_NATIVE_TOOLBAR
+ if (m_toolbarItemRef != NULL)
+ {
+ HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef );
+ }
+#endif
wxMacReleaseBitmapButton( &info );
}
clientData, shortHelp, longHelp );
}
-wxToolBarToolBase * wxToolBar::CreateTool( wxControl *control )
+wxToolBarToolBase *
+wxToolBar::CreateTool(wxControl *control, const wxString& label)
{
- return new wxToolBarTool( this, control );
+ return new wxToolBarTool(this, control, label);
}
void wxToolBar::Init()
#endif
}
-#define kControlToolbarItemClassID CFSTR( "org.wxwidgets.controltoolbaritem" )
+#define kControlToolbarItemClassID CFSTR( "org.wxwidgets.controltoolbaritem" )
-const EventTypeSpec kEvents[] =
+const EventTypeSpec kEvents[] =
{
- { kEventClassHIObject, kEventHIObjectConstruct },
- { kEventClassHIObject, kEventHIObjectInitialize },
- { kEventClassHIObject, kEventHIObjectDestruct },
-
- { kEventClassToolbarItem, kEventToolbarItemCreateCustomView }
+ { kEventClassHIObject, kEventHIObjectConstruct },
+ { kEventClassHIObject, kEventHIObjectInitialize },
+ { kEventClassHIObject, kEventHIObjectDestruct },
+
+ { kEventClassToolbarItem, kEventToolbarItemCreateCustomView }
};
-const EventTypeSpec kViewEvents[] =
-{
- { kEventClassControl, kEventControlGetSizeConstraints }
+const EventTypeSpec kViewEvents[] =
+{
+ { kEventClassControl, kEventControlGetSizeConstraints }
};
-struct ControlToolbarItem
-{
- HIToolbarItemRef toolbarItem;
+struct ControlToolbarItem
+{
+ HIToolbarItemRef toolbarItem;
HIViewRef viewRef;
wxSize lastValidSize ;
-};
+};
static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData )
{
- OSStatus result = eventNotHandledErr;
- ControlToolbarItem* object = (ControlToolbarItem*)inUserData;
-
- switch ( GetEventClass( inEvent ) )
- {
- case kEventClassHIObject:
- switch ( GetEventKind( inEvent ) )
- {
- case kEventHIObjectConstruct:
- {
- HIObjectRef toolbarItem;
- ControlToolbarItem* item;
-
- GetEventParameter( inEvent, kEventParamHIObjectInstance, typeHIObjectRef, NULL,
+ OSStatus result = eventNotHandledErr;
+ ControlToolbarItem* object = (ControlToolbarItem*)inUserData;
+
+ switch ( GetEventClass( inEvent ) )
+ {
+ case kEventClassHIObject:
+ switch ( GetEventKind( inEvent ) )
+ {
+ case kEventHIObjectConstruct:
+ {
+ HIObjectRef toolbarItem;
+ ControlToolbarItem* item;
+
+ GetEventParameter( inEvent, kEventParamHIObjectInstance, typeHIObjectRef, NULL,
sizeof( HIObjectRef ), NULL, &toolbarItem );
-
+
item = (ControlToolbarItem*) malloc(sizeof(ControlToolbarItem)) ;
item->toolbarItem = toolbarItem ;
item->viewRef = NULL ;
-
- SetEventParameter( inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof( void * ), &item );
-
+
+ SetEventParameter( inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof( void * ), &item );
+
result = noErr ;
- }
- break;
-
+ }
+ break;
+
case kEventHIObjectInitialize:
result = CallNextEventHandler( inCallRef, inEvent );
- if ( result == noErr )
+ if ( result == noErr )
{
CFDataRef data;
GetEventParameter( inEvent, kEventParamToolbarItemConfigData, typeCFTypeRef, NULL,
sizeof( CFTypeRef ), NULL, &data );
-
+
HIViewRef viewRef ;
-
+
wxASSERT_MSG( CFDataGetLength( data ) == sizeof( viewRef ) , wxT("Illegal Data passed") ) ;
memcpy( &viewRef , CFDataGetBytePtr( data ) , sizeof( viewRef ) ) ;
-
+
object->viewRef = (HIViewRef) viewRef ;
- result = noErr ;
- }
+ result = noErr ;
+ }
+ break;
+
+ case kEventHIObjectDestruct:
+ {
+ // we've increased the ref count when creating this, so we decrease manually again in case
+ // it was never really installed and deinstalled
+ HIViewRef viewRef = object->viewRef ;
+ if( viewRef && IsValidControlHandle( viewRef) )
+ {
+ CFIndex count = CFGetRetainCount( viewRef ) ;
+ if ( count >= 1 )
+ CFRelease( viewRef ) ;
+ }
+ free( object ) ;
+ result = noErr;
+ }
break;
+ }
+ break;
- case kEventHIObjectDestruct:
- free( object ) ;
- result = noErr;
- break;
- }
- break;
-
- case kEventClassToolbarItem:
- switch ( GetEventKind( inEvent ) )
- {
- case kEventToolbarItemCreateCustomView:
- {
+ case kEventClassToolbarItem:
+ switch ( GetEventKind( inEvent ) )
+ {
+ case kEventToolbarItemCreateCustomView:
+ {
HIViewRef viewRef = object->viewRef ;
HIViewRemoveFromSuperview( viewRef ) ;
HIViewSetVisible(viewRef, true) ;
InstallEventHandler( GetControlEventTarget( viewRef ), ControlToolbarItemHandler,
GetEventTypeCount( kViewEvents ), kViewEvents, object, NULL );
-
+
result = SetEventParameter( inEvent, kEventParamControlRef, typeControlRef, sizeof( HIViewRef ), &viewRef );
- }
- break;
- }
- break;
-
- case kEventClassControl:
- switch ( GetEventKind( inEvent ) )
- {
- case kEventControlGetSizeConstraints:
- {
+ }
+ break;
+ }
+ break;
+
+ case kEventClassControl:
+ switch ( GetEventKind( inEvent ) )
+ {
+ case kEventControlGetSizeConstraints:
+ {
wxWindow* wxwindow = wxFindControlFromMacControl(object->viewRef ) ;
if ( wxwindow )
{
object->lastValidSize = sz ;
else
sz = object->lastValidSize ;
-
+
HISize min, max;
min.width = max.width = sz.x ;
min.height = max.height = sz.y ;
-
+
result = SetEventParameter( inEvent, kEventParamMinimumSize, typeHISize,
sizeof( HISize ), &min );
-
+
result = SetEventParameter( inEvent, kEventParamMaximumSize, typeHISize,
sizeof( HISize ), &max );
result = noErr ;
}
- }
- break;
- }
- break;
- }
-
- return result;
+ }
+ break;
+ }
+ break;
+ }
+
+ return result;
}
void RegisterControlToolbarItemClass()
{
- static bool sRegistered;
-
- if ( !sRegistered )
- {
- HIObjectRegisterSubclass( kControlToolbarItemClassID, kHIToolbarItemClassID, 0,
- ControlToolbarItemHandler, GetEventTypeCount( kEvents ), kEvents, 0, NULL );
-
- sRegistered = true;
- }
+ static bool sRegistered;
+
+ if ( !sRegistered )
+ {
+ HIObjectRegisterSubclass( kControlToolbarItemClassID, kHIToolbarItemClassID, 0,
+ ControlToolbarItemHandler, GetEventTypeCount( kEvents ), kEvents, 0, NULL );
+
+ sRegistered = true;
+ }
}
HIToolbarItemRef CreateControlToolbarItem(CFStringRef inIdentifier, CFTypeRef inConfigData)
{
- RegisterControlToolbarItemClass();
-
- OSStatus err;
- EventRef event;
- UInt32 options = kHIToolbarItemAllowDuplicates;
- HIToolbarItemRef result = NULL;
-
- err = CreateEvent( NULL, kEventClassHIObject, kEventHIObjectInitialize, GetCurrentEventTime(), 0, &event );
- require_noerr( err, CantCreateEvent );
-
- SetEventParameter( event, kEventParamAttributes, typeUInt32, sizeof( UInt32 ), &options );
- SetEventParameter( event, kEventParamToolbarItemIdentifier, typeCFStringRef, sizeof( CFStringRef ), &inIdentifier );
-
- if ( inConfigData )
- SetEventParameter( event, kEventParamToolbarItemConfigData, typeCFTypeRef, sizeof( CFTypeRef ), &inConfigData );
-
- err = HIObjectCreate( kControlToolbarItemClassID, event, (HIObjectRef*)&result );
- check_noerr( err );
-
- ReleaseEvent( event );
-CantCreateEvent :
- return result ;
+ RegisterControlToolbarItemClass();
+
+ OSStatus err;
+ EventRef event;
+ UInt32 options = kHIToolbarItemAllowDuplicates;
+ HIToolbarItemRef result = NULL;
+
+ err = CreateEvent( NULL, kEventClassHIObject, kEventHIObjectInitialize, GetCurrentEventTime(), 0, &event );
+ require_noerr( err, CantCreateEvent );
+
+ SetEventParameter( event, kEventParamAttributes, typeUInt32, sizeof( UInt32 ), &options );
+ SetEventParameter( event, kEventParamToolbarItemIdentifier, typeCFStringRef, sizeof( CFStringRef ), &inIdentifier );
+
+ if ( inConfigData )
+ SetEventParameter( event, kEventParamToolbarItemConfigData, typeCFTypeRef, sizeof( CFTypeRef ), &inConfigData );
+
+ err = HIObjectCreate( kControlToolbarItemClassID, event, (HIObjectRef*)&result );
+ check_noerr( err );
+
+ ReleaseEvent( event );
+CantCreateEvent :
+ return result ;
}
+#if wxMAC_USE_NATIVE_TOOLBAR
static const EventTypeSpec kToolbarEvents[] =
{
- { kEventClassToolbar, kEventToolbarGetDefaultIdentifiers },
- { kEventClassToolbar, kEventToolbarGetAllowedIdentifiers },
- { kEventClassToolbar, kEventToolbarCreateItemWithIdentifier },
+ { kEventClassToolbar, kEventToolbarGetDefaultIdentifiers },
+ { kEventClassToolbar, kEventToolbarGetAllowedIdentifiers },
+ { kEventClassToolbar, kEventToolbarCreateItemWithIdentifier },
};
static OSStatus ToolbarDelegateHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData )
{
- OSStatus result = eventNotHandledErr;
- wxToolBar* toolbar = (wxToolBar*) inUserData ;
- CFMutableArrayRef array;
+ OSStatus result = eventNotHandledErr;
+ // Not yet needed
+ // wxToolBar* toolbar = (wxToolBar*) inUserData ;
+ CFMutableArrayRef array;
- switch ( GetEventKind( inEvent ) )
- {
- case kEventToolbarGetDefaultIdentifiers:
+ switch ( GetEventKind( inEvent ) )
+ {
+ case kEventToolbarGetDefaultIdentifiers:
{
GetEventParameter( inEvent, kEventParamMutableArray, typeCFMutableArrayRef, NULL,
- sizeof( CFMutableArrayRef ), NULL, &array );
+ sizeof( CFMutableArrayRef ), NULL, &array );
// not implemented yet
// GetToolbarDefaultItems( array );
result = noErr;
}
- break;
-
- case kEventToolbarGetAllowedIdentifiers:
+ break;
+
+ case kEventToolbarGetAllowedIdentifiers:
{
GetEventParameter( inEvent, kEventParamMutableArray, typeCFMutableArrayRef, NULL,
- sizeof( CFMutableArrayRef ), NULL, &array );
+ sizeof( CFMutableArrayRef ), NULL, &array );
// not implemented yet
// GetToolbarAllowedItems( array );
result = noErr;
}
- break;
- case kEventToolbarCreateItemWithIdentifier:
- {
- HIToolbarItemRef item = NULL;
- CFTypeRef data = NULL;
+ break;
+ case kEventToolbarCreateItemWithIdentifier:
+ {
+ HIToolbarItemRef item = NULL;
+ CFTypeRef data = NULL;
CFStringRef identifier = NULL ;
-
- GetEventParameter( inEvent, kEventParamToolbarItemIdentifier, typeCFStringRef, NULL,
- sizeof( CFStringRef ), NULL, &identifier );
-
- GetEventParameter( inEvent, kEventParamToolbarItemConfigData, typeCFTypeRef, NULL,
- sizeof( CFTypeRef ), NULL, &data );
-
+
+ GetEventParameter( inEvent, kEventParamToolbarItemIdentifier, typeCFStringRef, NULL,
+ sizeof( CFStringRef ), NULL, &identifier );
+
+ GetEventParameter( inEvent, kEventParamToolbarItemConfigData, typeCFTypeRef, NULL,
+ sizeof( CFTypeRef ), NULL, &data );
+
if ( CFStringCompare( kControlToolbarItemClassID, identifier, kCFCompareBackwards ) == kCFCompareEqualTo )
{
item = CreateControlToolbarItem( kControlToolbarItemClassID, data );
sizeof( HIToolbarItemRef ), &item );
result = noErr;
}
- }
-
- }
- break;
+ }
+
+ }
+ break;
}
return result ;
}
+#endif // wxMAC_USE_NATIVE_TOOLBAR
// also for the toolbar we have the dual implementation:
// only when MacInstallNativeToolbar is called is the native toolbar set as the window toolbar
if ( !wxToolBarBase::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
return false;
+ FixupStyle();
+
OSStatus err = noErr;
#if wxMAC_USE_NATIVE_TOOLBAR
if (m_macHIToolbarRef != NULL)
{
- InstallEventHandler( HIObjectGetEventTarget((HIToolbarRef)m_macHIToolbarRef ), ToolbarDelegateHandler,
- GetEventTypeCount( kToolbarEvents ), kToolbarEvents, this, NULL );
+ InstallEventHandler( HIObjectGetEventTarget((HIToolbarRef)m_macHIToolbarRef ), ToolbarDelegateHandler,
+ GetEventTypeCount( kToolbarEvents ), kToolbarEvents, this, NULL );
HIToolbarDisplayMode mode = kHIToolbarDisplayModeDefault;
HIToolbarDisplaySize displaySize = kHIToolbarDisplaySizeSmall;
HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode );
HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize );
}
-#endif
+#endif // wxMAC_USE_NATIVE_TOOLBAR
return (err == noErr);
}
if (m_macUsesNativeToolbar)
MacInstallNativeToolbar( false );
+ CFIndex count = CFGetRetainCount( m_macHIToolbarRef ) ;
+ wxASSERT_MSG( count == 1 , wxT("Reference Count of native control was not 1 in wxToolBar destructor") );
+
CFRelease( (HIToolbarRef)m_macHIToolbarRef );
m_macHIToolbarRef = NULL;
}
bool lastIsRadio = false;
bool curIsRadio = false;
- bool setChoiceInGroup = false;
#if wxMAC_USE_NATIVE_TOOLBAR
CFIndex currentPosition = 0;
{
if ( tool->IsToggled() )
DoToggleTool( tool, true );
-
- setChoiceInGroup = false;
}
else
{
if ( tool->Toggle( true ) )
{
DoToggleTool( tool, true );
- setChoiceInGroup = true;
}
}
else if ( tool->IsToggled() )
InvalidateBestSize();
#endif
- SetBestFittingSize();
+ SetInitialSize();
return true;
}
#endif
}
+void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
+{
+ wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, FindById(id));
+ if ( tool )
+ {
+ wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools."));
+
+ tool->SetNormalBitmap(bitmap);
+
+ // a side-effect of the UpdateToggleImage function is that it always changes the bitmap used on the button.
+ tool->UpdateToggleImage( tool->CanBeToggled() && tool->IsToggled() );
+ }
+}
+
+void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap )
+{
+ wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, FindById(id));
+ if ( tool )
+ {
+ wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools."));
+
+ tool->SetDisabledBitmap(bitmap);
+
+ // TODO: what to do for this one?
+ }
+}
+
wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const
{
wxToolBarTool *tool;
Rect toolrect = { 0, 0, toolSize.y, toolSize.x };
ControlRef controlHandle = NULL;
OSStatus err = 0;
+ tool->Attach( this );
+
+#if wxMAC_USE_NATIVE_TOOLBAR
+ HIToolbarItemRef item;
+#endif
switch (tool->GetStyle())
{
else
toolrect.right = toolSize.x;
-#ifdef __WXMAC_OSX__
// in flat style we need a visual separator
#if wxMAC_USE_NATIVE_TOOLBAR
- HIToolbarItemRef item;
err = HIToolbarItemCreate(
kHIToolbarSeparatorIdentifier,
kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates,
&item );
if (err == noErr)
tool->SetToolbarItemRef( item );
-#endif
+#endif // wxMAC_USE_NATIVE_TOOLBAR
CreateSeparatorControl( window, &toolrect, &controlHandle );
tool->SetControlHandle( controlHandle );
-#endif
}
break;
}
#if wxMAC_USE_NATIVE_TOOLBAR
- HIToolbarItemRef item;
wxString labelStr = wxString::Format(wxT("%xd"), (int)tool);
err = HIToolbarItemCreate(
wxMacCFStringHolder(labelStr, wxFont::GetDefaultEncoding()),
InstallEventHandler(
HIObjectGetEventTarget(item), GetwxMacToolBarEventHandlerUPP(),
GetEventTypeCount(toolBarEventList), toolBarEventList, tool, NULL );
- HIToolbarItemSetLabel( item, wxMacCFStringHolder(tool->GetLabel(), m_font.GetEncoding()) );
+
HIToolbarItemSetIconRef( item, info.u.iconRef );
HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction );
tool->SetToolbarItemRef( item );
}
-#endif
+#endif // wxMAC_USE_NATIVE_TOOLBAR
wxMacReleaseBitmapButton( &info );
#if wxMAC_USE_NATIVE_TOOLBAR
{
- wxASSERT( tool->GetControl() != NULL );
+ wxASSERT( tool->GetControl() != NULL );
HIToolbarItemRef item;
HIViewRef viewRef = (HIViewRef) tool->GetControl()->GetHandle() ;
+ // as this control now is part of both the wxToolBar children and the native toolbar, we have to increase the
+ // reference count to make sure we are not dealing with zombie controls after the native toolbar has released its views
+ CFRetain( viewRef ) ;
CFDataRef data = CFDataCreate( kCFAllocatorDefault , (UInt8*) &viewRef , sizeof(viewRef) ) ;
- err = HIToolbarCreateItemWithIdentifier((HIToolbarRef) m_macHIToolbarRef,kControlToolbarItemClassID,
- data , &item ) ;
+ err = HIToolbarCreateItemWithIdentifier((HIToolbarRef) m_macHIToolbarRef,kControlToolbarItemClassID,
+ data , &item ) ;
if (err == noErr)
{
break;
}
+#if wxMAC_USE_NATIVE_TOOLBAR
+ wxString label = tool->GetLabel();
+ if ( !label.empty() )
+ {
+ // strip mnemonics from the label for compatibility
+ // with the usual labels in wxStaticText sense
+ label = wxStripMenuCodes(label);
+
+ HIToolbarItemSetLabel(item,
+ wxMacCFStringHolder(label, m_font.GetEncoding()));
+ }
+#endif // wxMAC_USE_NATIVE_TOOLBAR
+
if ( err == noErr )
{
if ( controlHandle )
tool->UpdateToggleImage( true );
// nothing special to do here - we relayout in Realize() later
- tool->Attach( this );
InvalidateBestSize();
}
else
CFIndex removeIndex = tool->GetIndex();
#endif
+#if wxMAC_USE_NATIVE_TOOLBAR
+ if ( removeIndex != -1 && m_macHIToolbarRef )
+ {
+ HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex );
+ tool->SetIndex( -1 );
+ }
+#endif
switch ( tool->GetStyle() )
{
case wxTOOL_STYLE_CONTROL:
- {
+ if ( tool->GetControl() )
tool->GetControl()->Destroy();
- tool->ClearControl();
- }
break;
case wxTOOL_STYLE_BUTTON:
case wxTOOL_STYLE_SEPARATOR:
- if ( tool->GetControlHandle() )
- {
-#if wxMAC_USE_NATIVE_TOOLBAR
- if ( removeIndex != -1 && m_macHIToolbarRef )
- {
- HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex );
- tool->SetIndex( -1 );
- }
-#endif
-
- tool->ClearControl();
- }
+ // nothing special
break;
default:
break;
}
+ tool->ClearControl();
// and finally reposition all the controls after this one
drawInfo.kind = kThemeBackgroundMetal;
HIThemeApplyBackground( &hiToolbarrect, &drawInfo, cgContext, kHIThemeOrientationNormal );
+#ifndef __LP64__
QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
+#endif
#endif
}
}