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