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