X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/baac715443ebb90983c07cd1d29640a0b6410c53..ab67e8874db324fab5223cc8d5dff8a8de3e2b77:/src/osx/cocoa/toolbar.mm diff --git a/src/osx/cocoa/toolbar.mm b/src/osx/cocoa/toolbar.mm index 91df28256d..5fa4bb5c5a 100644 --- a/src/osx/cocoa/toolbar.mm +++ b/src/osx/cocoa/toolbar.mm @@ -1,10 +1,10 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/toolbar.cpp +// Name: src/osx/cocoa/toolbar.mm // Purpose: wxToolBar // Author: Stefan Csomor // Modified by: // Created: 04/01/98 -// RCS-ID: $Id: toolbar.cpp 54954 2008-08-03 11:27:03Z VZ $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -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" @@ -192,6 +191,10 @@ public: if ( IsButton() ) [(NSButton*)m_controlHandle setTitle:l.AsNSString()]; + if ( m_controlHandle ) + { + [m_controlHandle setToolTip:sh.AsNSString()]; + } } void Action() @@ -324,7 +327,7 @@ private: - (id)initWithItemIdentifier: (NSString*) identifier { - [super initWithItemIdentifier:identifier]; + self = [super initWithItemIdentifier:identifier]; impl = NULL; [self setTarget: self]; [self setAction: @selector(clickedAction:)]; @@ -413,7 +416,7 @@ private: - (id)initWithFrame:(NSRect)frame { - [super initWithFrame:frame]; + self = [super initWithFrame:frame]; impl = NULL; [self setTarget: self]; [self setAction: @selector(clickedAction:)]; @@ -758,6 +761,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() @@ -841,9 +879,9 @@ bool wxToolBar::MacInstallNativeToolbar(bool usesNative) [tlw setToolbar:(NSToolbar*) m_macToolbar]; [(NSToolbar*) m_macToolbar setVisible:YES]; - m_peer->Move(0,0,0,0 ); + GetPeer()->Move(0,0,0,0 ); SetSize( wxSIZE_AUTO_WIDTH, 0 ); - m_peer->SetVisibility( false ); + GetPeer()->SetVisibility( false ); wxToolBarBase::Show( false ); } } @@ -855,7 +893,7 @@ bool wxToolBar::MacInstallNativeToolbar(bool usesNative) bResult = true; [(NSToolbar*) m_macToolbar setVisible:NO]; MacUninstallNativeToolbar(); - m_peer->SetVisibility( true ); + GetPeer()->SetVisibility( true ); } } @@ -887,7 +925,7 @@ void wxToolBar::DoLayout() // find the maximum tool width and height // and the number of stretchable items - unsigned numStretchableSpaces = 0; + int numStretchableSpaces = 0; wxToolBarTool *tool; wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); while ( node ) @@ -1100,8 +1138,15 @@ bool wxToolBar::Realize() NSString *nsItemId; if (tool->GetStyle() == wxTOOL_STYLE_SEPARATOR) { - nsItemId = tool->IsStretchable() ? NSToolbarFlexibleSpaceItemIdentifier - : NSToolbarSeparatorItemIdentifier; + if ( tool->IsStretchable() ) + nsItemId = NSToolbarFlexibleSpaceItemIdentifier; + else + { + if ( UMAGetSystemVersion() < 0x1070 ) + nsItemId = NSToolbarSeparatorItemIdentifier; + else + nsItemId = NSToolbarSpaceItemIdentifier; + } } else { @@ -1183,6 +1228,9 @@ bool wxToolBar::Realize() SetInitialSize( wxSize(m_minWidth, m_minHeight)); SendSizeEventToParent(); + wxWindow * const parent = GetParent(); + if ( parent && !parent->IsBeingDeleted() ) + parent->MacOnInternalSize(); return true; } @@ -1350,8 +1398,18 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) #if wxOSX_USE_NATIVE_TOOLBAR if (m_macToolbar != NULL) { - NSString * nsItemId = tool->IsStretchable() ? NSToolbarFlexibleSpaceItemIdentifier - : NSToolbarSeparatorItemIdentifier; + NSString * nsItemId = nil; + + if ( tool->IsStretchable() ) + nsItemId = NSToolbarFlexibleSpaceItemIdentifier; + else + { + if ( UMAGetSystemVersion() < 0x1070 ) + nsItemId = NSToolbarSeparatorItemIdentifier; + else + nsItemId = NSToolbarSpaceItemIdentifier; + } + NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:nsItemId]; tool->SetToolbarItemRef( item ); } @@ -1370,19 +1428,13 @@ 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]; - if ( style & wxTB_NOICONS ) - [v setImagePosition:NSNoImage]; - else if ( style & wxTB_TEXT ) - [v setImagePosition:NSImageAbove]; - else - [v setImagePosition:NSImageOnly]; - - controlHandle = v; #if wxOSX_USE_NATIVE_TOOLBAR @@ -1399,6 +1451,13 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) tool->SetControlHandle( controlHandle ); tool->UpdateImages(); tool->UpdateLabel(); + + if ( style & wxTB_NOICONS ) + [v setImagePosition:NSNoImage]; + else if ( style & wxTB_TEXT ) + [v setImagePosition:NSImageAbove]; + else + [v setImagePosition:NSImageOnly]; [v sizeToFit]; #if 0 @@ -1560,9 +1619,15 @@ void wxToolBar::OnPaint(wxPaintEvent& event) dc.GradientFillLinear( rect , wxColour( 0xCC,0xCC,0xCC ), wxColour( 0xA8,0xA8,0xA8 ) , wxSOUTH ); dc.SetPen( wxPen( wxColour( 0x51,0x51,0x51 ) ) ); - dc.DrawRectangle(rect); + 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(); }