X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db16e5c3aae30ee4502d3e0d41eed500af365fe9..c017416682938c39547836051c0fad74db45e8a0:/src/os2/toolbar.cpp diff --git a/src/os2/toolbar.cpp b/src/os2/toolbar.cpp index 1d296bda35..b2fa1e4840 100644 --- a/src/os2/toolbar.cpp +++ b/src/os2/toolbar.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: toolbar.cpp +// Name: src/os2/toolbar.cpp // Purpose: wxToolBar // Author: David Webster // Modified by: @@ -14,6 +14,8 @@ #if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE +#include "wx/toolbar.h" + #ifndef WX_PRECOMP #include "wx/settings.h" #include "wx/window.h" @@ -24,9 +26,9 @@ #endif #include "wx/tooltip.h" -#include "wx/toolbar.h" +#include "wx/os2/dcclient.h" -bool wxToolBar::m_bInitialized = FALSE; +bool wxToolBar::m_bInitialized = false; // ---------------------------------------------------------------------------- // private classes @@ -59,8 +61,10 @@ public: inline wxToolBarTool( wxToolBar* pTbar ,wxControl* pControl + ,const wxString& label ) : wxToolBarToolBase( pTbar ,pControl + ,label ) { } @@ -84,7 +88,7 @@ public: // wxWin macros // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase) +IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_SIZE(wxToolBar::OnSize) @@ -127,10 +131,12 @@ wxToolBarToolBase* wxToolBar::CreateTool( wxToolBarToolBase *wxToolBar::CreateTool( wxControl* pControl +, const wxString& label ) { return new wxToolBarTool( this ,pControl + ,label ); } // end of wxToolBarSimple::CreateTool @@ -275,12 +281,10 @@ wxToolBarToolBase* wxToolBar::InsertTool( return pTool; } // end of wxToolBar::InsertTool -bool wxToolBar::DoInsertTool( - size_t WXUNUSED(nPos) -, wxToolBarToolBase* pToolBase -) +bool wxToolBar::DoInsertTool( size_t WXUNUSED(nPos), + wxToolBarToolBase* pToolBase ) { - wxToolBarTool* pTool = (wxToolBarTool *)pToolBase; + wxToolBarTool* pTool = (wxToolBarTool *)pToolBase; pTool->m_vX = m_vXPos; if (pTool->m_vX == -1) @@ -303,27 +307,23 @@ bool wxToolBar::DoInsertTool( if ((pTool->m_vY + pTool->GetNormalBitmap().GetHeight() + m_yMargin) > m_vMaxHeight) m_vMaxHeight = (wxCoord)((pTool->m_vY + pTool->GetHeight() + m_yMargin)); } - return TRUE; + return true; } // end of wxToolBar::DoInsertTool -bool wxToolBar::DoDeleteTool( - size_t WXUNUSED(nPos) -, wxToolBarToolBase* pTool -) +bool wxToolBar::DoDeleteTool( size_t WXUNUSED(nPos), + wxToolBarToolBase* pTool ) { pTool->Detach(); Refresh(); - return TRUE; + return true; } // end of wxToolBar::DoDeleteTool -bool wxToolBar::Create( - wxWindow* pParent -, wxWindowID vId -, const wxPoint& rPos -, const wxSize& rSize -, long lStyle -, const wxString& rsName -) +bool wxToolBar::Create( wxWindow* pParent, + wxWindowID vId, + const wxPoint& rPos, + const wxSize& rSize, + long lStyle, + const wxString& rsName ) { if ( !wxWindow::Create( pParent ,vId @@ -332,13 +332,13 @@ bool wxToolBar::Create( ,lStyle ,rsName )) - return FALSE; + return false; // Set it to grey (or other 3D face colour) SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); SetFont(*wxSMALL_FONT); - if (GetWindowStyleFlag() & wxTB_VERTICAL) + if (GetWindowStyleFlag() & (wxTB_LEFT | wxTB_RIGHT)) { m_vLastX = 7; m_vLastY = 3; @@ -366,7 +366,7 @@ bool wxToolBar::Create( wxClientDC vDC(this); vDC.SetFont(GetFont()); - vDC.GetTextExtent( "XXXX" + vDC.GetTextExtent( wxT("XXXX") ,&m_vTextX ,&m_vTextY ); @@ -379,9 +379,8 @@ bool wxToolBar::Create( int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; - wxFrame* pFrame = wxDynamicCast(GetParent(), wxFrame); - if (lStyle & wxTB_HORIZONTAL) + if (lStyle & (wxTB_TOP | wxTB_BOTTOM)) { if (nWidth <= 0) { @@ -419,24 +418,18 @@ bool wxToolBar::Create( ,nWidth ,nHeight ); - return TRUE; + return true; } // end of wxToolBar::Create wxToolBar::~wxToolBar() { - if (m_pToolTip) - { - delete m_pToolTip; - m_pToolTip = NULL; - } + wxDELETE(m_pToolTip); } // end of wxToolBar::~wxToolBar bool wxToolBar::Realize() { int nMaxToolWidth = 0; int nMaxToolHeight = 0; - int nX; - int nY; m_nCurrentRowsOrColumns = 0; m_vLastX = m_xMargin; @@ -448,13 +441,13 @@ bool wxToolBar::Realize() // // Find the maximum tool width and height // - wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); + wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); - while (pNode ) + while (node ) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty()) + if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty()) { // // Set the height according to the font and the border size @@ -473,7 +466,7 @@ bool wxToolBar::Realize() if (pTool->GetHeight() > nMaxToolHeight) nMaxToolHeight = pTool->GetHeight(); } - pNode = pNode->GetNext(); + node = node->GetNext(); } wxCoord vTbWidth = 0L; @@ -500,14 +493,14 @@ bool wxToolBar::Realize() int nSeparatorSize = m_toolSeparation; - pNode = m_tools.GetFirst(); - while (pNode) + node = m_tools.GetFirst(); + while (node) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); if (pTool->IsSeparator()) { - if (GetWindowStyleFlag() & wxTB_HORIZONTAL) + if (GetWindowStyleFlag() & (wxTB_TOP | wxTB_BOTTOM)) { pTool->m_vX = m_vLastX + nSeparatorSize; pTool->m_vHeight = m_defaultHeight + m_vTextY; @@ -528,7 +521,7 @@ bool wxToolBar::Realize() } else if (pTool->IsButton()) { - if (GetWindowStyleFlag() & wxTB_HORIZONTAL) + if (GetWindowStyleFlag() & (wxTB_TOP | wxTB_BOTTOM)) { if (m_nCurrentRowsOrColumns >= m_maxCols) { @@ -552,7 +545,7 @@ bool wxToolBar::Realize() m_vLastY = m_yMargin; } pTool->m_vX = m_vLastX + pTool->GetWidth(); - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull()) + if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() ) pTool->m_vY = m_vLastY + (nMaxToolHeight - m_vTextY) + m_toolPacking; else pTool->m_vY = m_vLastY + (nMaxToolHeight - (int)(pTool->GetHeight()/2)); @@ -570,18 +563,18 @@ bool wxToolBar::Realize() if (m_vLastY > m_maxHeight) m_maxHeight = m_vLastY; - pNode = pNode->GetNext(); + node = node->GetNext(); } - if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) + if (GetWindowStyleFlag() & (wxTB_TOP | wxTB_BOTTOM)) m_maxWidth += nMaxToolWidth; else m_maxHeight += nMaxToolHeight; m_maxWidth += m_xMargin; m_maxHeight += m_yMargin; - m_bInitialized = TRUE; - return TRUE; + m_bInitialized = true; + return true; } // end of wxToolBar::Realize // ---------------------------------------------------------------------------- @@ -605,30 +598,29 @@ void wxToolBar::OnPaint ( return; nCount++; - ::WinFillRect(vDc.GetHPS(), &vDc.m_vRclPaint, GetBackgroundColour().GetPixel()); - for ( wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); - pNode; - pNode = pNode->GetNext() ) + wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl(); + ::WinFillRect(impl->GetHPS(), &impl->m_vRclPaint, GetBackgroundColour().GetPixel()); + for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); + node; + node = node->GetNext() ) { - wxToolBarTool* pTool = (wxToolBarTool*)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool*)node->GetData(); if (pTool->IsButton() ) DrawTool(vDc, pTool); if (pTool->IsSeparator()) { - wxPen vDarkGreyPen( wxColour(85, 85, 85) - ,1 - ,wxSOLID - ); - int nX; - int nY; - int nHeight = 0; - int nWidth = 0; + wxColour gray85(85, 85, 85); + wxPen vDarkGreyPen( gray85, 1, wxSOLID ); + int nX; + int nY; + int nHeight = 0; + int nWidth = 0; vDc.SetPen(vDarkGreyPen); if (HasFlag(wxTB_TEXT)) { - if (HasFlag(wxTB_HORIZONTAL)) + if (HasFlag(wxTB_TOP) || HasFlag(wxTB_BOTTOM)) { nX = pTool->m_vX; nY = pTool->m_vY - (m_vTextY - 6); @@ -645,7 +637,7 @@ void wxToolBar::OnPaint ( { nX = pTool->m_vX; nY = pTool->m_vY; - if (HasFlag(wxTB_HORIZONTAL)) + if (HasFlag(wxTB_TOP) || HasFlag(wxTB_BOTTOM)) nHeight = pTool->GetHeight() - 2; else { @@ -721,9 +713,7 @@ void wxToolBar::OnMouseEvent( pTool = (wxToolBarTool *)FindById(m_nCurrentTool); if (pTool && !pTool->IsToggled()) { - RaiseTool( pTool - ,FALSE - ); + RaiseTool( pTool, FALSE ); } m_nCurrentTool = -1; OnMouseEnter(-1); @@ -750,12 +740,10 @@ void wxToolBar::OnMouseEvent( wxToolBarTool* pOldTool = (wxToolBarTool*)FindById(m_nCurrentTool); if (pOldTool && !pTool->IsToggled()) - RaiseTool( pOldTool - ,FALSE - ); + RaiseTool( pOldTool, FALSE ); m_nCurrentTool = pTool->GetId(); OnMouseEnter(m_nCurrentTool); - if (!pTool->GetShortHelp().IsEmpty()) + if (!pTool->GetShortHelp().empty()) { if (m_pToolTip) delete m_pToolTip; @@ -815,57 +803,39 @@ void wxToolBar::OnMouseEvent( // drawing // ---------------------------------------------------------------------------- -void wxToolBar::DrawTool( - wxToolBarToolBase* pTool -) +void wxToolBar::DrawTool( wxToolBarToolBase* pTool ) { - wxClientDC vDc(this); + wxClientDC vDc(this); - DrawTool( vDc - ,pTool - ); + DrawTool( vDc, pTool ); } // end of wxToolBar::DrawTool -void wxToolBar::DrawTool( - wxDC& rDc -, wxToolBarToolBase* pToolBase -) +void wxToolBar::DrawTool( wxDC& rDc, wxToolBarToolBase* pToolBase ) { - wxToolBarTool* pTool = (wxToolBarTool *)pToolBase; - wxPen vDarkGreyPen( wxColour( 85,85,85 ) - ,1 - ,wxSOLID - ); - wxPen vWhitePen( wxT("WHITE") - ,1 - ,wxSOLID - ); - wxPen vBlackPen( wxT("BLACK") - ,1 - ,wxSOLID - ); - wxBitmap vBitmap = pTool->GetNormalBitmap(); - bool bUseMask = FALSE; - wxMask* pMask = NULL; - RECTL vRect; + wxToolBarTool* pTool = (wxToolBarTool *)pToolBase; + wxColour gray85( 85,85,85 ); + wxPen vDarkGreyPen( gray85, 1, wxSOLID ); + wxBitmap vBitmap = pTool->GetNormalBitmap(); + bool bUseMask = false; + wxMask* pMask = NULL; PrepareDC(rDc); - if (!vBitmap.Ok()) + if (!vBitmap.IsOk()) return; if ((pMask = vBitmap.GetMask()) != NULL) if (pMask->GetMaskBitmap() != NULLHANDLE) - bUseMask = TRUE; + bUseMask = true; if (!pTool->IsToggled()) { LowerTool(pTool, FALSE); if (!pTool->IsEnabled()) { - wxColour vColor("GREY"); + wxColour vColor(wxT("GREY")); rDc.SetTextForeground(vColor); - if (!pTool->GetDisabledBitmap().Ok()) + if (!pTool->GetDisabledBitmap().IsOk()) pTool->SetDisabledBitmap(wxDisableBitmap( vBitmap ,(long)GetBackgroundColour().GetPixel() )); @@ -877,9 +847,7 @@ void wxToolBar::DrawTool( } else { - wxColour vColor("BLACK"); - - rDc.SetTextForeground(vColor); + rDc.SetTextForeground(*wxBLACK); rDc.DrawBitmap( vBitmap ,pTool->m_vX ,pTool->m_vY @@ -890,7 +858,7 @@ void wxToolBar::DrawTool( { RaiseTool(pTool); } - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull()) + if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() ) { wxCoord vX; wxCoord vY; @@ -907,7 +875,7 @@ void wxToolBar::DrawTool( GetSize(&vX, &vY); rDc.DrawText( pTool->GetLabel() ,vLeft - ,vY - (m_vTextY - 2) + ,vY - m_vTextY - 1 ); } else // normal tools @@ -915,18 +883,18 @@ void wxToolBar::DrawTool( vLeft += (wxCoord)((m_vTextX - vX)/2); rDc.DrawText( pTool->GetLabel() ,vLeft - ,pTool->m_vY + m_vTextY + 4 // a bit of margin + ,pTool->m_vY + m_vTextY - 1 // a bit of margin ); } } } else { - wxColour vColor("GREY"); + wxColour vColor(wxT("GREY")); LowerTool(pTool); rDc.SetTextForeground(vColor); - if (!pTool->GetDisabledBitmap().Ok()) + if (!pTool->GetDisabledBitmap().IsOk()) pTool->SetDisabledBitmap(wxDisableBitmap( vBitmap ,(long)GetBackgroundColour().GetPixel() )); @@ -935,7 +903,7 @@ void wxToolBar::DrawTool( ,pTool->m_vY ,bUseMask ); - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull()) + if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() ) { wxCoord vX; wxCoord vY; @@ -949,7 +917,7 @@ void wxToolBar::DrawTool( vLeft += (wxCoord)((m_vTextX - vX)/2); rDc.DrawText( pTool->GetLabel() ,vLeft - ,pTool->m_vY + m_vTextY + 4 // a bit of margin + ,pTool->m_vY + m_vTextY - 1 // a bit of margin ); } } @@ -963,7 +931,7 @@ void wxToolBar::SetRows( int nRows ) { - wxCHECK_RET( nRows != 0, _T("max number of rows must be > 0") ); + wxCHECK_RET( nRows != 0, wxT("max number of rows must be > 0") ); m_maxCols = (GetToolsCount() + nRows - 1) / nRows; Refresh(); @@ -974,20 +942,18 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition( , wxCoord vY ) const { - wxCoord vTextX = 0; - wxCoord vTextY = 0; wxCoord vTBarHeight = 0; GetSize( NULL ,&vTBarHeight ); vY = vTBarHeight - vY; - wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); - while (pNode) + wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); + while (node) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull()) + if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() ) { if ((vX >= (pTool->m_vX - ((wxCoord)(pTool->GetWidth()/2) - 2))) && (vY >= (pTool->m_vY - 2)) && @@ -1007,9 +973,9 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition( return pTool; } } - pNode = pNode->GetNext(); + node = node->GetNext(); } - return (wxToolBarToolBase *)NULL; + return NULL; } // end of wxToolBar::FindToolForPosition // ---------------------------------------------------------------------------- @@ -1064,29 +1030,18 @@ void wxToolBar::SpringUpButton( // private helpers // ---------------------------------------------------------------------------- -void wxToolBar::LowerTool ( - wxToolBarToolBase* pToolBase -, bool bLower -) +void wxToolBar::LowerTool ( wxToolBarToolBase* pToolBase, + bool bLower ) { wxToolBarTool* pTool = (wxToolBarTool*)pToolBase; - wxCoord vX; - wxCoord vY; - wxCoord vWidth; - wxCoord vHeight; - wxPen vDarkGreyPen( wxColour(85, 85, 85) - ,1 - ,wxSOLID - ); - wxPen vWhitePen( "WHITE" - ,1 - ,wxSOLID - ); - wxPen vClearPen( GetBackgroundColour() - ,1 - ,wxSOLID - ); - wxClientDC vDC(this); + wxCoord vX; + wxCoord vY; + wxCoord vWidth; + wxCoord vHeight; + wxColour gray85( 85,85,85 ); + wxPen vDarkGreyPen( gray85, 1, wxSOLID ); + wxPen vClearPen( GetBackgroundColour(), 1, wxSOLID ); + wxClientDC vDC(this); if (!pTool) return; @@ -1100,7 +1055,7 @@ void wxToolBar::LowerTool ( if (!HasFlag(wxTB_FLAT)) return; - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty()) + if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty()) { if (pTool->GetWidth() > m_vTextX) { @@ -1124,7 +1079,7 @@ void wxToolBar::LowerTool ( } if (bLower) { - vDC.SetPen(vWhitePen); + vDC.SetPen(*wxWHITE_PEN); vDC.DrawLine(vX + vWidth, vY + vHeight, vX, vY + vHeight); vDC.DrawLine(vX + vWidth, vY, vX + vWidth, vY + vHeight); vDC.SetPen(vDarkGreyPen); @@ -1141,29 +1096,18 @@ void wxToolBar::LowerTool ( } } // end of WinGuiBase_CToolBarTool::LowerTool -void wxToolBar::RaiseTool ( - wxToolBarToolBase* pToolBase -, bool bRaise -) +void wxToolBar::RaiseTool ( wxToolBarToolBase* pToolBase, + bool bRaise ) { - wxToolBarTool* pTool = (wxToolBarTool*)pToolBase; - wxCoord vX; - wxCoord vY; - wxCoord vWidth; - wxCoord vHeight; - wxPen vDarkGreyPen( wxColour(85, 85, 85) - ,1 - ,wxSOLID - ); - wxPen vWhitePen( "WHITE" - ,1 - ,wxSOLID - ); - wxPen vClearPen( GetBackgroundColour() - ,1 - ,wxSOLID - ); - wxClientDC vDC(this); + wxToolBarTool* pTool = (wxToolBarTool*)pToolBase; + wxCoord vX; + wxCoord vY; + wxCoord vWidth; + wxCoord vHeight; + wxColour gray85( 85,85,85 ); + wxPen vDarkGreyPen( gray85, 1, wxSOLID ); + wxPen vClearPen( GetBackgroundColour(), 1, wxSOLID ); + wxClientDC vDC(this); if (!pTool) return; @@ -1180,7 +1124,7 @@ void wxToolBar::RaiseTool ( if (!HasFlag(wxTB_FLAT)) return; - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty()) + if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty()) { if (pTool->GetWidth() > m_vTextX) { @@ -1207,7 +1151,7 @@ void wxToolBar::RaiseTool ( vDC.SetPen(vDarkGreyPen); vDC.DrawLine(vX + vWidth, vY + vHeight, vX, vY + vHeight); vDC.DrawLine(vX + vWidth, vY, vX + vWidth, vY + vHeight); - vDC.SetPen(vWhitePen); + vDC.SetPen(*wxWHITE_PEN); vDC.DrawLine(vX, vY, vX + vWidth, vY); vDC.DrawLine(vX, vY + vHeight, vX, vY); } @@ -1221,21 +1165,17 @@ void wxToolBar::RaiseTool ( } } // end of wxToolBar::RaiseTool -void wxToolBar::OnTimer ( - wxTimerEvent& rEvent -) +void wxToolBar::OnTimer ( wxTimerEvent& rEvent ) { - if (rEvent.GetId() == m_vToolTimer.GetTimerId()) + if (rEvent.GetId() == m_vToolTimer.GetId()) { - wxPoint vPos( m_vXMouse - ,m_vYMouse - ); + wxPoint vPos( m_vXMouse, m_vYMouse ); m_pToolTip->DisplayToolTipWindow(vPos); m_vToolTimer.Stop(); m_vToolExpTimer.Start(4000L, TRUE); } - else if (rEvent.GetId() == m_vToolExpTimer.GetTimerId()) + else if (rEvent.GetId() == m_vToolExpTimer.GetId()) { m_pToolTip->HideToolTipWindow(); GetParent()->Refresh();