X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/28bfd0a1d2ca3048070e2f7100b5d025b421a113..137c8bde085d6d5b7c459902d2ea1a198ab48765:/src/generic/toolbkg.cpp diff --git a/src/generic/toolbkg.cpp b/src/generic/toolbkg.cpp index 9517fec692..0822ab0ae8 100644 --- a/src/generic/toolbkg.cpp +++ b/src/generic/toolbkg.cpp @@ -18,14 +18,18 @@ #if wxUSE_TOOLBOOK +#ifndef WX_PRECOMP + #include "wx/icon.h" + #include "wx/settings.h" + #include "wx/toolbar.h" +#endif + #include "wx/imaglist.h" -#include "wx/toolbar.h" -#include "wx/toolbook.h" -#include "wx/settings.h" #include "wx/sysopt.h" +#include "wx/toolbook.h" -#ifndef WX_PRECOMP - #include "wx/icon.h" +#if defined(__WXMAC__) && wxUSE_TOOLBAR && wxUSE_BMPBUTTON +#include "wx/generic/buttonbar.h" #endif // ---------------------------------------------------------------------------- @@ -42,8 +46,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxToolbook, wxBookCtrlBase) IMPLEMENT_DYNAMIC_CLASS(wxToolbookEvent, wxNotifyEvent) +#if !WXWIN_COMPATIBILITY_EVENT_TYPES const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING = wxNewEventType(); const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED = wxNewEventType(); +#endif const int wxID_TOOLBOOKTOOLBAR = wxNewId(); BEGIN_EVENT_TABLE(wxToolbook, wxBookCtrlBase) @@ -89,14 +95,31 @@ bool wxToolbook::Create(wxWindow *parent, orient = wxTB_VERTICAL; // TODO: make more configurable - m_bookctrl = new wxToolBar + +#if defined(__WXMAC__) && wxUSE_TOOLBAR && wxUSE_BMPBUTTON + if (style & wxBK_BUTTONBAR) + { + m_bookctrl = new wxButtonToolBar ( this, wxID_TOOLBOOKTOOLBAR, wxDefaultPosition, wxDefaultSize, - orient | wxTB_TEXT|wxTB_FLAT|wxTB_NODIVIDER + orient|wxTB_TEXT|wxTB_FLAT|wxNO_BORDER ); + } + else +#endif + { + m_bookctrl = new wxToolBar + ( + this, + wxID_TOOLBOOKTOOLBAR, + wxDefaultPosition, + wxDefaultSize, + orient|wxTB_TEXT|wxTB_FLAT|wxTB_NODIVIDER|wxNO_BORDER + ); + } return true; } @@ -286,6 +309,39 @@ void wxToolbook::Realize() DoSize(); } +int wxToolbook::HitTest(const wxPoint& pt, long *flags) const +{ + int pagePos = wxNOT_FOUND; + + if ( flags ) + *flags = wxNB_HITTEST_NOWHERE; + + // convert from wxToolbook coordinates to wxToolBar ones + const wxToolBarBase * const tbar = GetToolBar(); + const wxPoint tbarPt = tbar->ScreenToClient(ClientToScreen(pt)); + + // is the point over the toolbar? + if ( wxRect(tbar->GetSize()).Inside(tbarPt) ) + { + const wxToolBarToolBase * const + tool = tbar->FindToolForPosition(tbarPt.x, tbarPt.y); + + if ( tool ) + { + pagePos = tbar->GetToolPos(tool->GetId()); + if ( flags ) + *flags = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL; + } + } + else // not over the toolbar + { + if ( flags && GetPageRect().Inside(pt) ) + *flags |= wxNB_HITTEST_ONPAGE; + } + + return pagePos; +} + void wxToolbook::OnIdle(wxIdleEvent& event) { if (m_needsRealizing) @@ -332,7 +388,7 @@ bool wxToolbook::InsertPage(size_t n, if (bSelect) { - // GetToolBar()->ToggleTool(n, true); + GetToolBar()->ToggleTool(n, true); m_selection = n; } else