X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e506592420f0f63bcfdd8bdf1fadf55ea4402e7..0afeb753e0a6a3fdba290bf3612bb2f012d44d95:/src/osx/cocoa/toolbar.mm diff --git a/src/osx/cocoa/toolbar.mm b/src/osx/cocoa/toolbar.mm index dd7894fa60..ed713512c8 100644 --- a/src/osx/cocoa/toolbar.mm +++ b/src/osx/cocoa/toolbar.mm @@ -13,12 +13,11 @@ #if wxUSE_TOOLBAR -#include "wx/toolbar.h" - #ifndef WX_PRECOMP #include "wx/wx.h" #endif +#include "wx/toolbar.h" #include "wx/app.h" #include "wx/osx/private.h" #include "wx/geometry.h" @@ -306,8 +305,11 @@ private: @interface wxNSToolbarDelegate : NSObject wxOSX_10_6_AND_LATER() { + bool m_isSelectable; } +- (void)setSelectable:(bool) value; + - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag; - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar; @@ -364,6 +366,17 @@ private: @implementation wxNSToolbarDelegate +- (id)init +{ + m_isSelectable = false; + return [super init]; +} + +- (void)setSelectable:(bool) value +{ + m_isSelectable = true; +} + - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar { wxUnusedVar(toolbar); @@ -378,8 +391,10 @@ private: - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar { - wxUnusedVar(toolbar); - return nil; + if ( m_isSelectable ) + return [[toolbar items] valueForKey:@"itemIdentifier"]; + else + return nil; } - (NSToolbarItem*) toolbar:(NSToolbar*) toolbar itemForItemIdentifier:(NSString*) itemIdentifier willBeInsertedIntoToolbar:(BOOL) flag @@ -762,6 +777,41 @@ void wxToolBar::DoGetSize( int *width, int *height ) const #endif } +void wxToolBar::DoGetPosition(int*x, int *y) const +{ +#if wxOSX_USE_NATIVE_TOOLBAR + bool ownToolbarInstalled; + + MacTopLevelHasNativeToolbar( &ownToolbarInstalled ); + if ( ownToolbarInstalled ) + { + WXWindow tlw = MacGetTopLevelWindowRef(); + float toolbarHeight = 0.0; + NSRect windowFrame = NSMakeRect(0, 0, 0, 0); + + if(m_macToolbar && [(NSToolbar*)m_macToolbar isVisible]) + { + windowFrame = [NSWindow contentRectForFrameRect:[tlw frame] + styleMask:[tlw styleMask]]; + toolbarHeight = NSHeight(windowFrame) + - NSHeight([[tlw contentView] frame]); + } + + // it is extending to the north of the content area + + if ( x != NULL ) + *x = 0; + if ( y != NULL ) + *y = -toolbarHeight; + } + else + wxToolBarBase::DoGetPosition( x, y ); + +#else + wxToolBarBase::DoGetPosition( x, y ); +#endif +} + wxSize wxToolBar::DoGetBestSize() const { // was updated in Realize() @@ -1391,7 +1441,9 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) wxNSToolBarButton* v = [[wxNSToolBarButton alloc] initWithFrame:toolrect]; - [v setBezelStyle:NSRegularSquareBezelStyle]; + [v setBezelStyle:NSSmallSquareBezelStyle]; + [[v cell] setControlSize:NSSmallControlSize]; + [v setFont:[NSFont fontWithName:[[v font] fontName] size:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]]; [v setBordered:NO]; [v setButtonType: ( tool->CanBeToggled() ? NSToggleButton : NSMomentaryPushInButton )]; [v setImplementation:tool]; @@ -1552,45 +1604,41 @@ void wxToolBar::OnPaint(wxPaintEvent& event) int w, h; GetSize( &w, &h ); - bool drawMetalTheme = MacGetTopLevelWindow()->GetExtraStyle() & wxFRAME_EX_METAL; - - if ( UMAGetSystemVersion() < 0x1050 ) - { - if ( !drawMetalTheme ) - { - 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 - { - wxPaintDC dc(this); - - wxRect rect(0,0,w,h); - - dc.GradientFillLinear( rect , wxColour( 0xCC,0xCC,0xCC ), wxColour( 0xA8,0xA8,0xA8 ) , wxSOUTH ); - dc.SetPen( wxPen( wxColour( 0x51,0x51,0x51 ) ) ); - if ( HasFlag(wxTB_LEFT) ) - dc.DrawLine(w-1, 0, w-1, h); - else if ( HasFlag(wxTB_RIGHT) ) - dc.DrawLine(0, 0, 0, h); - else if ( HasFlag(wxTB_BOTTOM) ) - dc.DrawLine(0, 0, w, 0); - else if ( HasFlag(wxTB_TOP) ) - dc.DrawLine(0, h-1, w, h-1); - } + wxPaintDC dc(this); + + wxRect rect(0,0,w,h); + + dc.GradientFillLinear( rect , wxColour( 0xCC,0xCC,0xCC ), wxColour( 0xA8,0xA8,0xA8 ) , wxSOUTH ); + dc.SetPen( wxPen( wxColour( 0x51,0x51,0x51 ) ) ); + if ( HasFlag(wxTB_LEFT) ) + dc.DrawLine(w-1, 0, w-1, h); + else if ( HasFlag(wxTB_RIGHT) ) + dc.DrawLine(0, 0, 0, h); + else if ( HasFlag(wxTB_BOTTOM) ) + dc.DrawLine(0, 0, w, 0); + else if ( HasFlag(wxTB_TOP) ) + dc.DrawLine(0, h-1, w, h-1); } event.Skip(); } +#if wxOSX_USE_NATIVE_TOOLBAR +void wxToolBar::OSXSetSelectableTools(bool set) +{ + wxCHECK_RET( m_macToolbar, "toolbar must be non-NULL" ); + [(wxNSToolbarDelegate*)[(NSToolbar*)m_macToolbar delegate] setSelectable:set]; +} + +void wxToolBar::OSXSelectTool(int toolId) +{ + wxToolBarToolBase *tool = FindById(toolId); + wxCHECK_RET( tool, "invalid tool ID" ); + wxCHECK_RET( m_macToolbar, "toolbar must be non-NULL" ); + + wxString identifier = wxString::Format(wxT("%ld"), (long)tool); + wxCFStringRef cfidentifier(identifier, wxFont::GetDefaultEncoding()); + [(NSToolbar*)m_macToolbar setSelectedItemIdentifier:cfidentifier.AsNSString()]; +} +#endif // wxOSX_USE_NATIVE_TOOLBAR + #endif // wxUSE_TOOLBAR