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