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 "AccHyperLink.h" 32*5fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessible.hpp> 33*5fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleAction.hpp> 34*5fdc4257SSteve Yin #include "MAccessible.h" 35*5fdc4257SSteve Yin 36*5fdc4257SSteve Yin using namespace com::sun::star::accessibility; 37*5fdc4257SSteve Yin using namespace com::sun::star::uno; 38*5fdc4257SSteve Yin using namespace com::sun::star::awt; 39*5fdc4257SSteve Yin 40*5fdc4257SSteve Yin /** 41*5fdc4257SSteve Yin * Returns the number of action. 42*5fdc4257SSteve Yin * 43*5fdc4257SSteve Yin * @param nActions the number of action. 44*5fdc4257SSteve Yin */ 45*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::nActions(/*[out,retval]*/long* nActions) 46*5fdc4257SSteve Yin { 47*5fdc4257SSteve Yin 48*5fdc4257SSteve Yin return CAccActionBase::nActions(nActions); 49*5fdc4257SSteve Yin } 50*5fdc4257SSteve Yin 51*5fdc4257SSteve Yin /** 52*5fdc4257SSteve Yin * Performs specified action on the object. 53*5fdc4257SSteve Yin * 54*5fdc4257SSteve Yin * @param actionIndex the index of action. 55*5fdc4257SSteve Yin */ 56*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::doAction(/* [in] */ long actionIndex) 57*5fdc4257SSteve Yin { 58*5fdc4257SSteve Yin 59*5fdc4257SSteve Yin return CAccActionBase::doAction(actionIndex); 60*5fdc4257SSteve Yin } 61*5fdc4257SSteve Yin 62*5fdc4257SSteve Yin /** 63*5fdc4257SSteve Yin * Gets description of specified action. 64*5fdc4257SSteve Yin * 65*5fdc4257SSteve Yin * @param actionIndex the index of action. 66*5fdc4257SSteve Yin * @param description the description string of the specified action. 67*5fdc4257SSteve Yin */ 68*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_description(long actionIndex,BSTR __RPC_FAR *description) 69*5fdc4257SSteve Yin { 70*5fdc4257SSteve Yin 71*5fdc4257SSteve Yin return CAccActionBase::get_description(actionIndex, description); 72*5fdc4257SSteve Yin } 73*5fdc4257SSteve Yin 74*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_name( long actionIndex, BSTR __RPC_FAR *name) 75*5fdc4257SSteve Yin { 76*5fdc4257SSteve Yin 77*5fdc4257SSteve Yin return CAccActionBase::get_name(actionIndex, name); 78*5fdc4257SSteve Yin } 79*5fdc4257SSteve Yin 80*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_localizedName( long actionIndex, BSTR __RPC_FAR *localizedName) 81*5fdc4257SSteve Yin { 82*5fdc4257SSteve Yin 83*5fdc4257SSteve Yin return CAccActionBase::get_name(actionIndex, localizedName); 84*5fdc4257SSteve Yin } 85*5fdc4257SSteve Yin 86*5fdc4257SSteve Yin /** 87*5fdc4257SSteve Yin * Returns key binding object (if any) associated with specified action 88*5fdc4257SSteve Yin * key binding is string. 89*5fdc4257SSteve Yin * e.g. "alt+d" (like IAccessible::get_accKeyboardShortcut). 90*5fdc4257SSteve Yin * 91*5fdc4257SSteve Yin * @param actionIndex the index of action. 92*5fdc4257SSteve Yin * @param nMaxBinding the max number of key binding. 93*5fdc4257SSteve Yin * @param keyBinding the key binding array. 94*5fdc4257SSteve Yin * @param nBinding the actual number of key binding returned. 95*5fdc4257SSteve Yin */ 96*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_keyBinding( 97*5fdc4257SSteve Yin /* [in] */ long actionIndex, 98*5fdc4257SSteve Yin /* [in] */ long nMaxBinding, 99*5fdc4257SSteve Yin /* [length_is][length_is][size_is][size_is][out] */ BSTR __RPC_FAR *__RPC_FAR *keyBinding, 100*5fdc4257SSteve Yin /* [retval][out] */ long __RPC_FAR *nBinding) 101*5fdc4257SSteve Yin { 102*5fdc4257SSteve Yin 103*5fdc4257SSteve Yin return CAccActionBase::get_keyBinding(actionIndex, nMaxBinding, keyBinding, nBinding); 104*5fdc4257SSteve Yin } 105*5fdc4257SSteve Yin 106*5fdc4257SSteve Yin /** 107*5fdc4257SSteve Yin * get an object 108*5fdc4257SSteve Yin * @param 109*5fdc4257SSteve Yin * @return Result. 110*5fdc4257SSteve Yin */ 111*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_anchor(/* [in] */ long index, 112*5fdc4257SSteve Yin /* [retval][out] */ VARIANT __RPC_FAR *anchor) 113*5fdc4257SSteve Yin { 114*5fdc4257SSteve Yin 115*5fdc4257SSteve Yin CHECK_ENABLE_INF 116*5fdc4257SSteve Yin 117*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 118*5fdc4257SSteve Yin 119*5fdc4257SSteve Yin // #CHECK# 120*5fdc4257SSteve Yin if(anchor == NULL) 121*5fdc4257SSteve Yin { 122*5fdc4257SSteve Yin return E_INVALIDARG; 123*5fdc4257SSteve Yin } 124*5fdc4257SSteve Yin // #CHECK XInterface# 125*5fdc4257SSteve Yin if(!pRXLink.is()) 126*5fdc4257SSteve Yin { 127*5fdc4257SSteve Yin return E_FAIL; 128*5fdc4257SSteve Yin } 129*5fdc4257SSteve Yin // Get Any type value via pRXLink. 130*5fdc4257SSteve Yin ::com::sun::star::uno::Any anyVal = GetXInterface()->getAccessibleActionAnchor(index); 131*5fdc4257SSteve Yin // Convert Any to VARIANT. 132*5fdc4257SSteve Yin CMAccessible::ConvertAnyToVariant(anyVal, anchor); 133*5fdc4257SSteve Yin 134*5fdc4257SSteve Yin return S_OK; 135*5fdc4257SSteve Yin 136*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 137*5fdc4257SSteve Yin } 138*5fdc4257SSteve Yin 139*5fdc4257SSteve Yin /** 140*5fdc4257SSteve Yin * get an object 141*5fdc4257SSteve Yin * @param 142*5fdc4257SSteve Yin * @return Result. 143*5fdc4257SSteve Yin */ 144*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_anchorTarget(/* [in] */ long index, 145*5fdc4257SSteve Yin /* [retval][out] */ VARIANT __RPC_FAR *anchorTarget) 146*5fdc4257SSteve Yin { 147*5fdc4257SSteve Yin 148*5fdc4257SSteve Yin 149*5fdc4257SSteve Yin CHECK_ENABLE_INF 150*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 151*5fdc4257SSteve Yin 152*5fdc4257SSteve Yin // #CHECK# 153*5fdc4257SSteve Yin if(anchorTarget == NULL) 154*5fdc4257SSteve Yin { 155*5fdc4257SSteve Yin return E_INVALIDARG; 156*5fdc4257SSteve Yin } 157*5fdc4257SSteve Yin // #CHECK XInterface# 158*5fdc4257SSteve Yin if(!pRXLink.is()) 159*5fdc4257SSteve Yin { 160*5fdc4257SSteve Yin return E_FAIL; 161*5fdc4257SSteve Yin } 162*5fdc4257SSteve Yin // Get Any type value via pRXLink. 163*5fdc4257SSteve Yin ::com::sun::star::uno::Any anyVal = GetXInterface()->getAccessibleActionObject(index); 164*5fdc4257SSteve Yin // Convert Any to VARIANT. 165*5fdc4257SSteve Yin CMAccessible::ConvertAnyToVariant(anyVal, anchorTarget); 166*5fdc4257SSteve Yin 167*5fdc4257SSteve Yin return S_OK; 168*5fdc4257SSteve Yin 169*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 170*5fdc4257SSteve Yin } 171*5fdc4257SSteve Yin 172*5fdc4257SSteve Yin 173*5fdc4257SSteve Yin /** 174*5fdc4257SSteve Yin * Get start index. 175*5fdc4257SSteve Yin * @param index Variant to get start index. 176*5fdc4257SSteve Yin * @return Result. 177*5fdc4257SSteve Yin */ 178*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_startIndex(/* [retval][out] */ long __RPC_FAR *index) 179*5fdc4257SSteve Yin { 180*5fdc4257SSteve Yin 181*5fdc4257SSteve Yin CHECK_ENABLE_INF 182*5fdc4257SSteve Yin 183*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 184*5fdc4257SSteve Yin 185*5fdc4257SSteve Yin // #CHECK# 186*5fdc4257SSteve Yin if(index == NULL) 187*5fdc4257SSteve Yin { 188*5fdc4257SSteve Yin return E_INVALIDARG; 189*5fdc4257SSteve Yin } 190*5fdc4257SSteve Yin *index = GetXInterface()->getStartIndex(); 191*5fdc4257SSteve Yin 192*5fdc4257SSteve Yin return S_OK; 193*5fdc4257SSteve Yin 194*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 195*5fdc4257SSteve Yin } 196*5fdc4257SSteve Yin 197*5fdc4257SSteve Yin /** 198*5fdc4257SSteve Yin * Get start index. 199*5fdc4257SSteve Yin * @param index Variant to get end index. 200*5fdc4257SSteve Yin * @return Result. 201*5fdc4257SSteve Yin */ 202*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_endIndex(/* [retval][out] */ long __RPC_FAR *index) 203*5fdc4257SSteve Yin { 204*5fdc4257SSteve Yin 205*5fdc4257SSteve Yin CHECK_ENABLE_INF 206*5fdc4257SSteve Yin 207*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 208*5fdc4257SSteve Yin 209*5fdc4257SSteve Yin // #CHECK# 210*5fdc4257SSteve Yin if(index == NULL) 211*5fdc4257SSteve Yin { 212*5fdc4257SSteve Yin return E_INVALIDARG; 213*5fdc4257SSteve Yin } 214*5fdc4257SSteve Yin // #CHECK XInterface# 215*5fdc4257SSteve Yin if(!pRXLink.is()) 216*5fdc4257SSteve Yin { 217*5fdc4257SSteve Yin return E_FAIL; 218*5fdc4257SSteve Yin } 219*5fdc4257SSteve Yin *index = GetXInterface()->getEndIndex(); 220*5fdc4257SSteve Yin 221*5fdc4257SSteve Yin return S_OK; 222*5fdc4257SSteve Yin 223*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 224*5fdc4257SSteve Yin } 225*5fdc4257SSteve Yin 226*5fdc4257SSteve Yin /** 227*5fdc4257SSteve Yin * Judge if the hyperlink is valid. 228*5fdc4257SSteve Yin * @param valid Variant to get validity. 229*5fdc4257SSteve Yin * @return Result. 230*5fdc4257SSteve Yin */ 231*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::get_valid(/* [retval][out] */ boolean __RPC_FAR *valid) 232*5fdc4257SSteve Yin { 233*5fdc4257SSteve Yin 234*5fdc4257SSteve Yin CHECK_ENABLE_INF 235*5fdc4257SSteve Yin 236*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 237*5fdc4257SSteve Yin 238*5fdc4257SSteve Yin // #CHECK# 239*5fdc4257SSteve Yin if(valid == NULL) 240*5fdc4257SSteve Yin { 241*5fdc4257SSteve Yin return E_INVALIDARG; 242*5fdc4257SSteve Yin } 243*5fdc4257SSteve Yin // #CHECK XInterface# 244*5fdc4257SSteve Yin if(!pRXLink.is()) 245*5fdc4257SSteve Yin { 246*5fdc4257SSteve Yin return E_FAIL; 247*5fdc4257SSteve Yin } 248*5fdc4257SSteve Yin *valid = GetXInterface()->isValid(); 249*5fdc4257SSteve Yin 250*5fdc4257SSteve Yin return S_OK; 251*5fdc4257SSteve Yin 252*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 253*5fdc4257SSteve Yin } 254*5fdc4257SSteve Yin 255*5fdc4257SSteve Yin /** 256*5fdc4257SSteve Yin * Put UNO interface. 257*5fdc4257SSteve Yin * @param pXInterface XAccessibleContext interface. 258*5fdc4257SSteve Yin * @return Result. 259*5fdc4257SSteve Yin */ 260*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::put_XInterface(long pXInterface) 261*5fdc4257SSteve Yin { 262*5fdc4257SSteve Yin 263*5fdc4257SSteve Yin CHECK_ENABLE_INF 264*5fdc4257SSteve Yin 265*5fdc4257SSteve Yin ENTER_PROTECTED_BLOCK 266*5fdc4257SSteve Yin 267*5fdc4257SSteve Yin CAccActionBase::put_XInterface(pXInterface); 268*5fdc4257SSteve Yin //special query. 269*5fdc4257SSteve Yin if(pUNOInterface != NULL) 270*5fdc4257SSteve Yin { 271*5fdc4257SSteve Yin Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext(); 272*5fdc4257SSteve Yin if( !pRContext.is() ) 273*5fdc4257SSteve Yin { 274*5fdc4257SSteve Yin return E_FAIL; 275*5fdc4257SSteve Yin } 276*5fdc4257SSteve Yin Reference<XAccessibleHyperlink> pRXI(pRContext,UNO_QUERY); 277*5fdc4257SSteve Yin if( !pRXI.is() ) 278*5fdc4257SSteve Yin { 279*5fdc4257SSteve Yin pRXLink = NULL; 280*5fdc4257SSteve Yin } 281*5fdc4257SSteve Yin else 282*5fdc4257SSteve Yin pRXLink = pRXI.get(); 283*5fdc4257SSteve Yin } 284*5fdc4257SSteve Yin return S_OK; 285*5fdc4257SSteve Yin 286*5fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK 287*5fdc4257SSteve Yin } 288*5fdc4257SSteve Yin 289*5fdc4257SSteve Yin /** 290*5fdc4257SSteve Yin * Put UNO interface. 291*5fdc4257SSteve Yin * @param pXSubInterface XAccessibleHyperlink interface. 292*5fdc4257SSteve Yin * @return Result. 293*5fdc4257SSteve Yin */ 294*5fdc4257SSteve Yin STDMETHODIMP CAccHyperLink::put_XSubInterface(long pXSubInterface) 295*5fdc4257SSteve Yin { 296*5fdc4257SSteve Yin 297*5fdc4257SSteve Yin CHECK_ENABLE_INF 298*5fdc4257SSteve Yin 299*5fdc4257SSteve Yin pRXLink = (XAccessibleHyperlink*)pXSubInterface; 300*5fdc4257SSteve Yin pRXAct = (XAccessibleAction*)pXSubInterface; 301*5fdc4257SSteve Yin 302*5fdc4257SSteve Yin return S_OK; 303*5fdc4257SSteve Yin } 304