X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fd1922a49351a377bc6ef8f7e00f150112ee096..44c44c82a3fe5362bac5cc9536f06eeac52af00c:/src/mac/carbon/toolbar.cpp diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 7c6fa528d5..33da0a2d4b 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -1,11 +1,11 @@ ///////////////////////////////////////////////////////////////////////////// // Name: toolbar.cpp // Purpose: wxToolBar -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) AUTHORy +// Copyright: (c) Stefan Csomory ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -107,65 +107,71 @@ wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control) void wxToolBar::Init() { - m_maxWidth = -1; - m_maxHeight = -1; - m_defaultWidth = kwxMacToolBarToolDefaultWidth; - m_defaultHeight = kwxMacToolBarToolDefaultHeight; + m_maxWidth = -1; + m_maxHeight = -1; + m_defaultWidth = kwxMacToolBarToolDefaultWidth; + m_defaultHeight = kwxMacToolBarToolDefaultHeight; } bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) -{ - - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; - - if (width <= 0) - width = 100; - if (height <= 0) - height = 30; - if (x < 0) - x = 0; - if (y < 0) - y = 0; - - SetName(name); - - m_windowStyle = style; - parent->AddChild(this); - - m_backgroundColour = parent->GetBackgroundColour() ; - m_foregroundColour = parent->GetForegroundColour() ; - - if (id == -1) - m_windowId = NewControlId(); - else - m_windowId = id; - - { - m_width = size.x ; - m_height = size.y ; - int x = pos.x ; - int y = pos.y ; - AdjustForParentClientOrigin(x, y, wxSIZE_USE_EXISTING); - m_x = x ; - m_y = y ; - } - - return TRUE; +{ + int x = pos.x; + int y = pos.y; + int width = size.x; + int height = size.y; + + if (width <= 0) + width = 100; + if (height <= 0) + height = 30; + if (x < 0) + x = 0; + if (y < 0) + y = 0; + + SetName(name); + + m_windowStyle = style; + parent->AddChild(this); + + m_backgroundColour = parent->GetBackgroundColour() ; + m_foregroundColour = parent->GetForegroundColour() ; + + if (id == -1) + m_windowId = NewControlId(); + else + m_windowId = id; + + { + m_width = size.x ; + m_height = size.y ; + int x = pos.x ; + int y = pos.y ; + AdjustForParentClientOrigin(x, y, wxSIZE_USE_EXISTING); + m_x = x ; + m_y = y ; + } + + return TRUE; } wxToolBar::~wxToolBar() { + size_t index = 0 ; + for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) + { + // Delete the control as we get ghosts otherwise + ::DisposeControl( (ControlHandle) m_macToolHandles[index] ); + } + // we must refresh the frame size when the toolbar is deleted but the frame // is not - otherwise toolbar leaves a hole in the place it used to occupy } bool wxToolBar::Realize() { - if (m_tools.Number() == 0) + if (m_tools.GetCount() == 0) return FALSE; Point localOrigin ; @@ -188,7 +194,7 @@ bool wxToolBar::Realize() controlstyle.flags = kControlUseFontMask ; controlstyle.font = kControlFontSmallSystemFont ; - wxNode *node = m_tools.First(); + wxToolBarToolsList::Node *node = m_tools.GetFirst(); int noButtons = 0; int x = 0 ; int y = 0 ; @@ -201,8 +207,7 @@ bool wxToolBar::Realize() while (node) { - wxToolBarTool *tool = (wxToolBarTool *)node->Data(); - wxBitmapRefData * bmap = (wxBitmapRefData*) ( tool->GetNormalBitmap().GetRefData()) ; + wxToolBarTool *tool = (wxToolBarTool *)node->GetData(); if( !tool->IsSeparator() ) { @@ -240,11 +245,11 @@ bool wxToolBar::Realize() } if ( tool->CanBeToggled() && tool->IsToggled() ) { - ::SetControlValue( m_macToolHandle , 1 ) ; + ::SetControl32BitValue( m_macToolHandle , 1 ) ; } else { - ::SetControlValue( m_macToolHandle , 0 ) ; + ::SetControl32BitValue( m_macToolHandle , 0 ) ; } /* ::SetControlFontStyle( m_macToolHandle , &controlstyle ) ; @@ -282,7 +287,7 @@ bool wxToolBar::Realize() if (toolbarrect.top + y + m_yMargin + kwxMacToolBarTopMargin - m_y - localOrigin.v > maxHeight) { maxHeight = toolbarrect.top + y + m_yMargin + kwxMacToolBarTopMargin - m_y - localOrigin.v ; } - node = node->Next(); + node = node->GetNext(); } if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) @@ -328,15 +333,15 @@ wxSize wxToolBar::GetToolSize() const void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) { - int index = 0 ; + size_t index = 0 ; for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) { if ( m_macToolHandles[index] == (void*) control ) { - wxToolBarTool *tool = (wxToolBarTool *)m_tools.Nth( index )->Data(); + wxToolBarTool *tool = (wxToolBarTool *)m_tools.Item( index )->GetData(); if ( tool->CanBeToggled() ) { - tool->Toggle( GetControlValue( (ControlHandle) control ) ) ; + tool->Toggle( GetControl32BitValue( (ControlHandle) control ) ) ; } OnLeftClick( tool->GetId() , tool -> IsToggled() ) ; break ; @@ -357,120 +362,119 @@ void wxToolBar::SetRows(int nRows) void wxToolBar::MacSuperChangedPosition() { - if (m_tools.Number() > 0) - { - - Point localOrigin ; - // Rect clipRect ; - // WindowRef window ; - // wxWindow *win ; - int lx , ly ; - lx = ly = 0 ; - MacWindowToRootWindow( &lx , &ly ) ; - localOrigin.v = ly ; - localOrigin.h = lx ; - -// GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; - - Rect toolbarrect = { localOrigin.v ,localOrigin.h , - m_height + localOrigin.v , m_width + localOrigin.h} ; - ControlFontStyleRec controlstyle ; - - controlstyle.flags = kControlUseFontMask ; - controlstyle.font = kControlFontSmallSystemFont ; - - wxNode *node = m_tools.First(); - int noButtons = 0; - int x = 0 ; - wxSize toolSize = GetToolSize() ; - int tw, th; - GetSize(& tw, & th); - - int maxWidth = 0 ; - int maxHeight = 0 ; - int toolcount = 0 ; + if (m_tools.GetCount() > 0) { - WindowRef rootwindow = (WindowRef) MacGetRootWindow() ; - while (node) + + Point localOrigin ; + // Rect clipRect ; + // WindowRef window ; + // wxWindow *win ; + int lx , ly ; + lx = ly = 0 ; + MacWindowToRootWindow( &lx , &ly ) ; + localOrigin.v = ly ; + localOrigin.h = lx ; + + // GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ; + + Rect toolbarrect = { localOrigin.v ,localOrigin.h , + m_height + localOrigin.v , m_width + localOrigin.h} ; + ControlFontStyleRec controlstyle ; + + controlstyle.flags = kControlUseFontMask ; + controlstyle.font = kControlFontSmallSystemFont ; + + wxToolBarToolsList::Node *node = m_tools.GetFirst(); + int noButtons = 0; + int x = 0 ; + wxSize toolSize = GetToolSize() ; + int tw, th; + GetSize(& tw, & th); + + int maxWidth = 0 ; + int maxHeight = 0 ; + int toolcount = 0 ; { - wxToolBarTool *tool = (wxToolBarTool *)node->Data(); - wxBitmapRefData * bmap = (wxBitmapRefData*) ( tool->GetNormalBitmap().GetRefData()) ; - - if( !tool->IsSeparator() ) + WindowRef rootwindow = (WindowRef) MacGetRootWindow() ; + while (node) { - Rect toolrect = { toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin, toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin , 0 , 0 } ; - toolrect.right = toolrect.left + toolSize.x ; - toolrect.bottom = toolrect.top + toolSize.y ; - - ControlHandle m_macToolHandle = (ControlHandle) m_macToolHandles[toolcount++] ; + wxToolBarTool *tool = (wxToolBarTool *)node->GetData(); + if( !tool->IsSeparator() ) { - Rect contrlRect ; - GetControlBounds( m_macToolHandle , &contrlRect ) ; - int former_mac_x = contrlRect.left ; - int former_mac_y = contrlRect.top ; - int mac_x = toolrect.left ; - int mac_y = toolrect.top ; - - if ( mac_x != former_mac_x || mac_y != former_mac_y ) + Rect toolrect = { toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin, toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin , 0 , 0 } ; + toolrect.right = toolrect.left + toolSize.x ; + toolrect.bottom = toolrect.top + toolSize.y ; + + ControlHandle m_macToolHandle = (ControlHandle) m_macToolHandles[toolcount++] ; + { + Rect contrlRect ; + GetControlBounds( m_macToolHandle , &contrlRect ) ; + int former_mac_x = contrlRect.left ; + int former_mac_y = contrlRect.top ; + int mac_x = toolrect.left ; + int mac_y = toolrect.top ; + + if ( mac_x != former_mac_x || mac_y != former_mac_y ) { - Rect inval = { former_mac_y , former_mac_x , former_mac_y + toolSize.y , former_mac_x + toolSize.y } ; - InvalWindowRect( rootwindow , &inval ) ; - } - UMAMoveControl( m_macToolHandle , mac_x , mac_y ) ; - { - Rect inval = { mac_y , mac_x , mac_y + toolSize.y , mac_x + toolSize.y } ; - InvalWindowRect( rootwindow , &inval ) ; + { + Rect inval = { former_mac_y , former_mac_x , former_mac_y + toolSize.y , former_mac_x + toolSize.y } ; + InvalWindowRect( rootwindow , &inval ) ; + } + UMAMoveControl( m_macToolHandle , mac_x , mac_y ) ; + { + Rect inval = { mac_y , mac_x , mac_y + toolSize.y , mac_x + toolSize.y } ; + InvalWindowRect( rootwindow , &inval ) ; + } } } + + x += (int)toolSize.x; + noButtons ++; } + else + { + toolcount++ ; + x += (int)toolSize.x / 4; + } + if ( toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin- m_x - localOrigin.h > maxWidth) + maxWidth = toolbarrect.left + x + kwxMacToolBarLeftMargin+ m_xMargin - m_x - localOrigin.h; + if (toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin - m_y - localOrigin.v > maxHeight) + maxHeight = toolbarrect.top + kwxMacToolBarTopMargin + m_yMargin - m_y - localOrigin.v ; - x += (int)toolSize.x; - noButtons ++; + node = node->GetNext(); } - else + } + + if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) + { + if ( m_maxRows == 0 ) { - toolcount++ ; - x += (int)toolSize.x / 4; + // if not set yet, only one row + SetRows(1); } - if ( toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin- m_x - localOrigin.h > maxWidth) - maxWidth = toolbarrect.left + x + kwxMacToolBarLeftMargin+ m_xMargin - m_x - localOrigin.h; - if (toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin - m_y - localOrigin.v > maxHeight) - maxHeight = toolbarrect.top + kwxMacToolBarTopMargin + m_yMargin - m_y - localOrigin.v ; - - node = node->Next(); + maxWidth = tw ; + maxHeight += toolSize.y; + maxHeight += m_yMargin + kwxMacToolBarTopMargin; + m_maxHeight = maxHeight ; } + else + { + if ( noButtons > 0 && m_maxRows == 0 ) + { + // if not set yet, have one column + SetRows(noButtons); + } + maxHeight = th ; + maxWidth += toolSize.x; + maxWidth += m_xMargin + kwxMacToolBarLeftMargin; + m_maxWidth = maxWidth ; + } + + SetSize(maxWidth, maxHeight); } - - if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) - { - if ( m_maxRows == 0 ) - { - // if not set yet, only one row - SetRows(1); - } - maxWidth = tw ; - maxHeight += toolSize.y; - maxHeight += m_yMargin + kwxMacToolBarTopMargin; - m_maxHeight = maxHeight ; - } - else - { - if ( noButtons > 0 && m_maxRows == 0 ) - { - // if not set yet, have one column - SetRows(noButtons); - } - maxHeight = th ; - maxWidth += toolSize.x; - maxWidth += m_xMargin + kwxMacToolBarLeftMargin; - m_maxWidth = maxWidth ; - } - - SetSize(maxWidth, maxHeight); - } - + wxWindow::MacSuperChangedPosition() ; } @@ -479,7 +483,7 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const MacClientToRootWindow( &x , &y ) ; Point pt = { y ,x } ; - int index = 0 ; + size_t index = 0 ; for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) { if ( m_macToolHandles[index] ) @@ -488,7 +492,7 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const GetControlBounds((ControlHandle) m_macToolHandles[index], &bounds ) ; if ( PtInRect( pt , &bounds ) ) { - return (wxToolBarTool*) (m_tools.Nth( index )->Data() ) ; + return (wxToolBarTool*) (m_tools.Item( index )->GetData() ) ; } } } @@ -533,7 +537,7 @@ void wxToolBar::DoToggleTool(wxToolBarToolBase *t, bool toggle) return ; ControlHandle control = (ControlHandle) m_macToolHandles[ tool->m_index ] ; - ::SetControlValue( control , toggle ) ; + ::SetControl32BitValue( control , toggle ) ; } bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), @@ -546,27 +550,27 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), return TRUE; } -void wxToolBar::DoSetToggle(wxToolBarToolBase *t, bool toggle) +void wxToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(toggle)) { - wxToolBarTool *tool = (wxToolBarTool *)t; - // TODO: set toggle state + wxFAIL_MSG( _T("not implemented") ); } -bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool) +bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *WXUNUSED(tool)) { - return TRUE ; + wxFAIL_MSG( _T("not implemented") ); + return TRUE ; } void wxToolBar::OnPaint(wxPaintEvent& event) { - wxPaintDC dc(this) ; - wxMacPortSetter helper(&dc) ; - + wxPaintDC dc(this) ; + wxMacPortSetter helper(&dc) ; + Rect toolbarrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) , dc.YLOG2DEVMAC(m_height) , dc.XLOG2DEVMAC(m_width) } ; UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ; { - int index = 0 ; + size_t index = 0 ; for ( index = 0 ; index < m_macToolHandles.Count() ; ++index ) { if ( m_macToolHandles[index] )