From: Julian Smart <julian@anthemion.co.uk>
Date: Sun, 24 Feb 2002 23:04:46 +0000 (+0000)
Subject: Fixed conflicts with Robert's similar fixes; fixed toolbar size calculation
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/16c9a4258f33da3a3a6c14bec9d1b239f2c93edd

Fixed conflicts with Robert's similar fixes; fixed toolbar size calculation
and allowed for vertical toolbar


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

diff --git a/include/wx/univ/toolbar.h b/include/wx/univ/toolbar.h
index ac130e9feb..ff08ce21c0 100644
--- a/include/wx/univ/toolbar.h
+++ b/include/wx/univ/toolbar.h
@@ -101,9 +101,10 @@ protected:
                                           const wxString& shortHelpString,
                                           const wxString& longHelpString);
     virtual wxToolBarToolBase *CreateTool(wxControl *control);
-    
+
 private:
     wxToolBarTool    *m_captured;
+    wxCoord          m_maxWidth, m_maxHeight;
     
 private:
     void OnMouse( wxMouseEvent &event );
diff --git a/samples/toolbar/toolbar.cpp b/samples/toolbar/toolbar.cpp
index 8ec29ca590..ef074307f8 100644
--- a/samples/toolbar/toolbar.cpp
+++ b/samples/toolbar/toolbar.cpp
@@ -297,7 +297,7 @@ void MyFrame::RecreateToolbar()
     toolBar->AddTool(wxID_OPEN, toolBarBitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Open file");
 
     // neither the generic nor Motif native toolbars really support this
-#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__)
+#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__)
     // adding a combo to a vertical toolbar is not very smart
     if ( m_horzToolbar )
     {
diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp
index 8bc2ffb5db..4bcb11d5d0 100644
--- a/src/common/framecmn.cpp
+++ b/src/common/framecmn.cpp
@@ -152,7 +152,7 @@ wxPoint wxFrameBase::GetClientAreaOrigin() const
 {
     wxPoint pt = wxTopLevelWindow::GetClientAreaOrigin();
 
-#if wxUSE_TOOLBAR
+#if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__)
     wxToolBar *toolbar = GetToolBar();
     if ( toolbar && toolbar->IsShown() )
     {
diff --git a/src/univ/framuniv.cpp b/src/univ/framuniv.cpp
index 9e97296700..5ee90213f6 100644
--- a/src/univ/framuniv.cpp
+++ b/src/univ/framuniv.cpp
@@ -96,18 +96,17 @@ void wxFrame::PositionMenuBar()
         // the menubar is positioned above the client size, hence the negative
         // y coord
         wxCoord heightMbar = m_frameMenuBar->GetSize().y;
-        
+
         wxCoord heightTbar = 0;
-        // In between sits the toolbar
         if (m_frameToolBar)
             heightTbar = m_frameToolBar->GetSize().y;
 
         m_frameMenuBar->SetSize(0, 
 #ifdef __WXPM__	 // FIXME -- remove this, make wxOS2/Univ behave as
                  //          the rest of the world!!!
-                                GetClientSize().y - heightMbar,
+                                GetClientSize().y - heightMbar - heightTbar,
 #else
-                                - heightMbar - heightTbar,
+                                - (heightMbar + heightTbar),
 #endif				
                                 GetClientSize().x, heightMbar);
     }
diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp
index 2988108167..0731cd04fd 100644
--- a/src/univ/toolbar.cpp
+++ b/src/univ/toolbar.cpp
@@ -46,7 +46,7 @@ END_EVENT_TABLE()
 bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
                  const wxPoint& pos, const wxSize& size,
                  long style, const wxString& name )
-{ 
+{
     bool ret = wxToolBarBase::Create( parent, id, pos, size, style, wxDefaultValidator, name );
     
     return ret;
@@ -54,8 +54,18 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
 
 void wxToolBar::Init()
 {
+    // TODO: this is from tbarbase.cpp, but should be in
+    // wxToolbarBase::Init
+    // the list owns the pointers
+    m_tools.DeleteContents(TRUE);
+    m_xMargin = m_yMargin = 0;
+    m_maxRows = m_maxCols = 0;
+    // End TODO
+
+    m_maxWidth = 0;
+    m_maxHeight = 0;
+
     m_captured = NULL;
-    
     SetToolBitmapSize( wxSize(16,15) );
 }
 
@@ -186,7 +196,19 @@ bool wxToolBar::Realize()
     if (!wxToolBarBase::Realize())
         return FALSE;
 
-    int x = 5;
+    int x;
+    int y;
+
+    if (GetWindowStyleFlag() & wxTB_VERTICAL)
+    {
+        x = m_xMargin;
+        y = 5;
+    }
+    else
+    {
+        y = m_yMargin;
+        x = 5;
+    }
 
     for ( wxToolBarToolsList::Node *node = m_tools.GetFirst();
           node;
@@ -194,15 +216,53 @@ bool wxToolBar::Realize()
     {
         wxToolBarTool *tool = (wxToolBarTool*) node->Data();
         
-        if (tool->GetId() == -1)
+        if (GetWindowStyleFlag() & wxTB_VERTICAL)
         {
-            x += 6;
-            continue;
+            if (tool->GetId() == -1)
+            {
+                y += 6;
+                continue;
+            }
+            tool->m_x = m_xMargin;
+            tool->m_y = y;
+            y += m_defaultHeight + 6;
+
+            // Calculate the maximum height or width (depending on style)
+            // so we know how to size the toolbar in Realize.
+            // We could get the size of the tool instead of the
+            // default bitmap size
+            if (m_maxWidth < (m_defaultWidth + 2*(m_xMargin + 2)))
+                m_maxWidth = (m_defaultWidth + 2*(m_xMargin + 2)) ;
+        }
+        else
+        {
+            if (tool->GetId() == -1)
+            {
+                x += 6;
+                continue;
+            }
+            tool->m_x = x;
+            tool->m_y = m_yMargin;
+            x += m_defaultWidth + 6;
+
+            // Calculate the maximum height or width (depending on style)
+            // so we know how to size the toolbar in Realize.
+            // We could get the size of the tool instead of the
+            // default bitmap size
+            if (m_maxHeight < (m_defaultHeight + 2*(m_yMargin + 2)))
+                m_maxHeight = (m_defaultHeight + 2*(m_yMargin + 2)) ;
         }
         
-        tool->m_x = x;
-        tool->m_y = 4;
-        x += m_defaultWidth + 6;
+    }
+
+    wxSize sz = GetSize();
+    if (GetWindowStyleFlag() & wxTB_VERTICAL)
+    {
+        SetSize(m_maxWidth, sz.y);
+    }
+    else
+    {
+        SetSize(sz.x, m_maxHeight);
     }
     
     SetSize( x+16, m_defaultHeight + 14 );