1*5fdc4257SSteve Yin /*************************************************************************
2*5fdc4257SSteve Yin  *
3*5fdc4257SSteve Yin  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*5fdc4257SSteve Yin  *
5*5fdc4257SSteve Yin  * Copyright IBM Corporation 2010.
6*5fdc4257SSteve Yin  * Copyright 2000, 2010 Oracle and/or its affiliates.
7*5fdc4257SSteve Yin  *
8*5fdc4257SSteve Yin  * OpenOffice.org - a multi-platform office productivity suite
9*5fdc4257SSteve Yin  *
10*5fdc4257SSteve Yin  * This file is part of OpenOffice.org.
11*5fdc4257SSteve Yin  *
12*5fdc4257SSteve Yin  * OpenOffice.org is free software: you can redistribute it and/or modify
13*5fdc4257SSteve Yin  * it under the terms of the GNU Lesser General Public License version 3
14*5fdc4257SSteve Yin  * only, as published by the Free Software Foundation.
15*5fdc4257SSteve Yin  *
16*5fdc4257SSteve Yin  * OpenOffice.org is distributed in the hope that it will be useful,
17*5fdc4257SSteve Yin  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18*5fdc4257SSteve Yin  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19*5fdc4257SSteve Yin  * GNU Lesser General Public License version 3 for more details
20*5fdc4257SSteve Yin  * (a copy is included in the LICENSE file that accompanied this code).
21*5fdc4257SSteve Yin  *
22*5fdc4257SSteve Yin  * You should have received a copy of the GNU Lesser General Public License
23*5fdc4257SSteve Yin  * version 3 along with OpenOffice.org.  If not, see
24*5fdc4257SSteve Yin  * <http://www.openoffice.org/license.html>
25*5fdc4257SSteve Yin  * for a copy of the LGPLv3 License.
26*5fdc4257SSteve Yin  *
27*5fdc4257SSteve Yin  ************************************************************************/
28*5fdc4257SSteve Yin 
29*5fdc4257SSteve Yin #include "stdafx.h"
30*5fdc4257SSteve Yin #include "UAccCOM2.h"
31*5fdc4257SSteve Yin #include "AccHypertext.h"
32*5fdc4257SSteve Yin 
33*5fdc4257SSteve Yin using namespace com::sun::star::accessibility;
34*5fdc4257SSteve Yin using namespace com::sun::star::uno;
35*5fdc4257SSteve Yin 
36*5fdc4257SSteve Yin /////////////////////////////////////////////////////////////////////////////
37*5fdc4257SSteve Yin //
38*5fdc4257SSteve Yin /**
39*5fdc4257SSteve Yin    * Get special selection.
40*5fdc4257SSteve Yin    * @param startOffset Start selection offset.
41*5fdc4257SSteve Yin    * @param endOffset   End selection offset.
42*5fdc4257SSteve Yin    * @param success     Variant to accept the result of if the method call is successful.
43*5fdc4257SSteve Yin    * @return Result.
44*5fdc4257SSteve Yin */
45*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::addSelection(long startOffset, long endOffset)
46*5fdc4257SSteve Yin {
47*5fdc4257SSteve Yin 
48*5fdc4257SSteve Yin     return CAccTextBase::get_addSelection(startOffset, endOffset);
49*5fdc4257SSteve Yin }
50*5fdc4257SSteve Yin 
51*5fdc4257SSteve Yin 
52*5fdc4257SSteve Yin /**
53*5fdc4257SSteve Yin    * Get special attributes.
54*5fdc4257SSteve Yin    * @param offset Offset.
55*5fdc4257SSteve Yin    * @param startOffset Variant to accept start offset.
56*5fdc4257SSteve Yin    * @param endOffset   Variant to accept end offset.
57*5fdc4257SSteve Yin    * @param textAttributes     Variant to accept attributes.
58*5fdc4257SSteve Yin    * @return Result.
59*5fdc4257SSteve Yin */
60*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_attributes(long offset, long * startOffset, long * endOffset, BSTR * textAttributes)
61*5fdc4257SSteve Yin {
62*5fdc4257SSteve Yin 
63*5fdc4257SSteve Yin     return CAccTextBase::get_attributes(offset, startOffset, endOffset, textAttributes);
64*5fdc4257SSteve Yin }
65*5fdc4257SSteve Yin 
66*5fdc4257SSteve Yin /**
67*5fdc4257SSteve Yin    * Get caret position.
68*5fdc4257SSteve Yin    * @param offset     Variant to accept caret offset.
69*5fdc4257SSteve Yin    * @return Result.
70*5fdc4257SSteve Yin */
71*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_caretOffset(long * offset)
72*5fdc4257SSteve Yin {
73*5fdc4257SSteve Yin 
74*5fdc4257SSteve Yin     return CAccTextBase::get_caretOffset(offset);
75*5fdc4257SSteve Yin }
76*5fdc4257SSteve Yin 
77*5fdc4257SSteve Yin /**
78*5fdc4257SSteve Yin    * Get character count.
79*5fdc4257SSteve Yin    * @param nCharacters  Variant to accept character count.
80*5fdc4257SSteve Yin    * @return Result.
81*5fdc4257SSteve Yin */
82*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterCount(long * nCharacters)
83*5fdc4257SSteve Yin {
84*5fdc4257SSteve Yin 
85*5fdc4257SSteve Yin     return CAccTextBase::get_characterCount(nCharacters);
86*5fdc4257SSteve Yin }
87*5fdc4257SSteve Yin 
88*5fdc4257SSteve Yin /**
89*5fdc4257SSteve Yin    * Get character extents.
90*5fdc4257SSteve Yin    * @param offset  Offset.
91*5fdc4257SSteve Yin    * @param x Variant to accpet x position.
92*5fdc4257SSteve Yin    * @param y Variant to accpet y position.
93*5fdc4257SSteve Yin    * @param width Variant to accpet width.
94*5fdc4257SSteve Yin    * @param Height Variant to accpet height.
95*5fdc4257SSteve Yin    * @return Result.
96*5fdc4257SSteve Yin */
97*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterExtents(long offset, IA2CoordinateType coordType, long * x, long * y, long * width, long * height)
98*5fdc4257SSteve Yin {
99*5fdc4257SSteve Yin 
100*5fdc4257SSteve Yin     return CAccTextBase::get_characterExtents(offset, coordType, x, y, width, height);
101*5fdc4257SSteve Yin }
102*5fdc4257SSteve Yin 
103*5fdc4257SSteve Yin /**
104*5fdc4257SSteve Yin    * Get slections count.
105*5fdc4257SSteve Yin    * @param nSelections Variant to accpet slections count.
106*5fdc4257SSteve Yin    * @return Result.
107*5fdc4257SSteve Yin */
108*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nSelections(long * nSelections)
109*5fdc4257SSteve Yin {
110*5fdc4257SSteve Yin 
111*5fdc4257SSteve Yin     return CAccTextBase::get_nSelections(nSelections);
112*5fdc4257SSteve Yin }
113*5fdc4257SSteve Yin 
114*5fdc4257SSteve Yin /**
115*5fdc4257SSteve Yin    * Get offset of some special point.
116*5fdc4257SSteve Yin    * @param x X position of one point.
117*5fdc4257SSteve Yin    * @param x Y position of one point.
118*5fdc4257SSteve Yin    * @param coordType Type.
119*5fdc4257SSteve Yin    * @param offset Variant to accept offset.
120*5fdc4257SSteve Yin    * @return Result.
121*5fdc4257SSteve Yin */
122*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_offsetAtPoint(long x, long y, IA2CoordinateType coordType, long * offset)
123*5fdc4257SSteve Yin {
124*5fdc4257SSteve Yin     return CAccTextBase::get_offsetAtPoint(x, y, coordType, offset);
125*5fdc4257SSteve Yin }
126*5fdc4257SSteve Yin 
127*5fdc4257SSteve Yin /**
128*5fdc4257SSteve Yin    * Get selection range.
129*5fdc4257SSteve Yin    * @param selection selection count.
130*5fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset of special selection.
131*5fdc4257SSteve Yin    * @param endOffset Variant to accept the end offset of special selection.
132*5fdc4257SSteve Yin    * @return Result.
133*5fdc4257SSteve Yin */
134*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_selection(long selection, long * startOffset, long * endOffset)
135*5fdc4257SSteve Yin {
136*5fdc4257SSteve Yin 
137*5fdc4257SSteve Yin     return CAccTextBase::get_selection(selection, startOffset, endOffset);
138*5fdc4257SSteve Yin }
139*5fdc4257SSteve Yin 
140*5fdc4257SSteve Yin /**
141*5fdc4257SSteve Yin    * Get special text.
142*5fdc4257SSteve Yin    * @param startOffset Start position of special range.
143*5fdc4257SSteve Yin    * @param endOffset   End position of special range.
144*5fdc4257SSteve Yin    * @param text        Variant to accept the text of special range.
145*5fdc4257SSteve Yin    * @return Result.
146*5fdc4257SSteve Yin */
147*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_text(long startOffset, long endOffset, BSTR * text)
148*5fdc4257SSteve Yin {
149*5fdc4257SSteve Yin 
150*5fdc4257SSteve Yin     return CAccTextBase::get_text(startOffset, endOffset, text);
151*5fdc4257SSteve Yin }
152*5fdc4257SSteve Yin 
153*5fdc4257SSteve Yin /**
154*5fdc4257SSteve Yin    * Get special text before some position.
155*5fdc4257SSteve Yin    * @param offset Special position.
156*5fdc4257SSteve Yin    * @param boundaryType Boundary type.
157*5fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
158*5fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
159*5fdc4257SSteve Yin    * @param text        Variant to accept the special text.
160*5fdc4257SSteve Yin    * @return Result.
161*5fdc4257SSteve Yin */
162*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textBeforeOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
163*5fdc4257SSteve Yin {
164*5fdc4257SSteve Yin 
165*5fdc4257SSteve Yin     return CAccTextBase::get_textBeforeOffset(offset, boundaryType,
166*5fdc4257SSteve Yin             startOffset, endOffset, text);
167*5fdc4257SSteve Yin }
168*5fdc4257SSteve Yin 
169*5fdc4257SSteve Yin /**
170*5fdc4257SSteve Yin    * Get special text after some position.
171*5fdc4257SSteve Yin    * @param offset Special position.
172*5fdc4257SSteve Yin    * @param boundaryType Boundary type.
173*5fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
174*5fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
175*5fdc4257SSteve Yin    * @param text        Variant to accept the special text.
176*5fdc4257SSteve Yin    * @return Result.
177*5fdc4257SSteve Yin */
178*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAfterOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
179*5fdc4257SSteve Yin {
180*5fdc4257SSteve Yin 
181*5fdc4257SSteve Yin     return CAccTextBase::get_textAfterOffset(offset, boundaryType,
182*5fdc4257SSteve Yin             startOffset, endOffset, text);
183*5fdc4257SSteve Yin }
184*5fdc4257SSteve Yin 
185*5fdc4257SSteve Yin /**
186*5fdc4257SSteve Yin    * Get special text at some position.
187*5fdc4257SSteve Yin    * @param offset Special position.
188*5fdc4257SSteve Yin    * @param boundaryType Boundary type.
189*5fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
190*5fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
191*5fdc4257SSteve Yin    * @param text        Variant to accept the special text.
192*5fdc4257SSteve Yin    * @return Result.
193*5fdc4257SSteve Yin */
194*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAtOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
195*5fdc4257SSteve Yin {
196*5fdc4257SSteve Yin 
197*5fdc4257SSteve Yin     return CAccTextBase::get_textAtOffset(offset, boundaryType,
198*5fdc4257SSteve Yin                                           startOffset, endOffset, text);
199*5fdc4257SSteve Yin }
200*5fdc4257SSteve Yin 
201*5fdc4257SSteve Yin /**
202*5fdc4257SSteve Yin    * Remove selection.
203*5fdc4257SSteve Yin    * @param selectionIndex Special selection index
204*5fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
205*5fdc4257SSteve Yin    * @return Result.
206*5fdc4257SSteve Yin */
207*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::removeSelection(long selectionIndex)
208*5fdc4257SSteve Yin {
209*5fdc4257SSteve Yin 
210*5fdc4257SSteve Yin     return CAccTextBase::removeSelection(selectionIndex);
211*5fdc4257SSteve Yin }
212*5fdc4257SSteve Yin 
213*5fdc4257SSteve Yin /**
214*5fdc4257SSteve Yin    * Set caret position.
215*5fdc4257SSteve Yin    * @param offset Special position.
216*5fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
217*5fdc4257SSteve Yin    * @return Result.
218*5fdc4257SSteve Yin */
219*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setCaretOffset(long offset)
220*5fdc4257SSteve Yin {
221*5fdc4257SSteve Yin 
222*5fdc4257SSteve Yin     return CAccTextBase::setCaretOffset(offset);
223*5fdc4257SSteve Yin }
224*5fdc4257SSteve Yin 
225*5fdc4257SSteve Yin /**
226*5fdc4257SSteve Yin    * Set special selection.
227*5fdc4257SSteve Yin    * @param selectionIndex Special selection index.
228*5fdc4257SSteve Yin    * @param startOffset start position.
229*5fdc4257SSteve Yin    * @param endOffset end position.
230*5fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
231*5fdc4257SSteve Yin    * @return Result.
232*5fdc4257SSteve Yin */
233*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setSelection(long selectionIndex, long startOffset, long endOffset)
234*5fdc4257SSteve Yin {
235*5fdc4257SSteve Yin 
236*5fdc4257SSteve Yin     return CAccTextBase::setSelection(selectionIndex, startOffset,
237*5fdc4257SSteve Yin                                       endOffset);
238*5fdc4257SSteve Yin }
239*5fdc4257SSteve Yin 
240*5fdc4257SSteve Yin /**
241*5fdc4257SSteve Yin    * Get characters count.
242*5fdc4257SSteve Yin    * @param nCharacters Variant to accept the characters count.
243*5fdc4257SSteve Yin    * @return Result.
244*5fdc4257SSteve Yin */
245*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nCharacters(long * nCharacters)
246*5fdc4257SSteve Yin {
247*5fdc4257SSteve Yin 
248*5fdc4257SSteve Yin     return CAccTextBase::get_nCharacters(nCharacters);
249*5fdc4257SSteve Yin }
250*5fdc4257SSteve Yin 
251*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_newText( IA2TextSegment *newText)
252*5fdc4257SSteve Yin {
253*5fdc4257SSteve Yin     return CAccTextBase::get_newText(newText);
254*5fdc4257SSteve Yin }
255*5fdc4257SSteve Yin 
256*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_oldText( IA2TextSegment *oldText)
257*5fdc4257SSteve Yin {
258*5fdc4257SSteve Yin     return CAccTextBase::get_oldText(oldText);
259*5fdc4257SSteve Yin }
260*5fdc4257SSteve Yin 
261*5fdc4257SSteve Yin /**
262*5fdc4257SSteve Yin    * Scroll to special sub-string .
263*5fdc4257SSteve Yin    * @param startIndex Start index of sub string.
264*5fdc4257SSteve Yin    * @param endIndex   End index of sub string.
265*5fdc4257SSteve Yin    * @return Result.
266*5fdc4257SSteve Yin */
267*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringToPoint(long startIndex, long endIndex,enum IA2CoordinateType coordinateType, long x, long y )
268*5fdc4257SSteve Yin {
269*5fdc4257SSteve Yin 
270*5fdc4257SSteve Yin     return CAccTextBase::scrollSubstringToPoint(startIndex, endIndex, coordinateType, x, y);
271*5fdc4257SSteve Yin }
272*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringTo(long startIndex, long endIndex,enum IA2ScrollType scrollType)
273*5fdc4257SSteve Yin {
274*5fdc4257SSteve Yin 
275*5fdc4257SSteve Yin     return CAccTextBase::scrollSubstringTo(startIndex, endIndex,scrollType);
276*5fdc4257SSteve Yin }
277*5fdc4257SSteve Yin 
278*5fdc4257SSteve Yin /**
279*5fdc4257SSteve Yin    * Get hyperlink count.
280*5fdc4257SSteve Yin    * @param hyperlinkCount Variant to accpet hyperlink count.
281*5fdc4257SSteve Yin    * @return Result.
282*5fdc4257SSteve Yin */
283*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nHyperlinks(long *hyperlinkCount)
284*5fdc4257SSteve Yin {
285*5fdc4257SSteve Yin 
286*5fdc4257SSteve Yin 	CHECK_ENABLE_INF
287*5fdc4257SSteve Yin 
288*5fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
289*5fdc4257SSteve Yin 
290*5fdc4257SSteve Yin     // #CHECK#
291*5fdc4257SSteve Yin     if(hyperlinkCount == NULL)
292*5fdc4257SSteve Yin         return E_INVALIDARG;
293*5fdc4257SSteve Yin     // #CHECK XInterface#
294*5fdc4257SSteve Yin     if(!pHyperText.is())
295*5fdc4257SSteve Yin     {
296*5fdc4257SSteve Yin         return E_FAIL;
297*5fdc4257SSteve Yin     }
298*5fdc4257SSteve Yin 
299*5fdc4257SSteve Yin     *hyperlinkCount = pHyperText->getHyperLinkCount();
300*5fdc4257SSteve Yin     return S_OK;
301*5fdc4257SSteve Yin 
302*5fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
303*5fdc4257SSteve Yin }
304*5fdc4257SSteve Yin 
305*5fdc4257SSteve Yin /**
306*5fdc4257SSteve Yin    * Get special hyperlink.
307*5fdc4257SSteve Yin    * @param index Special hyperlink index.
308*5fdc4257SSteve Yin    * @param hyperlink Variant to accept special hyperlink via index.
309*5fdc4257SSteve Yin    * @return Result.
310*5fdc4257SSteve Yin */
311*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlink(long index,IAccessibleHyperlink **hyperlink)
312*5fdc4257SSteve Yin {
313*5fdc4257SSteve Yin 
314*5fdc4257SSteve Yin 	CHECK_ENABLE_INF
315*5fdc4257SSteve Yin 
316*5fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
317*5fdc4257SSteve Yin 
318*5fdc4257SSteve Yin     // #CHECK#
319*5fdc4257SSteve Yin     if(hyperlink == NULL)
320*5fdc4257SSteve Yin         return E_INVALIDARG;
321*5fdc4257SSteve Yin     // #CHECK XInterface#
322*5fdc4257SSteve Yin     if(!pHyperText.is())
323*5fdc4257SSteve Yin     {
324*5fdc4257SSteve Yin         return E_FAIL;
325*5fdc4257SSteve Yin     }
326*5fdc4257SSteve Yin 
327*5fdc4257SSteve Yin     Reference<XAccessibleHyperlink> pRLink = pHyperText->getHyperLink(index);
328*5fdc4257SSteve Yin     if(!pRLink.is())
329*5fdc4257SSteve Yin     {
330*5fdc4257SSteve Yin         *hyperlink = NULL;
331*5fdc4257SSteve Yin         return E_FAIL;
332*5fdc4257SSteve Yin     }
333*5fdc4257SSteve Yin 
334*5fdc4257SSteve Yin     IAccessibleHyperlink* plink = NULL;
335*5fdc4257SSteve Yin     HRESULT hr = CoCreateInstance( CLSID_AccHyperLink, NULL, CLSCTX_SERVER ,
336*5fdc4257SSteve Yin                                    IID_IAccessibleHyperlink,
337*5fdc4257SSteve Yin                                    (void **)&plink);
338*5fdc4257SSteve Yin     if( SUCCEEDED(hr) )
339*5fdc4257SSteve Yin     {
340*5fdc4257SSteve Yin         IUNOXWrapper* wrapper = NULL;
341*5fdc4257SSteve Yin         plink->QueryInterface(IID_IUNOXWrapper, (void**)&wrapper);
342*5fdc4257SSteve Yin         if(wrapper)
343*5fdc4257SSteve Yin         {
344*5fdc4257SSteve Yin             wrapper->put_XSubInterface((long)pRLink.get()/*pXI*/);
345*5fdc4257SSteve Yin             wrapper->Release();
346*5fdc4257SSteve Yin         }
347*5fdc4257SSteve Yin         *hyperlink = plink;
348*5fdc4257SSteve Yin         return S_OK;
349*5fdc4257SSteve Yin     }
350*5fdc4257SSteve Yin 
351*5fdc4257SSteve Yin     return E_FAIL;
352*5fdc4257SSteve Yin 
353*5fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
354*5fdc4257SSteve Yin }
355*5fdc4257SSteve Yin 
356*5fdc4257SSteve Yin /**
357*5fdc4257SSteve Yin    * Returns the index of the hyperlink that is associated with this character index.
358*5fdc4257SSteve Yin    * @param charIndex Special char index.
359*5fdc4257SSteve Yin    * @param hyperlinkIndex Variant to accept special hyperlink index.
360*5fdc4257SSteve Yin    * @return Result.
361*5fdc4257SSteve Yin */
362*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlinkIndex(long charIndex, long *hyperlinkIndex)
363*5fdc4257SSteve Yin {
364*5fdc4257SSteve Yin 
365*5fdc4257SSteve Yin 	CHECK_ENABLE_INF
366*5fdc4257SSteve Yin 
367*5fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
368*5fdc4257SSteve Yin 
369*5fdc4257SSteve Yin     // #CHECK#
370*5fdc4257SSteve Yin     if(hyperlinkIndex == NULL)
371*5fdc4257SSteve Yin         return E_INVALIDARG;
372*5fdc4257SSteve Yin     // #CHECK XInterface#
373*5fdc4257SSteve Yin     if(!pHyperText.is())
374*5fdc4257SSteve Yin     {
375*5fdc4257SSteve Yin         return E_FAIL;
376*5fdc4257SSteve Yin     }
377*5fdc4257SSteve Yin 
378*5fdc4257SSteve Yin     *hyperlinkIndex = pHyperText->getHyperLinkIndex(charIndex);
379*5fdc4257SSteve Yin     return S_OK;
380*5fdc4257SSteve Yin 
381*5fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
382*5fdc4257SSteve Yin }
383*5fdc4257SSteve Yin 
384*5fdc4257SSteve Yin /**
385*5fdc4257SSteve Yin    * Put UNO interface.
386*5fdc4257SSteve Yin    * @param pXInterface UNO interface.
387*5fdc4257SSteve Yin    * @return Result.
388*5fdc4257SSteve Yin */
389*5fdc4257SSteve Yin STDMETHODIMP CAccHypertext::put_XInterface(long pXInterface)
390*5fdc4257SSteve Yin {
391*5fdc4257SSteve Yin 
392*5fdc4257SSteve Yin 
393*5fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
394*5fdc4257SSteve Yin 
395*5fdc4257SSteve Yin     CAccTextBase::put_XInterface(pXInterface);
396*5fdc4257SSteve Yin     //special query.
397*5fdc4257SSteve Yin     if(pUNOInterface == NULL)
398*5fdc4257SSteve Yin         return E_FAIL;
399*5fdc4257SSteve Yin     Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
400*5fdc4257SSteve Yin     if( !pRContext.is() )
401*5fdc4257SSteve Yin     {
402*5fdc4257SSteve Yin         return E_FAIL;
403*5fdc4257SSteve Yin     }
404*5fdc4257SSteve Yin     Reference<XAccessibleHypertext> pRXI(pRContext,UNO_QUERY);
405*5fdc4257SSteve Yin     if( !pRXI.is() )
406*5fdc4257SSteve Yin         pHyperText = NULL;
407*5fdc4257SSteve Yin     else
408*5fdc4257SSteve Yin         pHyperText = pRXI.get();
409*5fdc4257SSteve Yin     return S_OK;
410*5fdc4257SSteve Yin 
411*5fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
412*5fdc4257SSteve Yin }
413