]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/toolbar.cpp
The alignment controls are now left-aligned if the floating controls are not shown.
[wxWidgets.git] / src / os2 / toolbar.cpp
index 56ab55267781c55d6a6e077bfe7e1f86d5c40299..628fb77adbb8ee32475664930efa82067d9a2beb 100644 (file)
@@ -1,10 +1,9 @@
 /////////////////////////////////////////////////////////////////////////////
-// 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
 /////////////////////////////////////////////////////////////////////////////
@@ -14,6 +13,8 @@
 
 #if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE
 
+#include "wx/toolbar.h"
+
 #ifndef WX_PRECOMP
     #include "wx/settings.h"
     #include "wx/window.h"
@@ -24,9 +25,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 +60,10 @@ public:
 
     inline wxToolBarTool( wxToolBar* pTbar
                          ,wxControl* pControl
+                         ,const wxString& label
                         ) : wxToolBarToolBase( pTbar
                                               ,pControl
+                                              ,label
                                              )
     {
     }
@@ -127,10 +130,12 @@ wxToolBarToolBase* wxToolBar::CreateTool(
 
 wxToolBarToolBase *wxToolBar::CreateTool(
   wxControl*                        pControl
+, const wxString&                   label
 )
 {
     return new wxToolBarTool( this
                              ,pControl
+                             ,label
                             );
 } // end of wxToolBarSimple::CreateTool
 
@@ -275,12 +280,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 +306,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 +331,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 +365,7 @@ bool wxToolBar::Create(
         wxClientDC                  vDC(this);
 
         vDC.SetFont(GetFont());
-        vDC.GetTextExtent( "XXXX"
+        vDC.GetTextExtent( wxT("XXXX")
                           ,&m_vTextX
                           ,&m_vTextY
                          );
@@ -380,7 +379,7 @@ bool wxToolBar::Create(
     int                             nWidth  = rSize.x;
     int                             nHeight = rSize.y;
 
-    if (lStyle & wxTB_HORIZONTAL)
+    if (lStyle & (wxTB_TOP | wxTB_BOTTOM))
     {
         if (nWidth <= 0)
         {
@@ -418,16 +417,12 @@ 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()
@@ -451,7 +446,7 @@ bool wxToolBar::Realize()
     {
         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
@@ -504,7 +499,7 @@ bool wxToolBar::Realize()
 
         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;
@@ -525,7 +520,7 @@ bool wxToolBar::Realize()
         }
         else if (pTool->IsButton())
         {
-            if (GetWindowStyleFlag() & wxTB_HORIZONTAL)
+            if (GetWindowStyleFlag() & (wxTB_TOP | wxTB_BOTTOM))
             {
                 if (m_nCurrentRowsOrColumns >= m_maxCols)
                 {
@@ -549,7 +544,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,15 +565,15 @@ bool wxToolBar::Realize()
         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
 
 // ----------------------------------------------------------------------------
@@ -602,7 +597,8 @@ void wxToolBar::OnPaint (
         return;
     nCount++;
 
-    ::WinFillRect(vDc.GetHPS(), &vDc.m_vRclPaint, GetBackgroundColour().GetPixel());
+    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() )
@@ -613,19 +609,17 @@ void wxToolBar::OnPaint (
             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);
@@ -642,7 +636,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
                 {
@@ -718,9 +712,7 @@ void wxToolBar::OnMouseEvent(
             pTool = (wxToolBarTool *)FindById(m_nCurrentTool);
             if (pTool && !pTool->IsToggled())
             {
-                RaiseTool( pTool
-                          ,FALSE
-                         );
+                RaiseTool( pTool, FALSE );
             }
             m_nCurrentTool = -1;
             OnMouseEnter(-1);
@@ -747,12 +739,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;
@@ -812,56 +802,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;
+    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()
                                                         ));
@@ -873,9 +846,7 @@ void wxToolBar::DrawTool(
         }
         else
         {
-            wxColour                vColor("BLACK");
-
-            rDc.SetTextForeground(vColor);
+            rDc.SetTextForeground(*wxBLACK);
             rDc.DrawBitmap( vBitmap
                            ,pTool->m_vX
                            ,pTool->m_vY
@@ -886,7 +857,7 @@ void wxToolBar::DrawTool(
         {
             RaiseTool(pTool);
         }
-        if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull())
+        if ( HasFlag(wxTB_TEXT) && !pTool->GetLabel().empty() )
         {
             wxCoord                 vX;
             wxCoord                 vY;
@@ -903,7 +874,7 @@ void wxToolBar::DrawTool(
                 GetSize(&vX, &vY);
                 rDc.DrawText( pTool->GetLabel()
                              ,vLeft
-                             ,vY - (m_vTextY - 2)
+                             ,vY - m_vTextY - 1
                             );
             }
             else  // normal tools
@@ -911,18 +882,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()
                                                     ));
@@ -931,7 +902,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;
@@ -945,7 +916,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
                         );
         }
     }
@@ -959,7 +930,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();
@@ -981,7 +952,7 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition(
     {
         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)) &&
@@ -1003,7 +974,7 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition(
         }
         node = node->GetNext();
     }
-    return (wxToolBarToolBase *)NULL;
+    return NULL;
 } // end of wxToolBar::FindToolForPosition
 
 // ----------------------------------------------------------------------------
@@ -1058,29 +1029,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;
@@ -1094,7 +1054,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)
         {
@@ -1118,7 +1078,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);
@@ -1135,29 +1095,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;
@@ -1174,7 +1123,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)
         {
@@ -1201,7 +1150,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);
     }
@@ -1215,21 +1164,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();