1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10*5900e8ecSAndrew Rist *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5900e8ecSAndrew Rist *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19*5900e8ecSAndrew Rist *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <svtools/fixedhyper.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir //.........................................................................
30cdf0e10cSrcweir namespace svt
31cdf0e10cSrcweir {
32cdf0e10cSrcweir //.........................................................................
33cdf0e10cSrcweir
34cdf0e10cSrcweir // class FixedHyperlink --------------------------------------------------
35cdf0e10cSrcweir
FixedHyperlink(Window * pParent,const ResId & rResId)36cdf0e10cSrcweir FixedHyperlink::FixedHyperlink( Window* pParent, const ResId& rResId ) :
37cdf0e10cSrcweir ::toolkit::FixedHyperlinkBase( pParent, rResId ),
38cdf0e10cSrcweir m_nTextLen(0)
39cdf0e10cSrcweir {
40cdf0e10cSrcweir Initialize();
41cdf0e10cSrcweir }
42cdf0e10cSrcweir
FixedHyperlink(Window * pParent,WinBits nWinStyle)43cdf0e10cSrcweir FixedHyperlink::FixedHyperlink( Window* pParent, WinBits nWinStyle ) :
44cdf0e10cSrcweir ::toolkit::FixedHyperlinkBase( pParent, nWinStyle ),
45cdf0e10cSrcweir m_nTextLen(0)
46cdf0e10cSrcweir {
47cdf0e10cSrcweir Initialize();
48cdf0e10cSrcweir }
49cdf0e10cSrcweir
~FixedHyperlink()50cdf0e10cSrcweir FixedHyperlink::~FixedHyperlink()
51cdf0e10cSrcweir {
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
Initialize()54cdf0e10cSrcweir void FixedHyperlink::Initialize()
55cdf0e10cSrcweir {
56cdf0e10cSrcweir // saves the old pointer
57cdf0e10cSrcweir m_aOldPointer = GetPointer();
58cdf0e10cSrcweir // changes the font
59cdf0e10cSrcweir Font aFont = GetControlFont( );
60cdf0e10cSrcweir // to underline
61cdf0e10cSrcweir aFont.SetUnderline( UNDERLINE_SINGLE );
62cdf0e10cSrcweir SetControlFont( aFont );
63cdf0e10cSrcweir // changes the color to light blue
64cdf0e10cSrcweir SetTextColor( Color( COL_LIGHTBLUE ) );
65cdf0e10cSrcweir // calculates text len
66cdf0e10cSrcweir m_nTextLen = GetCtrlTextWidth( GetText() );
67cdf0e10cSrcweir }
68cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)69cdf0e10cSrcweir void FixedHyperlink::MouseMove( const MouseEvent& rMEvt )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir // changes the pointer if the control is enabled and the mouse is over the text.
72cdf0e10cSrcweir if ( !rMEvt.IsLeaveWindow() && IsEnabled() && GetPointerPosPixel().X() < m_nTextLen )
73cdf0e10cSrcweir SetPointer( POINTER_REFHAND );
74cdf0e10cSrcweir else
75cdf0e10cSrcweir SetPointer( m_aOldPointer );
76cdf0e10cSrcweir }
77cdf0e10cSrcweir
MouseButtonUp(const MouseEvent &)78cdf0e10cSrcweir void FixedHyperlink::MouseButtonUp( const MouseEvent& )
79cdf0e10cSrcweir {
80cdf0e10cSrcweir // calls the link if the control is enabled and the mouse is over the text.
81cdf0e10cSrcweir if ( IsEnabled() && GetPointerPosPixel().X() < m_nTextLen )
82cdf0e10cSrcweir ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, m_aClickHdl, this );
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
RequestHelp(const HelpEvent & rHEvt)85cdf0e10cSrcweir void FixedHyperlink::RequestHelp( const HelpEvent& rHEvt )
86cdf0e10cSrcweir {
87cdf0e10cSrcweir if ( IsEnabled() && GetPointerPosPixel().X() < m_nTextLen )
88cdf0e10cSrcweir FixedText::RequestHelp( rHEvt );
89cdf0e10cSrcweir }
90cdf0e10cSrcweir
GetFocus()91cdf0e10cSrcweir void FixedHyperlink::GetFocus()
92cdf0e10cSrcweir {
93cdf0e10cSrcweir SetTextColor( Color( COL_LIGHTRED ) );
94cdf0e10cSrcweir Paint( Rectangle( Point(), GetSizePixel() ) );
95cdf0e10cSrcweir ShowFocus( Rectangle( Point( 1, 1 ), Size( m_nTextLen + 4, GetSizePixel().Height() - 2 ) ) );
96cdf0e10cSrcweir }
97cdf0e10cSrcweir
LoseFocus()98cdf0e10cSrcweir void FixedHyperlink::LoseFocus()
99cdf0e10cSrcweir {
100cdf0e10cSrcweir SetTextColor( Color( COL_LIGHTBLUE ) );
101cdf0e10cSrcweir Paint( Rectangle( Point(), GetSizePixel() ) );
102cdf0e10cSrcweir HideFocus();
103cdf0e10cSrcweir }
104cdf0e10cSrcweir
KeyInput(const KeyEvent & rKEvt)105cdf0e10cSrcweir void FixedHyperlink::KeyInput( const KeyEvent& rKEvt )
106cdf0e10cSrcweir {
107cdf0e10cSrcweir switch ( rKEvt.GetKeyCode().GetCode() )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir case KEY_SPACE:
110cdf0e10cSrcweir case KEY_RETURN:
111cdf0e10cSrcweir m_aClickHdl.Call( this );
112cdf0e10cSrcweir break;
113cdf0e10cSrcweir
114cdf0e10cSrcweir default:
115cdf0e10cSrcweir FixedText::KeyInput( rKEvt );
116cdf0e10cSrcweir }
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
SetURL(const String & rNewURL)119cdf0e10cSrcweir void FixedHyperlink::SetURL( const String& rNewURL )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir m_sURL = rNewURL;
122cdf0e10cSrcweir SetQuickHelpText( m_sURL );
123cdf0e10cSrcweir }
124cdf0e10cSrcweir
GetURL() const125cdf0e10cSrcweir String FixedHyperlink::GetURL() const
126cdf0e10cSrcweir {
127cdf0e10cSrcweir return m_sURL;
128cdf0e10cSrcweir }
129cdf0e10cSrcweir
SetDescription(const String & rNewDescription)130cdf0e10cSrcweir void FixedHyperlink::SetDescription( const String& rNewDescription )
131cdf0e10cSrcweir {
132cdf0e10cSrcweir SetText( rNewDescription );
133cdf0e10cSrcweir m_nTextLen = GetCtrlTextWidth( GetText() );
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
136cdf0e10cSrcweir // class FixedHyperlinkImage ---------------------------------------------
137cdf0e10cSrcweir
FixedHyperlinkImage(Window * pParent,const ResId & rResId)138cdf0e10cSrcweir FixedHyperlinkImage::FixedHyperlinkImage( Window* pParent, const ResId& rResId ) :
139cdf0e10cSrcweir FixedImage( pParent, rResId )
140cdf0e10cSrcweir {
141cdf0e10cSrcweir Initialize();
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
FixedHyperlinkImage(Window * pParent,WinBits nWinStyle)144cdf0e10cSrcweir FixedHyperlinkImage::FixedHyperlinkImage( Window* pParent, WinBits nWinStyle ) :
145cdf0e10cSrcweir FixedImage( pParent, nWinStyle )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir Initialize();
148cdf0e10cSrcweir }
149cdf0e10cSrcweir
~FixedHyperlinkImage()150cdf0e10cSrcweir FixedHyperlinkImage::~FixedHyperlinkImage()
151cdf0e10cSrcweir {
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
Initialize()154cdf0e10cSrcweir void FixedHyperlinkImage::Initialize()
155cdf0e10cSrcweir {
156cdf0e10cSrcweir // saves the old pointer
157cdf0e10cSrcweir m_aOldPointer = GetPointer();
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)160cdf0e10cSrcweir void FixedHyperlinkImage::MouseMove( const MouseEvent& rMEvt )
161cdf0e10cSrcweir {
162cdf0e10cSrcweir // changes the pointer if the control is enabled and the mouse is over the text.
163cdf0e10cSrcweir if ( !rMEvt.IsLeaveWindow() && IsEnabled() )
164cdf0e10cSrcweir SetPointer( POINTER_REFHAND );
165cdf0e10cSrcweir else
166cdf0e10cSrcweir SetPointer( m_aOldPointer );
167cdf0e10cSrcweir }
168cdf0e10cSrcweir
MouseButtonUp(const MouseEvent &)169cdf0e10cSrcweir void FixedHyperlinkImage::MouseButtonUp( const MouseEvent& )
170cdf0e10cSrcweir {
171cdf0e10cSrcweir // calls the link if the control is enabled and the mouse is over the text.
172cdf0e10cSrcweir if ( IsEnabled() )
173cdf0e10cSrcweir ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, m_aClickHdl, this );
174cdf0e10cSrcweir
175cdf0e10cSrcweir Size aSize = GetSizePixel();
176cdf0e10cSrcweir Size aImgSz = GetImage().GetSizePixel();
177cdf0e10cSrcweir if ( aSize.Width() < aImgSz.Width() )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir DBG_ERRORFILE("xxx");
180cdf0e10cSrcweir }
181cdf0e10cSrcweir }
182cdf0e10cSrcweir
RequestHelp(const HelpEvent & rHEvt)183cdf0e10cSrcweir void FixedHyperlinkImage::RequestHelp( const HelpEvent& rHEvt )
184cdf0e10cSrcweir {
185cdf0e10cSrcweir if ( IsEnabled() )
186cdf0e10cSrcweir FixedImage::RequestHelp( rHEvt );
187cdf0e10cSrcweir }
188cdf0e10cSrcweir
GetFocus()189cdf0e10cSrcweir void FixedHyperlinkImage::GetFocus()
190cdf0e10cSrcweir {
191cdf0e10cSrcweir Paint( Rectangle( Point(), GetSizePixel() ) );
192cdf0e10cSrcweir ShowFocus( Rectangle( Point( 1, 1 ), Size( GetSizePixel().Width() - 2, GetSizePixel().Height() - 2 ) ) );
193cdf0e10cSrcweir }
194cdf0e10cSrcweir
LoseFocus()195cdf0e10cSrcweir void FixedHyperlinkImage::LoseFocus()
196cdf0e10cSrcweir {
197cdf0e10cSrcweir Paint( Rectangle( Point(), GetSizePixel() ) );
198cdf0e10cSrcweir HideFocus();
199cdf0e10cSrcweir }
200cdf0e10cSrcweir
KeyInput(const KeyEvent & rKEvt)201cdf0e10cSrcweir void FixedHyperlinkImage::KeyInput( const KeyEvent& rKEvt )
202cdf0e10cSrcweir {
203cdf0e10cSrcweir switch ( rKEvt.GetKeyCode().GetCode() )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir case KEY_SPACE:
206cdf0e10cSrcweir case KEY_RETURN:
207cdf0e10cSrcweir m_aClickHdl.Call( this );
208cdf0e10cSrcweir break;
209cdf0e10cSrcweir
210cdf0e10cSrcweir default:
211cdf0e10cSrcweir FixedImage::KeyInput( rKEvt );
212cdf0e10cSrcweir }
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
SetURL(const String & rNewURL)215cdf0e10cSrcweir void FixedHyperlinkImage::SetURL( const String& rNewURL )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir m_sURL = rNewURL;
218cdf0e10cSrcweir SetQuickHelpText( m_sURL );
219cdf0e10cSrcweir }
220cdf0e10cSrcweir
GetURL() const221cdf0e10cSrcweir String FixedHyperlinkImage::GetURL() const
222cdf0e10cSrcweir {
223cdf0e10cSrcweir return m_sURL;
224cdf0e10cSrcweir }
225cdf0e10cSrcweir
226cdf0e10cSrcweir //.........................................................................
227cdf0e10cSrcweir } // namespace svt
228cdf0e10cSrcweir //.........................................................................
229cdf0e10cSrcweir
230