X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3029781e1d15465bc44f6553998f1a39d10e9ed6..a536e411022b21280532c9daadc806a437fbb4c6:/src/os2/toolbar.cpp diff --git a/src/os2/toolbar.cpp b/src/os2/toolbar.cpp index e9b5b35682..7975660d48 100644 --- a/src/os2/toolbar.cpp +++ b/src/os2/toolbar.cpp @@ -21,6 +21,7 @@ #include "wx/dcmemory.h" #endif +#include "wx/tooltip.h" #include "wx/toolbar.h" bool wxToolBar::m_bInitialized = FALSE; @@ -304,6 +305,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 +367,8 @@ void wxToolBar::Init() m_defaultWidth = 16; m_defaultHeight = 15; + + m_pToolTip = NULL; } // end of wxToolBar::Init wxToolBarToolBase* wxToolBar::DoAddTool( @@ -634,6 +638,11 @@ bool wxToolBar::Create( wxToolBar::~wxToolBar() { + if (m_pToolTip) + { + delete m_pToolTip; + m_pToolTip = NULL; + } } // end of wxToolBar::~wxToolBar bool wxToolBar::Realize() @@ -827,22 +836,39 @@ void wxToolBar::OnPaint ( ); int nX; int nY; - int nHeight; + int nHeight = 0; + int nWidth = 0; vDc.SetPen(vDarkGreyPen); - if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty()) + if (HasFlag(wxTB_TEXT)) { - nX = pTool->m_vX; - nY = pTool->m_vY - (m_vTextY - 6); - nHeight = (m_vTextY - 2) + pTool->GetHeight(); + if (HasFlag(wxTB_HORIZONTAL)) + { + nX = pTool->m_vX; + nY = pTool->m_vY - (m_vTextY - 6); + nHeight = (m_vTextY - 2) + pTool->GetHeight(); + } + else + { + nX = pTool->m_vX + m_xMargin + 10; + nY = pTool->m_vY + m_vTextY + m_toolSeparation; + nWidth = pTool->GetWidth() > m_vTextX ? pTool->GetWidth() : m_vTextX; + } } else { nX = pTool->m_vX; nY = pTool->m_vY; - nHeight = pTool->GetHeight() - 2; + if (HasFlag(wxTB_HORIZONTAL)) + nHeight = pTool->GetHeight() - 2; + else + { + nX += m_xMargin + 10; + nY += m_yMargin + m_toolSeparation; + nWidth = pTool->GetWidth(); + } } - vDc.DrawLine(nX, nY, nX, nY + nHeight); + vDc.DrawLine(nX, nY, nX + nWidth, nY + nHeight); } } nCount--; @@ -869,11 +895,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 @@ -891,6 +927,7 @@ void wxToolBar::OnMouseEvent( if (!pTool) { + m_vToolTimer.Stop(); if (m_nCurrentTool > -1) { if (rEvent.LeftIsDown()) @@ -932,6 +969,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); } @@ -1389,4 +1435,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