From dd91da4ed1e9d2ba5d3bc2fae64a8e4ea86b5d41 Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Mon, 27 Jan 2003 01:13:35 +0000
Subject: [PATCH] added Add/InsertTool() (patch 672032)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18958 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/changes.txt          |  2 ++
 docs/latex/wx/toolbar.tex | 10 +++++++++-
 include/wx/tbarbase.h     |  3 +++
 src/common/tbarbase.cpp   | 27 ++++++++++++++++++++++-----
 4 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/docs/changes.txt b/docs/changes.txt
index ec79242546..2e04106f19 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -32,6 +32,8 @@ All GUI ports:
 - fixed handling of URLs and filenames in wxFileSystem
 - implemented alignment for wxGrid bool editor and renderer
 - support wxListCtrl columns alignment for all platforms and not just MSW
+- added wxToolBar Add/InsertTool(tool) (Janusz Piwowarski)
+
 - Changed to type-safe wxSizerItemList for wxSizer child items.
 
     Deprecated:
diff --git a/docs/latex/wx/toolbar.tex b/docs/latex/wx/toolbar.tex
index 4326648f39..12f14173e8 100644
--- a/docs/latex/wx/toolbar.tex
+++ b/docs/latex/wx/toolbar.tex
@@ -186,9 +186,12 @@ Adds a separator for spacing groups of tools.
 \param{const wxString\& }{longHelpString = ""},\rtfsp
 \param{wxObject* }{clientData = NULL}}
 
+\func{wxToolBarTool*}{AddTool}{\param{wxToolBarTool* }{tool}}
+
 Adds a tool to the toolbar. The first (short and most commonly used) version
 has fewer parameters than the full version at the price of not being able to
-specify some of the more rarely used button features.
+specify some of the more rarely used button features. The last version allows
+to add an existing tool.
 
 \wxheading{Parameters}
 
@@ -217,6 +220,8 @@ parent frame when the mouse pointer is inside the tool}
 \docparam{clientData}{An optional pointer to client data which can be
 retrieved later using \helpref{wxToolBar::GetToolClientData}{wxtoolbargettoolclientdata}.}
 
+\docparam{tool}{The tool to be added.}
+
 \wxheading{Remarks}
 
 After you have added tools to a toolbar, you must call \helpref{wxToolBar::Realize}{wxtoolbarrealize} in
@@ -518,6 +523,9 @@ You must call \helpref{Realize}{wxtoolbarrealize} for the change to take place.
 \param{const wxBitmap\&}{ bitmap2 = wxNullBitmap}, \param{bool}{ isToggle = false},\rtfsp
 \param{wxObject* }{clientData = NULL}, \param{const wxString\& }{shortHelpString = ""}, \param{const wxString\& }{longHelpString = ""}}
 
+\func{wxToolBarTool *}{InsertTool}{\param{size\_t }{pos},\rtfsp
+\param{wxToolBarTool* }{tool}}
+
 Inserts the tool with the specified attributes into the toolbar at the given
 position.
 
diff --git a/include/wx/tbarbase.h b/include/wx/tbarbase.h
index 9cd4e2ea77..9e885dfab7 100644
--- a/include/wx/tbarbase.h
+++ b/include/wx/tbarbase.h
@@ -324,6 +324,9 @@ public:
                                     wxObject *clientData = NULL
                                );
 
+    virtual wxToolBarToolBase *AddTool (wxToolBarToolBase *tool);
+    virtual wxToolBarToolBase *InsertTool (size_t pos, wxToolBarToolBase *tool);
+
     // add an arbitrary control to the toolbar, return TRUE if ok (notice that
     // the control will be deleted by the toolbar and that it will also adjust
     // its position/size)
diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp
index 5f4b02fa90..16589483c6 100644
--- a/src/common/tbarbase.cpp
+++ b/src/common/tbarbase.cpp
@@ -164,13 +164,32 @@ wxToolBarToolBase *wxToolBarBase::InsertTool(size_t pos,
     wxToolBarToolBase *tool = CreateTool(id, label, bitmap, bmpDisabled, kind,
                                          clientData, shortHelp, longHelp);
 
-    if ( !tool || !DoInsertTool(pos, tool) )
+    if ( !InsertTool(pos, tool) )
     {
         delete tool;
 
         return NULL;
     }
 
+    return tool;
+}
+
+wxToolBarToolBase *wxToolBarBase::AddTool(wxToolBarToolBase *tool)
+{
+    return InsertTool(GetToolsCount(), tool);
+}
+
+wxToolBarToolBase *
+wxToolBarBase::InsertTool(size_t pos, wxToolBarToolBase *tool)
+{
+    wxCHECK_MSG( pos <= GetToolsCount(), (wxToolBarToolBase *)NULL,
+                 _T("invalid position in wxToolBar::InsertTool()") );
+
+    if ( !tool || !DoInsertTool(pos, tool) )
+    {
+        return NULL;
+    }
+
     m_tools.Insert(pos, tool);
 
     return tool;
@@ -194,15 +213,13 @@ wxToolBarToolBase *wxToolBarBase::InsertControl(size_t pos, wxControl *control)
 
     wxToolBarToolBase *tool = CreateTool(control);
 
-    if ( !tool || !DoInsertTool(pos, tool) )
+    if ( !InsertTool(pos, tool) )
     {
         delete tool;
 
         return NULL;
     }
 
-    m_tools.Insert(pos, tool);
-
     return tool;
 }
 
@@ -213,7 +230,7 @@ wxControl *wxToolBarBase::FindControl( int id )
           node = node->GetNext() )
     {
         wxControl *control = node->GetData()->GetControl();
-        
+
         if (control)
         {
             if (control->GetId() == id)
-- 
2.50.0

