]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 681893 ] Combobox in toolbar
authorJulian Smart <julian@anthemion.co.uk>
Tue, 18 Feb 2003 09:38:02 +0000 (09:38 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 18 Feb 2003 09:38:02 +0000 (09:38 +0000)
This patch adds controls (i.e. combobox) to toolbars.
It also changes the toolbar sample so the combobox is
actually shown.

Otto Wyss

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/univ/renderer.h
samples/toolbar/toolbar.cpp
src/univ/themes/gtk.cpp
src/univ/themes/win32.cpp
src/univ/toolbar.cpp

index e11bf8c88379493a3f369a6c10550e3099b1a202..93760cbaf7bffaa83142475fa0317deb9dc59ae2 100644 (file)
@@ -203,7 +203,8 @@ public:
                                    const wxString& label,
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
-                                   int flags = 0) = 0;
+                                   int flags = 0,
+                                   long style = 0) = 0;
 
     // draw a (part of) line in the text control
     virtual void DrawTextLine(wxDC& dc,
@@ -621,8 +622,9 @@ public:
                                    const wxString& label,
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
-                                   int flags = 0)
-        { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags); }
+                                   int flags = 0,
+                                   long style = 0)
+        { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style); }
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
                               const wxRect& rect,
index a862b1e378d63e28d40e2ff1e05c1c43c26b6cab..1dd85959583ad255b443c29f3f1e105b3082b5c8 100644 (file)
@@ -299,7 +299,7 @@ void MyFrame::RecreateToolbar()
     toolBar->AddTool(wxID_OPEN, _T("Open"), toolBarBitmaps[1], _T("Open file"));
 
     // neither the generic nor Motif native toolbars really support this
-#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__)
+#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__) || defined(__WXUNIVERSAL__)
     // adding a combo to a vertical toolbar is not very smart
     if ( m_horzToolbar )
     {
index 9ad98cbcd597a4a517fb381890d9a22e5ab7684d..344f10d0d36917f8c2b42697cca4a3084dfe4333 100644 (file)
@@ -165,7 +165,8 @@ public:
                                    const wxString& label,
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
-                                   int flags);
+                                   int flags = 0,
+                                   long style = 0);
 
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
@@ -1632,7 +1633,8 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
                                       const wxString& label,
                                       const wxBitmap& bitmap,
                                       const wxRect& rectOrig,
-                                      int flags)
+                                      int flags,
+                                      long style)
 {
     // we don't draw the separators at all
     if ( !label.empty() || bitmap.Ok() )
index 9dfdf2fc88099271299e89a8ce26123afefe918f..b8d40da389d084cdf5bf979b5c2a7e90adce6eef 100644 (file)
@@ -239,7 +239,8 @@ public:
                                    const wxString& label,
                                    const wxBitmap& bitmap,
                                    const wxRect& rect,
-                                   int flags);
+                                   int flags = 0,
+                                   long style = 0);
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
                               const wxRect& rect,
@@ -2407,9 +2408,10 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
                                         const wxString& label,
                                         const wxBitmap& bitmap,
                                         const wxRect& rectOrig,
-                                        int flags)
+                                        int flags,
+                                        long style)
 {
-    if ( !label.empty() || bitmap.Ok() )
+    if (style == wxTOOL_STYLE_BUTTON)
     {
         wxRect rect = rectOrig;
         rect.Deflate(BORDER_THICKNESS);
@@ -2425,7 +2427,7 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
 
         dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
     }
-    else // a separator
+    else if (style == wxTOOL_STYLE_SEPARATOR)
     {
         // leave a small gap aroudn the line, also account for the toolbar
         // border itself
@@ -2433,6 +2435,7 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
                          rectOrig.y + 2*BORDER_THICKNESS,
                          rectOrig.GetBottom() - BORDER_THICKNESS);
     }
+    // don't draw wxTOOL_STYLE_CONTROL
 }
 
 // ----------------------------------------------------------------------------
index f8e1944a7254b5725585173c7094b52f8c177de6..e3d23777509a0243af1fcb8349da663c51139fa3 100644 (file)
@@ -72,6 +72,24 @@ public:
         // no position yet
         m_x =
         m_y = -1;
+        m_width =
+        m_height = 0;
+
+        // not pressed yet
+        m_isInverted = FALSE;
+        
+        // mouse not here yet
+        m_underMouse = FALSE;
+    }
+
+    wxToolBarTool(wxToolBar *tbar, wxControl *control)
+        : wxToolBarToolBase(tbar, control)
+    {
+        // no position yet
+        m_x =
+        m_y = -1;
+        m_width =
+        m_height = 0;
 
         // not pressed yet
         m_isInverted = FALSE;
@@ -96,9 +114,11 @@ public:
     bool IsUnderMouse() { return m_underMouse; }
 
 public:
-    // the tool position (the size is known by the toolbar itself)
-    int m_x,
-        m_y;
+    // the tool position (for controls)
+    wxCoord m_x;
+    wxCoord m_y;
+    wxCoord m_width;
+    wxCoord m_height;
 
 private:
     // TRUE if the tool is pressed
@@ -330,9 +350,7 @@ wxToolBarToolBase *wxToolBar::CreateTool(int id,
 
 wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
 {
-    wxFAIL_MSG( wxT("Toolbar doesn't support controls yet (TODO)") );
-
-    return NULL;
+    return new wxToolBarTool(this, control);
 }
 
 // ----------------------------------------------------------------------------
@@ -358,13 +376,39 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
 
     if ( IsVertical() )
     {
-        rect.width = m_defaultWidth;
-        rect.height = tool->IsSeparator() ? m_widthSeparator : m_defaultHeight;
+               if (tool->IsButton())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_defaultHeight;
+        }
+        else if (tool->IsSeparator())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_widthSeparator;
+        }
+        else // control
+        {
+            rect.width = tool->m_width;
+            rect.height = tool->m_height;
+        }
     }
     else // horizontal
     {
-        rect.width = tool->IsSeparator() ? m_widthSeparator : m_defaultWidth;
-        rect.height = m_defaultHeight;
+        if (tool->IsButton())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_defaultHeight;
+        }
+        else if (tool->IsSeparator())
+        {
+            rect.width = m_widthSeparator;
+            rect.height = m_defaultHeight;
+        }
+        else // control
+        {
+            rect.width = tool->m_width;
+            rect.height = tool->m_height;
+        }
     }
 
     rect.width += 2*m_xMargin;
@@ -410,7 +454,25 @@ void wxToolBar::DoLayout()
         tool->m_y = y;
 
         // TODO ugly number fiddling
-        *pCur += ( tool->IsSeparator() ? m_widthSeparator : (widthTool+2) ) + margin;
+        if (tool->IsButton())
+        {
+            *pCur += widthTool;
+        }
+        else if (tool->IsSeparator())
+        {
+            *pCur += m_widthSeparator;
+        }
+        else if (!IsVertical()) // horizontal control
+        {
+            wxControl *control = tool->GetControl();
+            wxSize size = control->GetSize();
+            tool->m_y += (m_defaultHeight - size.y)/2;
+            tool->m_width = size.x;
+            tool->m_height = size.y;
+
+            *pCur += tool->m_width;
+        }
+        *pCur += margin;
     }
 
     // calculate the total toolbar size
@@ -562,7 +624,15 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
         }
         //else: leave both the label and the bitmap invalid to draw a separator
 
-        rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags);
+        if ( !tool->IsControl() )
+        {
+            rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle());
+        }
+        else // control
+        {
+            wxControl *control = tool->GetControl();
+            control->Move(tool->m_x, tool->m_y);
+        }
     }
 }