]> git.saurik.com Git - wxWidgets.git/commitdiff
[ 1498016 ] 'Add wxUniv toolbar support wxTB_TEXT style' - with modifications.
authorWłodzimierz Skiba <abx@abx.art.pl>
Wed, 31 May 2006 18:15:42 +0000 (18:15 +0000)
committerWłodzimierz Skiba <abx@abx.art.pl>
Wed, 31 May 2006 18:15:42 +0000 (18:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39486 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/univ/renderer.h
include/wx/univ/toolbar.h
src/univ/themes/gtk.cpp
src/univ/themes/win32.cpp
src/univ/toolbar.cpp

index d35ac153809a8db246f8ce3da62f4f26113b5bed..cf6dd623de556598f012e637468bb72cbfb40477 100644 (file)
@@ -297,6 +297,7 @@ wxUniv:
 
 - Send wxEVT_SCROLL_XXX events from wxSlider (Danny Raynor).
 - Implemented wxToggleButton (David Bjorkevik).
+- Label in Toolbar tools implemented (Danny Raynor).
 
 wxX11:
 
index 2dc137a9b97e67226382ac6894945ef3c8214ea9..3ca35e91ef1a0d47f3524833811cd495d34f71ed 100644 (file)
@@ -206,7 +206,8 @@ public:
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
                                    int flags = 0,
-                                   long style = 0) = 0;
+                                   long style = 0,
+                                   int tbarStyle = 0) = 0;
 
     // draw a (part of) line in the text control
     virtual void DrawTextLine(wxDC& dc,
@@ -626,8 +627,9 @@ public:
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
                                    int flags = 0,
-                                   long style = 0)
-        { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style); }
+                                   long style = 0,
+                                   int tbarStyle = 0)
+        { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style, tbarStyle); }
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
                               const wxRect& rect,
@@ -902,4 +904,3 @@ private:
 };
 
 #endif // _WX_UNIV_RENDERER_H_
-
index 0d350f9ded1cafc0fda68597ef8c496aad853e5e..feb9ae4bc3b26f87e3b7752b3be7d13104978219 100644 (file)
@@ -59,6 +59,8 @@ public:
 
     virtual bool Realize();
 
+    virtual void SetWindowStyleFlag( long style );
+
     virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
 
     virtual void SetToolShortHelp(int id, const wxString& helpString);
index fceabaa12a7bc6166ceeceafdd2270733bd418f5..5d24b5c657dbcfba5b6b1d0c58d1b5ec6819915d 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        univ/themes/gtk.cpp
+// Name:        src/univ/themes/gtk.cpp
 // Purpose:     wxUniversal theme implementing GTK-like LNF
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -171,7 +171,8 @@ public:
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
                                    int flags = 0,
-                                   long style = 0);
+                                   long style = 0,
+                                   int tbarStyle = 0);
 
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
@@ -1683,7 +1684,8 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
                                       const wxBitmap& bitmap,
                                       const wxRect& rectOrig,
                                       int flags,
-                                      long WXUNUSED(style))
+                                      long WXUNUSED(style),
+                                      int tbarStyle)
 {
     // we don't draw the separators at all
     if ( !label.empty() || bitmap.Ok() )
@@ -1704,7 +1706,23 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
             DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT), rect);
         }
 
-        dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+        if(tbarStyle & wxTB_TEXT)
+        {
+            if(tbarStyle & wxTB_HORIZONTAL)
+            {
+                dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+            }
+            else
+            {
+                dc.DrawLabel(label, bitmap, rect, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+            }
+        }
+        else
+        {
+            int xpoint = (rect.GetLeft() + rect.GetRight() + 1 - bitmap.GetWidth()) / 2;
+            int ypoint = (rect.GetTop() + rect.GetBottom() + 1 - bitmap.GetHeight()) / 2;
+            dc.DrawBitmap(bitmap, xpoint, ypoint);
+        }
     }
 }
 
