#pragma hdrstop
#endif
+#if wxUSE_TOOLBAR
+
#ifndef WX_PRECOMP
- #include "wx/wx.h"
#endif
#include "wx/frame.h"
#include <windows.h>
#endif
-#if wxUSE_TOOLBAR
-
#include "wx/tbarbase.h"
// ----------------------------------------------------------------------------
// wxWindows macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
- BEGIN_EVENT_TABLE(wxToolBarBase, wxControl)
- EVT_IDLE(wxToolBarBase::OnIdle)
- END_EVENT_TABLE()
-#endif
+IMPLEMENT_CLASS(wxToolBarBase, wxControl)
+
+BEGIN_EVENT_TABLE(wxToolBarBase, wxControl)
+ EVT_IDLE(wxToolBarBase::OnIdle)
+END_EVENT_TABLE()
#include "wx/listimpl.cpp"
return tool ? tool->GetClientData() : (wxObject *)NULL;
}
+void wxToolBarBase::SetToolClientData(int id, wxObject *clientData)
+{
+ wxToolBarToolBase *tool = FindById(id);
+
+ wxCHECK_RET( tool, _T("no such tool in wxToolBar::SetToolClientData") );
+
+ tool->SetClientData(clientData);
+}
+
bool wxToolBarBase::GetToolState(int id) const
{
wxToolBarToolBase *tool = FindById(id);
{
wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED, id);
event.SetEventObject(this);
- event.SetExtraLong((long) toggleDown);
+
+ // we use SetInt() to make wxCommandEvent::IsChecked() return toggleDown
+ event.SetInt((int)toggleDown);
+
+ // and SetExtraLong() for backwards compatibility
+ event.SetExtraLong((long)toggleDown);
// Send events to this toolbar instead (and thence up the window hierarchy)
GetEventHandler()->ProcessEvent(event);
// Do the toolbar button updates (check for EVT_UPDATE_UI handlers)
void wxToolBarBase::DoToolbarUpdates()
{
- wxEvtHandler* evtHandler = GetEventHandler();
+ wxWindow* parent = this;
+ while (parent->GetParent())
+ parent = parent->GetParent();
+
+#ifdef __WXMSW__
+ wxWindow* focusWin = wxFindFocusDescendant(parent);
+#else
+ wxWindow* focusWin = (wxWindow*) NULL;
+#endif
+
+ wxEvtHandler* evtHandler = focusWin ? focusWin->GetEventHandler() : GetEventHandler() ;
for ( wxToolBarToolsList::Node* node = m_tools.GetFirst();
node;