1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_svtools.hxx" 30 #include <svtools/tooltiplbox.hxx> 31 #include <vcl/help.hxx> 32 33 // ============================================================================ 34 35 namespace svtools { 36 37 // ---------------------------------------------------------------------------- 38 39 void lcl_ToolTipLBox_ShowToolTip( ListBox& rListBox, const HelpEvent& rHEvt ) 40 { 41 // only show tooltip if helpmode is BALLOON or QUICK 42 if ( !( rHEvt.GetMode() & HELPMODE_BALLOON ) && !( rHEvt.GetMode() & HELPMODE_QUICK ) ) 43 { 44 // else call base class method 45 rListBox.ListBox::RequestHelp( rHEvt ); 46 return ; 47 } 48 49 // find the list box entry the mouse points to 50 Point aMousePos( rListBox.ScreenToOutputPixel( rHEvt.GetMousePosPixel() ) ); 51 52 sal_uInt16 nTop = rListBox.GetTopEntry(); 53 sal_uInt16 nBottom = nTop + rListBox.GetDisplayLineCount(); 54 55 sal_uInt16 nPos; 56 for( nPos = nTop; nPos < nBottom; ++nPos ) 57 { 58 Rectangle aItemRect( rListBox.GetBoundingRectangle( nPos ) ); 59 if( (aItemRect.Top() <= aMousePos.Y()) && (aMousePos.Y() <= aItemRect.Bottom()) ) 60 break; 61 } 62 63 // show text content of the entry, if it does not fit 64 if( nPos < nBottom ) 65 { 66 String aHelpText( rListBox.GetEntry( nPos ) ); 67 if( rListBox.GetTextWidth( aHelpText ) > rListBox.GetOutputSizePixel().Width() ) 68 { 69 Point aLBoxPos( rListBox.OutputToScreenPixel( Point( 0, 0 ) ) ); 70 Size aLBoxSize( rListBox.GetSizePixel() ); 71 Rectangle aLBoxRect( aLBoxPos, aLBoxSize ); 72 73 if( rHEvt.GetMode() == HELPMODE_BALLOON ) 74 Help::ShowBalloon( &rListBox, aLBoxRect.Center(), aLBoxRect, aHelpText ); 75 else 76 Help::ShowQuickHelp( &rListBox, aLBoxRect, aHelpText ); 77 } 78 } 79 } 80 81 // ---------------------------------------------------------------------------- 82 83 ToolTipListBox::ToolTipListBox( Window* pParent, WinBits nStyle ) : 84 ListBox( pParent, nStyle ) 85 { 86 } 87 88 ToolTipListBox::ToolTipListBox( Window* pParent, const ResId& rResId ) : 89 ListBox( pParent, rResId ) 90 { 91 } 92 93 void ToolTipListBox::RequestHelp( const HelpEvent& rHEvt ) 94 { 95 lcl_ToolTipLBox_ShowToolTip( *this, rHEvt ); 96 } 97 98 // ---------------------------------------------------------------------------- 99 100 ToolTipMultiListBox::ToolTipMultiListBox( Window* pParent, WinBits nStyle ) : 101 MultiListBox( pParent, nStyle ) 102 { 103 } 104 105 ToolTipMultiListBox::ToolTipMultiListBox( Window* pParent, const ResId& rResId ) : 106 MultiListBox( pParent, rResId ) 107 { 108 } 109 110 void ToolTipMultiListBox::RequestHelp( const HelpEvent& rHEvt ) 111 { 112 lcl_ToolTipLBox_ShowToolTip( *this, rHEvt ); 113 } 114 115 // ---------------------------------------------------------------------------- 116 117 } // namespace svtools 118 119 // ============================================================================ 120 121