@@ -2819,12 +2837,12 @@ void wxGTKRenderer::AdjustSize(wxSize *size, const wxWindow *window)
     } else
 #endif // wxUSE_BMPBUTTON
 #if wxUSE_BUTTON || wxUSE_TOGGLEBTN
-    if ( 0 
+    if ( 0
 #  if wxUSE_BUTTON
-         || wxDynamicCast(window, wxButton) 
+         || wxDynamicCast(window, wxButton)
 #  endif // wxUSE_BUTTON
 #  if wxUSE_TOGGLEBTN
-         || wxDynamicCast(window, wxToggleButton) 
+         || wxDynamicCast(window, wxToggleButton)
 #  endif // wxUSE_TOGGLEBTN
         )
     {
index 5db2714dce022b3a67e1f18cfc96dc54c781e1c8..48959999ee4a9a21ab1a78e84cede9e4f31d9d08 100644 (file)
@@ -249,7 +249,8 @@ public:
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
                                    int flags = 0,
-                                   long style = 0);
+                                   long style = 0,
+                                   int tbarStyle = 0);
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
                               const wxRect& rect,
@@ -2480,7 +2481,8 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
                                         const wxBitmap& bitmap,
                                         const wxRect& rectOrig,
                                         int flags,
-                                        long style)
+                                        long style,
+                                        int tbarStyle)
 {
     if (style == wxTOOL_STYLE_BUTTON)
     {
@@ -2496,7 +2498,23 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
             DrawBorder(dc, wxBORDER_RAISED, rect, flags);
         }
 
-        dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+        if(tbarStyle & wxTB_TEXT)
+        {
+            if(tbarStyle & wxTB_HORIZONTAL)
+            {
+                dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+            }
+            else
+            {
+                dc.DrawLabel(label, bitmap, rect, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+            }
+        }
+        else
+        {
+            int xpoint = (rect.GetLeft() + rect.GetRight() + 1 - bitmap.GetWidth()) / 2;
+            int ypoint = (rect.GetTop() + rect.GetBottom() + 1 - bitmap.GetHeight()) / 2;
+            dc.DrawBitmap(bitmap, xpoint, ypoint);
+        }
     }
     else if (style == wxTOOL_STYLE_SEPARATOR)
     {
index 644763e88872a81968c3a205352b53111b879c77..bdd436fc04c64afc0f81dbcb7b82325b4fa927cd 100644 (file)
@@ -34,6 +34,7 @@
     #include "wx/app.h"
     #include "wx/log.h"
     #include "wx/frame.h"
+    #include "wx/dc.h"
 #endif
 
 #include "wx/univ/renderer.h"
@@ -375,8 +376,17 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
     {
         if (tool->IsButton())
         {
-            rect.width = m_defaultWidth;
-            rect.height = m_defaultHeight;
+            if(!HasFlag(wxTB_TEXT))
+            {
+                rect.width = m_defaultWidth;
+                rect.height = m_defaultHeight;
+            }
+            else
+            {
+                rect.width = m_defaultWidth +
+                    GetFont().GetPointSize() * tool->GetLabel().length();
+                rect.height = m_defaultHeight;
+            }
         }
         else if (tool->IsSeparator())
         {
@@ -393,8 +403,17 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
     {
         if (tool->IsButton())
         {
-            rect.width = m_defaultWidth;
-            rect.height = m_defaultHeight;
+            if(!HasFlag(wxTB_TEXT))
+            {
+                rect.width = m_defaultWidth;
+                rect.height = m_defaultHeight;
+            }
+            else
+            {
+                rect.width = m_defaultWidth +
+                    GetFont().GetPointSize() * tool->GetLabel().length();
+                rect.height = m_defaultHeight;
+            }
         }
         else if (tool->IsSeparator())
         {
@@ -427,6 +446,15 @@ bool wxToolBar::Realize()
     return true;
 }
 
+void wxToolBar::SetWindowStyleFlag( long style )
+{
+    wxToolBarBase::SetWindowStyleFlag(style);
+
+    m_needsLayout = true;
+
+    Refresh();
+}
+
 void wxToolBar::DoLayout()
 {
     wxASSERT_MSG( m_needsLayout, _T("why are we called?") );
@@ -436,7 +464,8 @@ void wxToolBar::DoLayout()
     wxCoord x = m_xMargin,
             y = m_yMargin;
 
-    const wxCoord widthTool = IsVertical() ? m_defaultHeight : m_defaultWidth;
+    wxCoord widthTool = 0, maxWidthTool = 0;
+    wxCoord heightTool = 0, maxHeightTool = 0;
     wxCoord margin = IsVertical() ? m_xMargin : m_yMargin;
     wxCoord *pCur = IsVertical() ? &y : &x;
 
@@ -453,6 +482,32 @@ void wxToolBar::DoLayout()
         // TODO ugly number fiddling
         if (tool->IsButton())
         {
+            if (IsVertical())
+            {
+                widthTool = m_defaultHeight;
+                heightTool = m_defaultWidth;
+                if(HasFlag(wxTB_TEXT))
+                    heightTool += GetFont().GetPointSize() * tool->GetLabel().length();
+            }
+            else
+            {
+                widthTool = m_defaultWidth;
+                if(HasFlag(wxTB_TEXT))
+                    widthTool += GetFont().GetPointSize() * tool->GetLabel().length();
+
+                heightTool = m_defaultHeight;
+            }
+
+            if(widthTool > maxWidthTool) // Record max width of tool
+            {
+                maxWidthTool = widthTool;
+            }
+
+            if(heightTool > maxHeightTool) // Record max width of tool
+            {
+                maxHeightTool = heightTool;
+            }
+
             *pCur += widthTool;
         }
         else if (tool->IsSeparator())
@@ -473,8 +528,26 @@ void wxToolBar::DoLayout()
     }
 
     // calculate the total toolbar size
-    wxCoord xMin = m_defaultWidth + 2*m_xMargin,
-            yMin = m_defaultHeight + 2*m_yMargin;
+    wxCoord xMin, yMin;
+
+    if(!HasFlag(wxTB_TEXT))
+    {
+        xMin = m_defaultWidth + 2*m_xMargin;
+        yMin = m_defaultHeight + 2*m_yMargin;
+    }
+    else
+    {
+        if (IsVertical())
+        {
+            xMin = heightTool + 2*m_xMargin;
+            yMin = widthTool + 2*m_xMargin;
+        }
+        else
+        {
+            xMin = maxWidthTool + 2*m_xMargin;
+            yMin = heightTool + 2*m_xMargin;
+        }
+    }
 
     m_maxWidth = x < xMin ? xMin : x;
     m_maxHeight = y < yMin ? yMin : y;
@@ -550,7 +623,7 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
     // prepare the variables used below
     wxDC& dc = renderer->GetDC();
     wxRenderer *rend = renderer->GetRenderer();
-    // dc.SetFont(GetFont()); -- uncomment when we support labels
+    dc.SetFont(GetFont());
 
     // draw the border separating us from the menubar (if there is no menubar
     // we probably shouldn't draw it?)
@@ -616,14 +689,28 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
         wxBitmap bitmap;
         if ( !tool->IsSeparator() )
         {
-            // label = tool->GetLabel();
+            label = tool->GetLabel();
             bitmap = tool->GetBitmap();
         }
         //else: leave both the label and the bitmap invalid to draw a separator
 
         if ( !tool->IsControl() )
         {
-            rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle());
+            int tbStyle = 0;
+            if(HasFlag(wxTB_TEXT))
+            {
+                tbStyle |= wxTB_TEXT;
+            }
+
+            if(HasFlag(wxTB_VERTICAL))
+            {
+                tbStyle |= wxTB_VERTICAL;
+            }
+            else
+            {
+                tbStyle |= wxTB_HORIZONTAL;
+            }
+            rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle(), tbStyle);
         }
         else // control
         {