1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_accessibility.hxx" 30 31 #include "accessibility/extended/AccessibleGridControlHeaderCell.hxx" 32 #include <svtools/accessibletable.hxx> 33 #include "accessibility/extended/AccessibleGridControl.hxx" 34 35 namespace accessibility 36 { 37 using namespace ::com::sun::star::accessibility; 38 using namespace ::com::sun::star::lang; 39 using namespace ::com::sun::star::uno; 40 using namespace ::svt; 41 using namespace ::svt::table; 42 43 AccessibleGridControlHeaderCell::AccessibleGridControlHeaderCell(sal_Int32 _nColumnRowId, 44 const Reference< XAccessible >& rxParent, 45 IAccessibleTable& rTable, 46 AccessibleTableControlObjType eObjType) 47 : AccessibleGridControlCell( rxParent, rTable, _nColumnRowId, 0, eObjType) 48 , m_nColumnRowId(_nColumnRowId) 49 { 50 } 51 /** Creates a new AccessibleStateSetHelper and fills it with states of the 52 current object. 53 @return 54 A filled AccessibleStateSetHelper. 55 */ 56 ::utl::AccessibleStateSetHelper* AccessibleGridControlHeaderCell::implCreateStateSetHelper() 57 { 58 ::osl::MutexGuard aGuard( getOslMutex() ); 59 ::utl::AccessibleStateSetHelper* 60 pStateSetHelper = new ::utl::AccessibleStateSetHelper; 61 62 if( isAlive() ) 63 { 64 // SHOWING done with mxParent 65 if( implIsShowing() ) 66 pStateSetHelper->AddState( AccessibleStateType::SHOWING ); 67 68 TCSolarGuard aSolarGuard; 69 pStateSetHelper->AddState( AccessibleStateType::VISIBLE ); 70 pStateSetHelper->AddState( AccessibleStateType::FOCUSABLE ); 71 pStateSetHelper->AddState( AccessibleStateType::TRANSIENT ); 72 pStateSetHelper->AddState( AccessibleStateType::SELECTABLE ); 73 74 if ( m_aTable.IsRowSelected(m_nColumnRowId) ) 75 pStateSetHelper->AddState( AccessibleStateType::SELECTED ); 76 } 77 else 78 pStateSetHelper->AddState( AccessibleStateType::DEFUNC ); 79 80 return pStateSetHelper; 81 } 82 // ----------------------------------------------------------------------------- 83 /** @return 84 The count of visible children. 85 */ 86 sal_Int32 SAL_CALL AccessibleGridControlHeaderCell::getAccessibleChildCount() 87 throw ( RuntimeException ) 88 { 89 return 0; 90 } 91 // ----------------------------------------------------------------------------- 92 93 /** @return 94 The XAccessible interface of the specified child. 95 */ 96 Reference<XAccessible > SAL_CALL AccessibleGridControlHeaderCell::getAccessibleChild( sal_Int32 ) 97 throw ( IndexOutOfBoundsException,RuntimeException ) 98 { 99 throw IndexOutOfBoundsException(); 100 } 101 // XInterface ------------------------------------------------------------- 102 103 /** Queries for a new interface. */ 104 ::com::sun::star::uno::Any SAL_CALL AccessibleGridControlHeaderCell::queryInterface( 105 const ::com::sun::star::uno::Type& rType ) 106 throw ( ::com::sun::star::uno::RuntimeException ) 107 { 108 Any aRet = AccessibleGridControlCell::queryInterface(rType); 109 return aRet; 110 } 111 112 /** Aquires the object (calls acquire() on base class). */ 113 void SAL_CALL AccessibleGridControlHeaderCell::acquire() throw () 114 { 115 AccessibleGridControlCell::acquire(); 116 } 117 118 /** Releases the object (calls release() on base class). */ 119 void SAL_CALL AccessibleGridControlHeaderCell::release() throw () 120 { 121 AccessibleGridControlCell::release(); 122 } 123 /** @return The XAccessibleContext interface of this object. */ 124 Reference< com::sun::star::accessibility::XAccessibleContext > SAL_CALL AccessibleGridControlHeaderCell::getAccessibleContext() throw ( RuntimeException ) 125 { 126 ensureIsAlive(); 127 return this; 128 } 129 130 // ----------------------------------------------------------------------------- 131 132 /** Grabs the focus to the column header. */ 133 void SAL_CALL AccessibleGridControlHeaderCell::grabFocus() 134 throw ( ::com::sun::star::uno::RuntimeException ) 135 { 136 } 137 // ----------------------------------------------------------------------------- 138 /** @return 139 The name of this class. 140 */ 141 ::rtl::OUString SAL_CALL AccessibleGridControlHeaderCell::getImplementationName() 142 throw ( ::com::sun::star::uno::RuntimeException ) 143 { 144 return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleGridControlHeaderCell" ) ); 145 } 146 // ----------------------------------------------------------------------------- 147 Rectangle AccessibleGridControlHeaderCell::implGetBoundingBox() 148 { 149 Window* pParent = m_aTable.GetAccessibleParentWindow(); 150 Rectangle aGridRect( m_aTable.GetWindowExtentsRelative( pParent ) ); 151 sal_Int32 nIndex = getAccessibleIndexInParent(); 152 Rectangle aCellRect; 153 if(m_eObjType == TCTYPE_COLUMNHEADERCELL) 154 aCellRect = m_aTable.calcHeaderCellRect(true, nIndex); 155 else 156 aCellRect = m_aTable.calcHeaderCellRect(false, nIndex); 157 return Rectangle(Point(aGridRect.Left()+aCellRect.Left(),aGridRect.Top()+aCellRect.Top()), aCellRect.GetSize()); 158 } 159 // ----------------------------------------------------------------------------- 160 161 Rectangle AccessibleGridControlHeaderCell::implGetBoundingBoxOnScreen() 162 { 163 Rectangle aGridRect( m_aTable.GetWindowExtentsRelative( NULL ) ); 164 sal_Int32 nIndex = getAccessibleIndexInParent(); 165 Rectangle aCellRect; 166 if(m_eObjType == TCTYPE_COLUMNHEADERCELL) 167 aCellRect = m_aTable.calcHeaderCellRect(true, nIndex); 168 else 169 aCellRect = m_aTable.calcHeaderCellRect(false, nIndex); 170 return Rectangle(Point(aGridRect.Left()+aCellRect.Left(),aGridRect.Top()+aCellRect.Top()), aCellRect.GetSize()); 171 } 172 // ----------------------------------------------------------------------------- 173 sal_Int32 SAL_CALL AccessibleGridControlHeaderCell::getAccessibleIndexInParent() 174 throw ( RuntimeException ) 175 { 176 ::osl::MutexGuard aGuard( getOslMutex() ); 177 ensureIsAlive(); 178 sal_Int32 nIndex = m_nColumnRowId; 179 return nIndex; 180 } 181 // ----------------------------------------------------------------------------- 182 } // namespace accessibility 183 // ----------------------------------------------------------------------------- 184 185 186