X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/97d74dd29510ecec88b3f8cf9c986536f7512a38..d2c7015bf07982c3b9c3e8ca62b326e589f95e46:/src/os2/toolbar.cpp diff --git a/src/os2/toolbar.cpp b/src/os2/toolbar.cpp index 16261a8feb..e432c1b1c6 100644 --- a/src/os2/toolbar.cpp +++ b/src/os2/toolbar.cpp @@ -17,10 +17,13 @@ #ifndef WX_PRECOMP #include "wx/settings.h" #include "wx/window.h" + #include "wx/frame.h" + #include "wx/app.h" #include "wx/dcclient.h" #include "wx/dcmemory.h" #endif +#include "wx/tooltip.h" #include "wx/toolbar.h" bool wxToolBar::m_bInitialized = FALSE; @@ -304,6 +307,7 @@ BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_PAINT(wxToolBar::OnPaint) EVT_KILL_FOCUS(wxToolBar::OnKillFocus) EVT_MOUSE_EVENTS(wxToolBar::OnMouseEvent) + EVT_TIMER(-1, wxToolBar::OnTimer) END_EVENT_TABLE() // ============================================================================ @@ -365,6 +369,8 @@ void wxToolBar::Init() m_defaultWidth = 16; m_defaultHeight = 15; + + m_pToolTip = NULL; } // end of wxToolBar::Init wxToolBarToolBase* wxToolBar::DoAddTool( @@ -634,6 +640,11 @@ bool wxToolBar::Create( wxToolBar::~wxToolBar() { + if (m_pToolTip) + { + delete m_pToolTip; + m_pToolTip = NULL; + } } // end of wxToolBar::~wxToolBar bool wxToolBar::Realize() @@ -886,11 +897,21 @@ void wxToolBar::OnMouseEvent( wxMouseEvent& rEvent ) { + POINTL vPoint; + HWND hWnd; wxCoord vX; wxCoord vY; HPOINTER hPtr = ::WinQuerySysPointer(HWND_DESKTOP, SPTR_ARROW, FALSE); ::WinSetPointer(HWND_DESKTOP, hPtr); + ::WinQueryPointerPos(HWND_DESKTOP, &vPoint); + hWnd = ::WinWindowFromPoint(HWND_DESKTOP, &vPoint, TRUE); + if (hWnd != (HWND)GetHwnd()) + { + m_vToolTimer.Stop(); + return; + } + rEvent.GetPosition(&vX, &vY); wxToolBarTool* pTool = (wxToolBarTool *)FindToolForPosition( vX @@ -908,6 +929,7 @@ void wxToolBar::OnMouseEvent( if (!pTool) { + m_vToolTimer.Stop(); if (m_nCurrentTool > -1) { if (rEvent.LeftIsDown()) @@ -949,6 +971,15 @@ void wxToolBar::OnMouseEvent( ); m_nCurrentTool = pTool->GetId(); OnMouseEnter(m_nCurrentTool); + if (!pTool->GetShortHelp().IsEmpty()) + { + if (m_pToolTip) + delete m_pToolTip; + m_pToolTip = new wxToolTip(pTool->GetShortHelp()); + m_vXMouse = (wxCoord)vPoint.x; + m_vYMouse = (wxCoord)vPoint.y; + m_vToolTimer.Start(1000L, TRUE); + } if (!pTool->IsToggled()) RaiseTool(pTool); } @@ -1406,4 +1437,26 @@ void wxToolBar::RaiseTool ( } } // end of wxToolBar::RaiseTool +void wxToolBar::OnTimer ( + wxTimerEvent& rEvent +) +{ + if (rEvent.GetId() == m_vToolTimer.GetTimerId()) + { + wxPoint vPos( m_vXMouse + ,m_vYMouse + ); + + m_pToolTip->DisplayToolTipWindow(vPos); + m_vToolTimer.Stop(); + m_vToolExpTimer.Start(4000L, TRUE); + } + else if (rEvent.GetId() == m_vToolExpTimer.GetTimerId()) + { + m_pToolTip->HideToolTipWindow(); + GetParent()->Refresh(); + m_vToolExpTimer.Stop(); + } +} // end of wxToolBar::OnTimer + #endif // ndef for wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE