X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d90895ac118ad4546eed7ee4c358a3fe644a1ad7..2fea6972c7975a59b3cb2470c3d320402dfa2f97:/src/os2/tooltip.cpp diff --git a/src/os2/tooltip.cpp b/src/os2/tooltip.cpp index 224f1b3f0c..685cf02339 100644 --- a/src/os2/tooltip.cpp +++ b/src/os2/tooltip.cpp @@ -6,7 +6,7 @@ // Created: 10/17/99 // RCS-ID: $Id$ // Copyright: (c) David Webster -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -32,183 +32,110 @@ // global variables // ---------------------------------------------------------------------------- -// the tooltip parent window -WXHWND wxToolTip::hwndTT = (WXHWND)NULL; - -// ---------------------------------------------------------------------------- -// private classes -// ---------------------------------------------------------------------------- - - -// a simple wrapper around TOOLINFO Win32 structure -class wxToolInfo // define a TOOLINFO for OS/2 here : public TOOLINFO -{ -public: - wxToolInfo(wxWindow *win) - { - // initialize all members -// ::ZeroMemory(this, sizeof(TOOLINFO)); - - cbSize = sizeof(this); - uFlags = 0; // TTF_IDISHWND; - uId = (UINT)win->GetHWND(); - } - size_t cbSize; - ULONG uFlags; - UINT uId; - HWND hwnd; - char* lpszText; -}; - -// ---------------------------------------------------------------------------- -// private functions -// ---------------------------------------------------------------------------- - -// send a message to the tooltip control -inline MRESULT SendTooltipMessage(WXHWND hwnd, - UINT msg, - MPARAM wParam, - MPARAM lParam) -{ -// return hwnd ? ::SendMessage((HWND)hwnd, msg, wParam, (MPARAM)lParam) -// : 0; - return (MRESULT)0; -} - -// send a message to all existing tooltip controls -static void SendTooltipMessageToAll(WXHWND hwnd, - UINT msg, - MPARAM wParam, - MPARAM lParam) -{ - if ( hwnd ) - (void)SendTooltipMessage((WXHWND)hwnd, msg, wParam, lParam); -} - -// ============================================================================ -// implementation -// ============================================================================ - -// ---------------------------------------------------------------------------- -// static functions -// ---------------------------------------------------------------------------- - -void wxToolTip::Enable(bool flag) -{ -// SendTooltipMessageToAll((WXHWND)hwndTT,TTM_ACTIVATE, flag, 0); -} - -void wxToolTip::SetDelay(long milliseconds) -{ -// SendTooltipMessageToAll((WXHWND)hwndTT,TTM_SETDELAYTIME, TTDT_INITIAL, milliseconds); -} - -// --------------------------------------------------------------------------- -// implementation helpers -// --------------------------------------------------------------------------- - -// create the tooltip ctrl for our parent frame if it doesn't exist yet -WXHWND wxToolTip::GetToolTipCtrl() -{ -// TODO: -/* - if ( !hwndTT ) - { - hwndTT = (WXHWND)::CreateWindow(TOOLTIPS_CLASS, - (LPSTR)NULL, - TTS_ALWAYSTIP, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - NULL, (HMENU)NULL, - wxGetInstance(), - NULL); - if ( hwndTT ) - { - SetWindowPos((HWND)hwndTT, HWND_TOPMOST, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - - } - return (WXHWND)hwndTT; -*/ - return (WXHWND)0; -} - -void wxToolTip::RelayEvent(WXMSG *msg) -{ -// (void)SendTooltipMessage(GetToolTipCtrl(), TTM_RELAYEVENT, 0, msg); -} - // ---------------------------------------------------------------------------- // ctor & dtor // ---------------------------------------------------------------------------- -wxToolTip::wxToolTip(const wxString &tip) - : m_text(tip) +wxToolTip::wxToolTip( + const wxString& rsTip +) +: m_sText(rsTip) +, m_pWindow(NULL) { - m_window = NULL; -} + Create(rsTip); +} // end of wxToolTip::wxToolTip wxToolTip::~wxToolTip() { - // there is no need to Remove() this tool - it will be done automatically - // anyhow -} + if (m_hWnd) + ::WinDestroyWindow(m_hWnd); +} // end of wxToolTip::~wxToolTip -// ---------------------------------------------------------------------------- -// others -// ---------------------------------------------------------------------------- - -void wxToolTip::Remove() +void wxToolTip::Create( + const wxString& rsTip +) { - // remove this tool from the tooltip control - if ( m_window ) + ULONG lStyle = ES_READONLY | ES_MARGIN | ES_CENTER; + LONG lColor; + char zFont[128]; + + m_hWnd = ::WinCreateWindow( HWND_DESKTOP + ,WC_ENTRYFIELD + ,rsTip.c_str() + ,lStyle + ,0, 0, 0, 0 + ,NULLHANDLE + ,HWND_TOP + ,1 + ,NULL + ,NULL + ); + if (!m_hWnd) { - wxToolInfo ti(m_window); -// (void)SendTooltipMessage(GetToolTipCtrl(), TTM_DELTOOL, 0, &ti); + wxLogError(wxT("Unable to create tooltip window")); } -} -void wxToolTip::SetWindow(wxWindow *win) + wxColour vColor( wxT("YELLOW") ); + lColor = (LONG)vColor.GetPixel(); + ::WinSetPresParam( m_hWnd + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + strcpy(zFont, "8.Helv"); + ::WinSetPresParam( m_hWnd + ,PP_FONTNAMESIZE + ,strlen(zFont) + 1 + ,(PVOID)zFont + ); +} // end of wxToolTip::Create + +void wxToolTip::DisplayToolTipWindow( + const wxPoint& rPoint +) { - Remove(); - - m_window = win; - - if ( m_window ) - { - wxToolInfo ti(m_window); - - // as we store our text anyhow, it seems useless to waste system memory - // by asking the tooltip ctrl to remember it too - instead it will send - // us TTN_NEEDTEXT (via WM_NOTIFY) when it is about to be shown - ti.hwnd = (HWND)m_window->GetHWND(); -// ti.lpszText = LPSTR_TEXTCALLBACK; - // instead of: ti.lpszText = (char *)m_text.c_str(); - -// TODO: -/* - if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, 0, &ti) ) - { - wxLogSysError(_("Failed to create the tooltip '%s'"), - m_text.c_str()); - } -*/ - } -} - -void wxToolTip::SetTip(const wxString& tip) + LONG lX = rPoint.x; + LONG lY = rPoint.y - 30; + LONG lWidth = 0L; + LONG lHeight = 0L; + + lWidth = m_sText.Length() * 8; + lHeight = 15; + ::WinSetWindowPos( m_hWnd + ,HWND_TOP + ,lX + ,lY + ,lWidth + ,lHeight + ,SWP_MOVE | SWP_SIZE | SWP_SHOW + ); +} // end of wxToolTip::DisplayToolTipWindow + +void wxToolTip::HideToolTipWindow() { - m_text = tip; - - if ( m_window ) - { - // update it immediately - wxToolInfo ti(m_window); - ti.lpszText = (wxChar *)m_text.c_str(); + ::WinShowWindow(m_hWnd, FALSE); +} // end of wxToolTip::HideToolTipWindow -// (void)SendTooltipMessage(GetToolTipCtrl(), TTM_UPDATETIPTEXT, 0, &ti); - } -} +void wxToolTip::SetTip( + const wxString& rsTip +) +{ + SWP vSwp; + LONG lWidth = 0L; + LONG lHeight = 0L; + + ::WinQueryWindowPos(m_hWnd, &vSwp); + m_sText = rsTip; + lWidth = rsTip.Length() * 8; + lHeight = 15; + ::WinSetWindowPos( m_hWnd + ,HWND_TOP + ,vSwp.cx + ,vSwp.cy + ,lWidth + ,lHeight + ,SWP_MOVE | SWP_SIZE | SWP_SHOW + ); +} // end of wxToolTip::SetTip #endif // wxUSE_TOOLTIPS