/////////////////////////////////////////////////////////////////////////////
-// Name: toolbar.cpp
+// Name: src/os2/toolbar.cpp
// Purpose: wxToolBar
// Author: David Webster
// Modified by:
// Created: 06/30/02
-// RCS-ID: $Id$
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE
+#include "wx/toolbar.h"
+
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/window.h"
#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
inline wxToolBarTool( wxToolBar* pTbar
,wxControl* pControl
+ ,const wxString& label
) : wxToolBarToolBase( pTbar
,pControl
+ ,label
)
{
}
// wxWin macros
// ----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase)
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase)
EVT_SIZE(wxToolBar::OnSize)
wxToolBarToolBase *wxToolBar::CreateTool(
wxControl* pControl
+, const wxString& label
)
{
return new wxToolBarTool( this
,pControl
+ ,label
);
} // end of wxToolBarSimple::CreateTool
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)
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
,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;
wxClientDC vDC(this);
vDC.SetFont(GetFont());
- vDC.GetTextExtent( "XXXX"
+ vDC.GetTextExtent( wxT("XXXX")
,&m_vTextX
,&m_vTextY
);
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)
{
,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;
//
// 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
if (pTool->GetHeight() > nMaxToolHeight)
nMaxToolHeight = pTool->GetHeight();
}
- pNode = pNode->GetNext();
+ node = node->GetNext();
}
wxCoord vTbWidth = 0L;
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;
}
else if (pTool->IsButton())
{
- if (GetWindowStyleFlag() & wxTB_HORIZONTAL)
+ if (GetWindowStyleFlag() & (wxTB_TOP | wxTB_BOTTOM))
{
if (m_nCurrentRowsOrColumns >= m_maxCols)
{
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));
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
// ----------------------------------------------------------------------------
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);
{
nX = pTool->m_vX;
nY = pTool->m_vY;
- if (HasFlag(wxTB_HORIZONTAL))
+ if (HasFlag(wxTB_TOP) || HasFlag(wxTB_BOTTOM))
nHeight = pTool->GetHeight() - 2;
else
{
pTool = (wxToolBarTool *)FindById(m_nCurrentTool);
if (pTool && !pTool->IsToggled())
{
- RaiseTool( pTool
- ,FALSE
- );
+ RaiseTool( pTool, FALSE );
}
m_nCurrentTool = -1;
OnMouseEnter(-1);
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;
// 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()
));
}
else
{
- wxColour vColor("BLACK");
-
- rDc.SetTextForeground(vColor);
+ rDc.SetTextForeground(*wxBLACK);
rDc.DrawBitmap( vBitmap
,pTool->m_vX
,pTool->m_vY
{
RaiseTool(pTool);
}
- if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull())
+ if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() )
{
wxCoord vX;
wxCoord vY;
GetSize(&vX, &vY);
rDc.DrawText( pTool->GetLabel()
,vLeft
- ,vY - (m_vTextY - 2)
+ ,vY - m_vTextY - 1
);
}
else // normal tools
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()
));
,pTool->m_vY
,bUseMask
);
- if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull())
+ if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() )
{
wxCoord vX;
wxCoord vY;
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
);
}
}
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();
, 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)) &&
return pTool;
}
}
- pNode = pNode->GetNext();
+ node = node->GetNext();
}
- return (wxToolBarToolBase *)NULL;
+ return NULL;
} // end of wxToolBar::FindToolForPosition
// ----------------------------------------------------------------------------
// 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;
if (!HasFlag(wxTB_FLAT))
return;
- if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty())
+ if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty())
{
if (pTool->GetWidth() > m_vTextX)
{
}
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);
}
} // 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;
if (!HasFlag(wxTB_FLAT))
return;
- if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty())
+ if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty())
{
if (pTool->GetWidth() > m_vTextX)
{
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);
}
}
} // 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();