13a700b0aSSteve Yin /**************************************************************
23a700b0aSSteve Yin  *
33a700b0aSSteve Yin  * Licensed to the Apache Software Foundation (ASF) under one
43a700b0aSSteve Yin  * or more contributor license agreements.  See the NOTICE file
53a700b0aSSteve Yin  * distributed with this work for additional information
63a700b0aSSteve Yin  * regarding copyright ownership.  The ASF licenses this file
73a700b0aSSteve Yin  * to you under the Apache License, Version 2.0 (the
83a700b0aSSteve Yin  * "License"); you may not use this file except in compliance
93a700b0aSSteve Yin  * with the License.  You may obtain a copy of the License at
103a700b0aSSteve Yin  *
113a700b0aSSteve Yin  *   http://www.apache.org/licenses/LICENSE-2.0
123a700b0aSSteve Yin  *
133a700b0aSSteve Yin  * Unless required by applicable law or agreed to in writing,
143a700b0aSSteve Yin  * software distributed under the License is distributed on an
153a700b0aSSteve Yin  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
163a700b0aSSteve Yin  * KIND, either express or implied.  See the License for the
173a700b0aSSteve Yin  * specific language governing permissions and limitations
183a700b0aSSteve Yin  * under the License.
193a700b0aSSteve Yin  *
203a700b0aSSteve Yin  *************************************************************/
215fdc4257SSteve Yin 
225fdc4257SSteve Yin #include "stdafx.h"
235fdc4257SSteve Yin #include "UAccCOM2.h"
245fdc4257SSteve Yin #include "AccHypertext.h"
255fdc4257SSteve Yin 
26*b0a7a3cfSSteve Yin #include "act.hxx"
273a700b0aSSteve Yin 
285fdc4257SSteve Yin using namespace com::sun::star::accessibility;
295fdc4257SSteve Yin using namespace com::sun::star::uno;
305fdc4257SSteve Yin 
315fdc4257SSteve Yin /////////////////////////////////////////////////////////////////////////////
325fdc4257SSteve Yin //
335fdc4257SSteve Yin /**
345fdc4257SSteve Yin    * Get special selection.
355fdc4257SSteve Yin    * @param startOffset Start selection offset.
365fdc4257SSteve Yin    * @param endOffset   End selection offset.
375fdc4257SSteve Yin    * @param success     Variant to accept the result of if the method call is successful.
385fdc4257SSteve Yin    * @return Result.
395fdc4257SSteve Yin */
addSelection(long startOffset,long endOffset)405fdc4257SSteve Yin STDMETHODIMP CAccHypertext::addSelection(long startOffset, long endOffset)
415fdc4257SSteve Yin {
425fdc4257SSteve Yin 
435fdc4257SSteve Yin     return CAccTextBase::get_addSelection(startOffset, endOffset);
445fdc4257SSteve Yin }
455fdc4257SSteve Yin 
465fdc4257SSteve Yin 
475fdc4257SSteve Yin /**
485fdc4257SSteve Yin    * Get special attributes.
495fdc4257SSteve Yin    * @param offset Offset.
505fdc4257SSteve Yin    * @param startOffset Variant to accept start offset.
515fdc4257SSteve Yin    * @param endOffset   Variant to accept end offset.
525fdc4257SSteve Yin    * @param textAttributes     Variant to accept attributes.
535fdc4257SSteve Yin    * @return Result.
545fdc4257SSteve Yin */
get_attributes(long offset,long * startOffset,long * endOffset,BSTR * textAttributes)555fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_attributes(long offset, long * startOffset, long * endOffset, BSTR * textAttributes)
565fdc4257SSteve Yin {
575fdc4257SSteve Yin 
585fdc4257SSteve Yin     return CAccTextBase::get_attributes(offset, startOffset, endOffset, textAttributes);
595fdc4257SSteve Yin }
605fdc4257SSteve Yin 
615fdc4257SSteve Yin /**
625fdc4257SSteve Yin    * Get caret position.
635fdc4257SSteve Yin    * @param offset     Variant to accept caret offset.
645fdc4257SSteve Yin    * @return Result.
655fdc4257SSteve Yin */
get_caretOffset(long * offset)665fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_caretOffset(long * offset)
675fdc4257SSteve Yin {
685fdc4257SSteve Yin 
695fdc4257SSteve Yin     return CAccTextBase::get_caretOffset(offset);
705fdc4257SSteve Yin }
715fdc4257SSteve Yin 
725fdc4257SSteve Yin /**
735fdc4257SSteve Yin    * Get character count.
745fdc4257SSteve Yin    * @param nCharacters  Variant to accept character count.
755fdc4257SSteve Yin    * @return Result.
765fdc4257SSteve Yin */
get_characterCount(long * nCharacters)775fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterCount(long * nCharacters)
785fdc4257SSteve Yin {
795fdc4257SSteve Yin 
805fdc4257SSteve Yin     return CAccTextBase::get_characterCount(nCharacters);
815fdc4257SSteve Yin }
825fdc4257SSteve Yin 
835fdc4257SSteve Yin /**
845fdc4257SSteve Yin    * Get character extents.
855fdc4257SSteve Yin    * @param offset  Offset.
865fdc4257SSteve Yin    * @param x Variant to accpet x position.
875fdc4257SSteve Yin    * @param y Variant to accpet y position.
885fdc4257SSteve Yin    * @param width Variant to accpet width.
895fdc4257SSteve Yin    * @param Height Variant to accpet height.
905fdc4257SSteve Yin    * @return Result.
915fdc4257SSteve Yin */
get_characterExtents(long offset,IA2CoordinateType coordType,long * x,long * y,long * width,long * height)925fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterExtents(long offset, IA2CoordinateType coordType, long * x, long * y, long * width, long * height)
935fdc4257SSteve Yin {
945fdc4257SSteve Yin 
955fdc4257SSteve Yin     return CAccTextBase::get_characterExtents(offset, coordType, x, y, width, height);
965fdc4257SSteve Yin }
975fdc4257SSteve Yin 
985fdc4257SSteve Yin /**
995fdc4257SSteve Yin    * Get slections count.
1005fdc4257SSteve Yin    * @param nSelections Variant to accpet slections count.
1015fdc4257SSteve Yin    * @return Result.
1025fdc4257SSteve Yin */
get_nSelections(long * nSelections)1035fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nSelections(long * nSelections)
1045fdc4257SSteve Yin {
1055fdc4257SSteve Yin 
1065fdc4257SSteve Yin     return CAccTextBase::get_nSelections(nSelections);
1075fdc4257SSteve Yin }
1085fdc4257SSteve Yin 
1095fdc4257SSteve Yin /**
1105fdc4257SSteve Yin    * Get offset of some special point.
1115fdc4257SSteve Yin    * @param x X position of one point.
1125fdc4257SSteve Yin    * @param x Y position of one point.
1135fdc4257SSteve Yin    * @param coordType Type.
1145fdc4257SSteve Yin    * @param offset Variant to accept offset.
1155fdc4257SSteve Yin    * @return Result.
1165fdc4257SSteve Yin */
get_offsetAtPoint(long x,long y,IA2CoordinateType coordType,long * offset)1175fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_offsetAtPoint(long x, long y, IA2CoordinateType coordType, long * offset)
1185fdc4257SSteve Yin {
1195fdc4257SSteve Yin     return CAccTextBase::get_offsetAtPoint(x, y, coordType, offset);
1205fdc4257SSteve Yin }
1215fdc4257SSteve Yin 
1225fdc4257SSteve Yin /**
1235fdc4257SSteve Yin    * Get selection range.
1245fdc4257SSteve Yin    * @param selection selection count.
1255fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset of special selection.
1265fdc4257SSteve Yin    * @param endOffset Variant to accept the end offset of special selection.
1275fdc4257SSteve Yin    * @return Result.
1285fdc4257SSteve Yin */
get_selection(long selection,long * startOffset,long * endOffset)1295fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_selection(long selection, long * startOffset, long * endOffset)
1305fdc4257SSteve Yin {
1315fdc4257SSteve Yin 
1325fdc4257SSteve Yin     return CAccTextBase::get_selection(selection, startOffset, endOffset);
1335fdc4257SSteve Yin }
1345fdc4257SSteve Yin 
1355fdc4257SSteve Yin /**
1365fdc4257SSteve Yin    * Get special text.
1375fdc4257SSteve Yin    * @param startOffset Start position of special range.
1385fdc4257SSteve Yin    * @param endOffset   End position of special range.
1395fdc4257SSteve Yin    * @param text        Variant to accept the text of special range.
1405fdc4257SSteve Yin    * @return Result.
1415fdc4257SSteve Yin */
get_text(long startOffset,long endOffset,BSTR * text)1425fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_text(long startOffset, long endOffset, BSTR * text)
1435fdc4257SSteve Yin {
1445fdc4257SSteve Yin 
1455fdc4257SSteve Yin     return CAccTextBase::get_text(startOffset, endOffset, text);
1465fdc4257SSteve Yin }
1475fdc4257SSteve Yin 
1485fdc4257SSteve Yin /**
1495fdc4257SSteve Yin    * Get special text before some position.
1505fdc4257SSteve Yin    * @param offset Special position.
1515fdc4257SSteve Yin    * @param boundaryType Boundary type.
1525fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1535fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1545fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1555fdc4257SSteve Yin    * @return Result.
1565fdc4257SSteve Yin */
get_textBeforeOffset(long offset,IA2TextBoundaryType boundaryType,long * startOffset,long * endOffset,BSTR * text)1575fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textBeforeOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1585fdc4257SSteve Yin {
1595fdc4257SSteve Yin 
1605fdc4257SSteve Yin     return CAccTextBase::get_textBeforeOffset(offset, boundaryType,
1615fdc4257SSteve Yin             startOffset, endOffset, text);
1625fdc4257SSteve Yin }
1635fdc4257SSteve Yin 
1645fdc4257SSteve Yin /**
1655fdc4257SSteve Yin    * Get special text after some position.
1665fdc4257SSteve Yin    * @param offset Special position.
1675fdc4257SSteve Yin    * @param boundaryType Boundary type.
1685fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1695fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1705fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1715fdc4257SSteve Yin    * @return Result.
1725fdc4257SSteve Yin */
get_textAfterOffset(long offset,IA2TextBoundaryType boundaryType,long * startOffset,long * endOffset,BSTR * text)1735fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAfterOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1745fdc4257SSteve Yin {
1755fdc4257SSteve Yin 
1765fdc4257SSteve Yin     return CAccTextBase::get_textAfterOffset(offset, boundaryType,
1775fdc4257SSteve Yin             startOffset, endOffset, text);
1785fdc4257SSteve Yin }
1795fdc4257SSteve Yin 
1805fdc4257SSteve Yin /**
1815fdc4257SSteve Yin    * Get special text at some position.
1825fdc4257SSteve Yin    * @param offset Special position.
1835fdc4257SSteve Yin    * @param boundaryType Boundary type.
1845fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1855fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1865fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1875fdc4257SSteve Yin    * @return Result.
1885fdc4257SSteve Yin */
get_textAtOffset(long offset,IA2TextBoundaryType boundaryType,long * startOffset,long * endOffset,BSTR * text)1895fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAtOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1905fdc4257SSteve Yin {
1915fdc4257SSteve Yin 
1925fdc4257SSteve Yin     return CAccTextBase::get_textAtOffset(offset, boundaryType,
1935fdc4257SSteve Yin                                           startOffset, endOffset, text);
1945fdc4257SSteve Yin }
1955fdc4257SSteve Yin 
1965fdc4257SSteve Yin /**
1975fdc4257SSteve Yin    * Remove selection.
1985fdc4257SSteve Yin    * @param selectionIndex Special selection index
1995fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
2005fdc4257SSteve Yin    * @return Result.
2015fdc4257SSteve Yin */
removeSelection(long selectionIndex)2025fdc4257SSteve Yin STDMETHODIMP CAccHypertext::removeSelection(long selectionIndex)
2035fdc4257SSteve Yin {
2045fdc4257SSteve Yin 
2055fdc4257SSteve Yin     return CAccTextBase::removeSelection(selectionIndex);
2065fdc4257SSteve Yin }
2075fdc4257SSteve Yin 
2085fdc4257SSteve Yin /**
2095fdc4257SSteve Yin    * Set caret position.
2105fdc4257SSteve Yin    * @param offset Special position.
2115fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
2125fdc4257SSteve Yin    * @return Result.
2135fdc4257SSteve Yin */
setCaretOffset(long offset)2145fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setCaretOffset(long offset)
2155fdc4257SSteve Yin {
2165fdc4257SSteve Yin 
2175fdc4257SSteve Yin     return CAccTextBase::setCaretOffset(offset);
2185fdc4257SSteve Yin }
2195fdc4257SSteve Yin 
2205fdc4257SSteve Yin /**
2215fdc4257SSteve Yin    * Set special selection.
2225fdc4257SSteve Yin    * @param selectionIndex Special selection index.
2235fdc4257SSteve Yin    * @param startOffset start position.
2245fdc4257SSteve Yin    * @param endOffset end position.
2255fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
2265fdc4257SSteve Yin    * @return Result.
2275fdc4257SSteve Yin */
setSelection(long selectionIndex,long startOffset,long endOffset)2285fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setSelection(long selectionIndex, long startOffset, long endOffset)
2295fdc4257SSteve Yin {
2305fdc4257SSteve Yin 
2315fdc4257SSteve Yin     return CAccTextBase::setSelection(selectionIndex, startOffset,
2325fdc4257SSteve Yin                                       endOffset);
2335fdc4257SSteve Yin }
2345fdc4257SSteve Yin 
2355fdc4257SSteve Yin /**
2365fdc4257SSteve Yin    * Get characters count.
2375fdc4257SSteve Yin    * @param nCharacters Variant to accept the characters count.
2385fdc4257SSteve Yin    * @return Result.
2395fdc4257SSteve Yin */
get_nCharacters(long * nCharacters)2405fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nCharacters(long * nCharacters)
2415fdc4257SSteve Yin {
2425fdc4257SSteve Yin 
2435fdc4257SSteve Yin     return CAccTextBase::get_nCharacters(nCharacters);
2445fdc4257SSteve Yin }
2455fdc4257SSteve Yin 
get_newText(IA2TextSegment * newText)2465fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_newText( IA2TextSegment *newText)
2475fdc4257SSteve Yin {
2485fdc4257SSteve Yin     return CAccTextBase::get_newText(newText);
2495fdc4257SSteve Yin }
2505fdc4257SSteve Yin 
get_oldText(IA2TextSegment * oldText)2515fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_oldText( IA2TextSegment *oldText)
2525fdc4257SSteve Yin {
2535fdc4257SSteve Yin     return CAccTextBase::get_oldText(oldText);
2545fdc4257SSteve Yin }
2555fdc4257SSteve Yin 
2565fdc4257SSteve Yin /**
2575fdc4257SSteve Yin    * Scroll to special sub-string .
2585fdc4257SSteve Yin    * @param startIndex Start index of sub string.
2595fdc4257SSteve Yin    * @param endIndex   End index of sub string.
2605fdc4257SSteve Yin    * @return Result.
2615fdc4257SSteve Yin */
scrollSubstringToPoint(long startIndex,long endIndex,enum IA2CoordinateType coordinateType,long x,long y)2625fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringToPoint(long startIndex, long endIndex,enum IA2CoordinateType coordinateType, long x, long y )
2635fdc4257SSteve Yin {
2645fdc4257SSteve Yin 
2655fdc4257SSteve Yin     return CAccTextBase::scrollSubstringToPoint(startIndex, endIndex, coordinateType, x, y);
2665fdc4257SSteve Yin }
scrollSubstringTo(long startIndex,long endIndex,enum IA2ScrollType scrollType)2675fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringTo(long startIndex, long endIndex,enum IA2ScrollType scrollType)
2685fdc4257SSteve Yin {
2695fdc4257SSteve Yin 
2705fdc4257SSteve Yin     return CAccTextBase::scrollSubstringTo(startIndex, endIndex,scrollType);
2715fdc4257SSteve Yin }
2725fdc4257SSteve Yin 
2735fdc4257SSteve Yin /**
2745fdc4257SSteve Yin    * Get hyperlink count.
2755fdc4257SSteve Yin    * @param hyperlinkCount Variant to accpet hyperlink count.
2765fdc4257SSteve Yin    * @return Result.
2775fdc4257SSteve Yin */
get_nHyperlinks(long * hyperlinkCount)2785fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nHyperlinks(long *hyperlinkCount)
2795fdc4257SSteve Yin {
2805fdc4257SSteve Yin 
2815fdc4257SSteve Yin 	CHECK_ENABLE_INF
2825fdc4257SSteve Yin 
2835fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
2845fdc4257SSteve Yin 
2855fdc4257SSteve Yin     // #CHECK#
2865fdc4257SSteve Yin     if(hyperlinkCount == NULL)
2875fdc4257SSteve Yin         return E_INVALIDARG;
2885fdc4257SSteve Yin     // #CHECK XInterface#
2895fdc4257SSteve Yin     if(!pHyperText.is())
2905fdc4257SSteve Yin     {
2915fdc4257SSteve Yin         return E_FAIL;
2925fdc4257SSteve Yin     }
2935fdc4257SSteve Yin 
2945fdc4257SSteve Yin     *hyperlinkCount = pHyperText->getHyperLinkCount();
2955fdc4257SSteve Yin     return S_OK;
2965fdc4257SSteve Yin 
2975fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
2985fdc4257SSteve Yin }
2995fdc4257SSteve Yin 
3005fdc4257SSteve Yin /**
3015fdc4257SSteve Yin    * Get special hyperlink.
3025fdc4257SSteve Yin    * @param index Special hyperlink index.
3035fdc4257SSteve Yin    * @param hyperlink Variant to accept special hyperlink via index.
3045fdc4257SSteve Yin    * @return Result.
3055fdc4257SSteve Yin */
get_hyperlink(long index,IAccessibleHyperlink ** hyperlink)3065fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlink(long index,IAccessibleHyperlink **hyperlink)
3075fdc4257SSteve Yin {
3085fdc4257SSteve Yin 
3095fdc4257SSteve Yin 	CHECK_ENABLE_INF
3105fdc4257SSteve Yin 
3115fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3125fdc4257SSteve Yin 
3135fdc4257SSteve Yin     // #CHECK#
3145fdc4257SSteve Yin     if(hyperlink == NULL)
3155fdc4257SSteve Yin         return E_INVALIDARG;
3165fdc4257SSteve Yin     // #CHECK XInterface#
3175fdc4257SSteve Yin     if(!pHyperText.is())
3185fdc4257SSteve Yin     {
3195fdc4257SSteve Yin         return E_FAIL;
3205fdc4257SSteve Yin     }
3215fdc4257SSteve Yin 
3225fdc4257SSteve Yin     Reference<XAccessibleHyperlink> pRLink = pHyperText->getHyperLink(index);
3235fdc4257SSteve Yin     if(!pRLink.is())
3245fdc4257SSteve Yin     {
3255fdc4257SSteve Yin         *hyperlink = NULL;
3265fdc4257SSteve Yin         return E_FAIL;
3275fdc4257SSteve Yin     }
3285fdc4257SSteve Yin 
3295fdc4257SSteve Yin     IAccessibleHyperlink* plink = NULL;
330*b0a7a3cfSSteve Yin 	ActivateActContext();
3313a700b0aSSteve Yin 	HRESULT hr = CoCreateInstance( CLSID_AccHyperLink, NULL, CLSCTX_SERVER ,
3325fdc4257SSteve Yin                                    IID_IAccessibleHyperlink,
3335fdc4257SSteve Yin                                    (void **)&plink);
334*b0a7a3cfSSteve Yin 	DeactivateActContext();
3355fdc4257SSteve Yin     if( SUCCEEDED(hr) )
3365fdc4257SSteve Yin     {
3375fdc4257SSteve Yin         IUNOXWrapper* wrapper = NULL;
3385fdc4257SSteve Yin         plink->QueryInterface(IID_IUNOXWrapper, (void**)&wrapper);
3395fdc4257SSteve Yin         if(wrapper)
3405fdc4257SSteve Yin         {
3415fdc4257SSteve Yin             wrapper->put_XSubInterface((long)pRLink.get()/*pXI*/);
3425fdc4257SSteve Yin             wrapper->Release();
3435fdc4257SSteve Yin         }
3445fdc4257SSteve Yin         *hyperlink = plink;
3455fdc4257SSteve Yin         return S_OK;
3465fdc4257SSteve Yin     }
3475fdc4257SSteve Yin 
3485fdc4257SSteve Yin     return E_FAIL;
3495fdc4257SSteve Yin 
3505fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
3515fdc4257SSteve Yin }
3525fdc4257SSteve Yin 
3535fdc4257SSteve Yin /**
3545fdc4257SSteve Yin    * Returns the index of the hyperlink that is associated with this character index.
3555fdc4257SSteve Yin    * @param charIndex Special char index.
3565fdc4257SSteve Yin    * @param hyperlinkIndex Variant to accept special hyperlink index.
3575fdc4257SSteve Yin    * @return Result.
3585fdc4257SSteve Yin */
get_hyperlinkIndex(long charIndex,long * hyperlinkIndex)3595fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlinkIndex(long charIndex, long *hyperlinkIndex)
3605fdc4257SSteve Yin {
3615fdc4257SSteve Yin 
3625fdc4257SSteve Yin 	CHECK_ENABLE_INF
3635fdc4257SSteve Yin 
3645fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3655fdc4257SSteve Yin 
3665fdc4257SSteve Yin     // #CHECK#
3675fdc4257SSteve Yin     if(hyperlinkIndex == NULL)
3685fdc4257SSteve Yin         return E_INVALIDARG;
3695fdc4257SSteve Yin     // #CHECK XInterface#
3705fdc4257SSteve Yin     if(!pHyperText.is())
3715fdc4257SSteve Yin     {
3725fdc4257SSteve Yin         return E_FAIL;
3735fdc4257SSteve Yin     }
3745fdc4257SSteve Yin 
3755fdc4257SSteve Yin     *hyperlinkIndex = pHyperText->getHyperLinkIndex(charIndex);
3765fdc4257SSteve Yin     return S_OK;
3775fdc4257SSteve Yin 
3785fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
3795fdc4257SSteve Yin }
3805fdc4257SSteve Yin 
3815fdc4257SSteve Yin /**
3825fdc4257SSteve Yin    * Put UNO interface.
3835fdc4257SSteve Yin    * @param pXInterface UNO interface.
3845fdc4257SSteve Yin    * @return Result.
3855fdc4257SSteve Yin */
put_XInterface(long pXInterface)3865fdc4257SSteve Yin STDMETHODIMP CAccHypertext::put_XInterface(long pXInterface)
3875fdc4257SSteve Yin {
3885fdc4257SSteve Yin 
3895fdc4257SSteve Yin 
3905fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3915fdc4257SSteve Yin 
3925fdc4257SSteve Yin     CAccTextBase::put_XInterface(pXInterface);
3935fdc4257SSteve Yin     //special query.
3945fdc4257SSteve Yin     if(pUNOInterface == NULL)
3955fdc4257SSteve Yin         return E_FAIL;
3965fdc4257SSteve Yin     Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
3975fdc4257SSteve Yin     if( !pRContext.is() )
3985fdc4257SSteve Yin     {
3995fdc4257SSteve Yin         return E_FAIL;
4005fdc4257SSteve Yin     }
4015fdc4257SSteve Yin     Reference<XAccessibleHypertext> pRXI(pRContext,UNO_QUERY);
4025fdc4257SSteve Yin     if( !pRXI.is() )
4035fdc4257SSteve Yin         pHyperText = NULL;
4045fdc4257SSteve Yin     else
4055fdc4257SSteve Yin         pHyperText = pRXI.get();
4065fdc4257SSteve Yin     return S_OK;
4075fdc4257SSteve Yin 
4085fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
4095fdc4257SSteve Yin }
410