+ if ( tool->CanBeToggled() && tool->IsToggled() )
+ {
+ tool->UpdateToggleImage( true ) ;
+ }
+
+ // nothing special to do here - we relayout in Realize() later
+ tool->Attach(this);
+ InvalidateBestSize();
+
+ return TRUE;
+}
+
+void wxToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(toggle))
+{
+ wxFAIL_MSG( _T("not implemented") );
+}
+
+bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase)
+{
+ wxToolBarTool* tool = wx_static_cast( wxToolBarTool* , toolbase ) ;
+ wxToolBarToolsList::compatibility_iterator node;
+ for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
+ {
+ wxToolBarToolBase *tool2 = node->GetData();
+ if ( tool2 == tool )
+ {
+ // let node point to the next node in the list
+ node = node->GetNext();
+
+ break;
+ }
+ }
+
+ wxSize sz = ((wxToolBarTool*)tool)->GetSize() ;
+
+ tool->Detach();
+
+ switch ( tool->GetStyle() )
+ {
+ case wxTOOL_STYLE_CONTROL:
+ {
+ tool->GetControl()->Destroy();
+ tool->ClearControl() ;
+ }
+ break;
+
+ case wxTOOL_STYLE_BUTTON:
+ case wxTOOL_STYLE_SEPARATOR:
+ if ( tool->GetControlHandle() )
+ {
+ DisposeControl( (ControlRef) tool->GetControlHandle() ) ;
+ tool->SetControlHandle( (ControlRef) NULL ) ;
+ }
+ break;
+ }
+
+ // and finally reposition all the controls after this one
+
+ for ( /* node -> first after deleted */ ; node; node = node->GetNext() )
+ {
+ wxToolBarTool *tool2 = (wxToolBarTool*) node->GetData();
+ wxPoint pt = tool2->GetPosition() ;
+
+ if ( GetWindowStyleFlag() & wxTB_VERTICAL )
+ {
+ pt.y -= sz.y ;
+ }
+ else
+ {
+ pt.x -= sz.x ;
+ }
+ tool2->SetPosition( pt ) ;
+ }
+
+ InvalidateBestSize();
+ return TRUE ;
+}
+
+void wxToolBar::OnPaint(wxPaintEvent& event)
+{
+ wxPaintDC dc(this) ;
+
+ int w, h ;
+ GetSize( &w , &h ) ;
+#if wxMAC_USE_CORE_GRAPHICS && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
+ if ( !MacGetTopLevelWindow()->MacGetMetalAppearance() )
+ {
+ if ( UMAGetSystemVersion() >= 0x1030 )
+ {
+ HIThemePlacardDrawInfo info ;
+ memset( &info, 0 , sizeof( info ) ) ;
+ info.version = 0 ;
+ info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ;
+
+ CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ;
+ HIRect rect = CGRectMake( 0 , 0 , w , h ) ;
+ HIThemeDrawPlacard( &rect , & info , cgContext, kHIThemeOrientationNormal) ;
+ }
+ }
+ else
+ {
+ // leave the background as it is (striped or metal)
+ }
+#else
+ wxMacPortSetter helper(&dc) ;
+
+ Rect toolbarrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) ,
+ dc.YLOG2DEVMAC(h) , dc.XLOG2DEVMAC(w) } ;
+/*
+ if( toolbarrect.left < 0 )
+ toolbarrect.left = 0 ;
+ if ( toolbarrect.top < 0 )
+ toolbarrect.top = 0 ;
+*/
+ if ( !MacGetTopLevelWindow()->MacGetMetalAppearance() )
+ {
+ UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+ }
+ else
+ {
+#if TARGET_API_MAC_OSX
+#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
+ if ( UMAGetSystemVersion() >= 0x1030 )
+ {
+ HIRect hiToolbarrect = CGRectMake( dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) ,
+ dc.YLOG2DEVREL(h) , dc.XLOG2DEVREL(w) );
+ CGContextRef cgContext ;
+ Rect bounds ;
+ GetPortBounds( (CGrafPtr) dc.m_macPort , &bounds ) ;
+ QDBeginCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ;
+ CGContextTranslateCTM( cgContext , 0 , bounds.bottom - bounds.top ) ;
+ CGContextScaleCTM( cgContext , 1 , -1 ) ;
+
+ {
+ HIThemeBackgroundDrawInfo drawInfo ;
+ drawInfo.version = 0 ;
+ drawInfo.state = kThemeStateActive ;
+ drawInfo.kind = kThemeBackgroundMetal ;
+ HIThemeApplyBackground( &hiToolbarrect, &drawInfo , cgContext,kHIThemeOrientationNormal) ;
+ }
+ QDEndCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ;
+ }
+ else
+#endif
+ {
+ UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+ }
+#endif
+ }
+#endif