Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "accessibility/extended/AccessibleGridControlHeader.hxx"
30 : : #include "accessibility/extended/AccessibleGridControlHeaderCell.hxx"
31 : : #include "accessibility/extended/AccessibleGridControlTableCell.hxx"
32 : : #include <svtools/accessibletable.hxx>
33 : : #include <comphelper/servicehelper.hxx>
34 : :
35 : :
36 : : // ============================================================================
37 : :
38 : : using ::rtl::OUString;
39 : :
40 : : using ::com::sun::star::uno::Reference;
41 : : using ::com::sun::star::uno::Sequence;
42 : : using ::com::sun::star::uno::Any;
43 : :
44 : : using namespace ::com::sun::star::uno;
45 : : using namespace ::com::sun::star;
46 : : using namespace ::com::sun::star::lang;
47 : : using namespace ::com::sun::star::accessibility;
48 : : using namespace ::svt;
49 : : using namespace ::svt::table;
50 : :
51 : : // ============================================================================
52 : :
53 : : namespace accessibility {
54 : :
55 : : // ============================================================================
56 : :
57 : 0 : AccessibleGridControlHeader::AccessibleGridControlHeader(
58 : : const Reference< XAccessible >& rxParent,
59 : : ::svt::table::IAccessibleTable& rTable,
60 : : ::svt::table::AccessibleTableControlObjType eObjType):
61 : 0 : AccessibleGridControlTableBase( rxParent, rTable, eObjType )
62 : : {
63 : : OSL_ENSURE( isRowBar() || isColumnBar(),
64 : : "accessibility/extended/AccessibleGridControlHeaderBar - invalid object type" );
65 : 0 : }
66 : :
67 : 0 : AccessibleGridControlHeader::~AccessibleGridControlHeader()
68 : : {
69 [ # # ]: 0 : }
70 : :
71 : : // XAccessibleContext ---------------------------------------------------------
72 : :
73 : : Reference< XAccessible > SAL_CALL
74 : 0 : AccessibleGridControlHeader::getAccessibleChild( sal_Int32 nChildIndex )
75 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
76 : : {
77 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
78 [ # # ]: 0 : ::osl::MutexGuard aGuard( getOslMutex() );
79 : :
80 [ # # ][ # # ]: 0 : if (nChildIndex<0 || nChildIndex>=getAccessibleChildCount())
[ # # ][ # # ]
81 [ # # ]: 0 : throw IndexOutOfBoundsException();
82 [ # # ]: 0 : ensureIsAlive();
83 : 0 : Reference< XAccessible > xChild;
84 [ # # ]: 0 : if(m_eObjType == svt::table::TCTYPE_COLUMNHEADERBAR)
85 : : {
86 [ # # ][ # # ]: 0 : AccessibleGridControlHeaderCell* pColHeaderCell = new AccessibleGridControlHeaderCell(nChildIndex, this, m_aTable, svt::table::TCTYPE_COLUMNHEADERCELL);
87 [ # # ][ # # ]: 0 : xChild = pColHeaderCell;
88 : : }
89 [ # # ]: 0 : else if(m_eObjType == svt::table::TCTYPE_ROWHEADERBAR)
90 : : {
91 [ # # ][ # # ]: 0 : AccessibleGridControlHeaderCell* pRowHeaderCell = new AccessibleGridControlHeaderCell(nChildIndex, this, m_aTable, svt::table::TCTYPE_ROWHEADERCELL);
92 [ # # ][ # # ]: 0 : xChild = pRowHeaderCell;
93 : : }
94 [ # # ][ # # ]: 0 : return xChild;
95 : : }
96 : :
97 : 0 : sal_Int32 SAL_CALL AccessibleGridControlHeader::getAccessibleIndexInParent()
98 : : throw ( uno::RuntimeException )
99 : : {
100 : 0 : ensureIsAlive();
101 [ # # ][ # # ]: 0 : if(m_eObjType == svt::table::TCTYPE_ROWHEADERBAR && m_aTable.HasColHeader())
[ # # ]
102 : 0 : return 1;
103 : : else
104 : 0 : return 0;
105 : : }
106 : :
107 : : // XAccessibleComponent -------------------------------------------------------
108 : :
109 : : Reference< XAccessible > SAL_CALL
110 : 0 : AccessibleGridControlHeader::getAccessibleAtPoint( const awt::Point& rPoint )
111 : : throw ( uno::RuntimeException )
112 : : {
113 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
114 [ # # ]: 0 : ::osl::MutexGuard aGuard( getOslMutex() );
115 [ # # ]: 0 : ensureIsAlive();
116 : :
117 : 0 : sal_Int32 nRow = 0;
118 : 0 : sal_Int32 nColumnPos = 0;
119 : 0 : sal_Bool bConverted = isRowBar() ?
120 [ # # ][ # # ]: 0 : m_aTable.ConvertPointToCellAddress( nRow, nColumnPos, VCLPoint( rPoint ) ) :
121 [ # # ][ # # ]: 0 : m_aTable.ConvertPointToCellAddress( nRow, nColumnPos, VCLPoint( rPoint ) );
[ # # ]
[ # # # # ]
122 : :
123 [ # # ][ # # ]: 0 : return bConverted ? implGetChild( nRow, nColumnPos ) : Reference< XAccessible >();
[ # # ][ # # ]
124 : : }
125 : :
126 : 0 : void SAL_CALL AccessibleGridControlHeader::grabFocus()
127 : : throw ( uno::RuntimeException )
128 : : {
129 : 0 : ensureIsAlive();
130 : : // focus on header not supported
131 : 0 : }
132 : :
133 : 0 : Any SAL_CALL AccessibleGridControlHeader::getAccessibleKeyBinding()
134 : : throw ( uno::RuntimeException )
135 : : {
136 : 0 : ensureIsAlive();
137 : 0 : return Any(); // no special key bindings for header
138 : : }
139 : :
140 : : // XAccessibleTable -----------------------------------------------------------
141 : :
142 : 0 : OUString SAL_CALL AccessibleGridControlHeader::getAccessibleRowDescription( sal_Int32 nRow )
143 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
144 : : {
145 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
146 [ # # ]: 0 : ::osl::MutexGuard aGuard( getOslMutex() );
147 [ # # ]: 0 : ensureIsAlive();
148 [ # # ]: 0 : ensureIsValidRow( nRow );
149 [ # # ][ # # ]: 0 : return OUString(); // no headers in headers
150 : : }
151 : :
152 : 0 : OUString SAL_CALL AccessibleGridControlHeader::getAccessibleColumnDescription( sal_Int32 nColumn )
153 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
154 : : {
155 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
156 [ # # ]: 0 : ::osl::MutexGuard aGuard( getOslMutex() );
157 [ # # ]: 0 : ensureIsAlive();
158 [ # # ]: 0 : ensureIsValidColumn( nColumn );
159 [ # # ][ # # ]: 0 : return OUString(); // no headers in headers
160 : : }
161 : :
162 : 0 : Reference< XAccessibleTable > SAL_CALL AccessibleGridControlHeader::getAccessibleRowHeaders()
163 : : throw ( uno::RuntimeException )
164 : : {
165 : 0 : ensureIsAlive();
166 : 0 : return NULL; // no headers in headers
167 : : }
168 : :
169 : 0 : Reference< XAccessibleTable > SAL_CALL AccessibleGridControlHeader::getAccessibleColumnHeaders()
170 : : throw ( uno::RuntimeException )
171 : : {
172 : 0 : ensureIsAlive();
173 : 0 : return NULL; // no headers in headers
174 : : }
175 : : //not selectable
176 : 0 : Sequence< sal_Int32 > SAL_CALL AccessibleGridControlHeader::getSelectedAccessibleRows()
177 : : throw ( uno::RuntimeException )
178 : : {
179 : 0 : Sequence< sal_Int32 > aSelSeq(0);
180 : 0 : return aSelSeq;
181 : : }
182 : : //columns aren't selectable
183 : 0 : Sequence< sal_Int32 > SAL_CALL AccessibleGridControlHeader::getSelectedAccessibleColumns()
184 : : throw ( uno::RuntimeException )
185 : : {
186 : 0 : Sequence< sal_Int32 > aSelSeq(0);
187 : 0 : return aSelSeq;
188 : : }
189 : : //row headers not selectable
190 : 0 : sal_Bool SAL_CALL AccessibleGridControlHeader::isAccessibleRowSelected( sal_Int32 /*nRow*/ )
191 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
192 : : {
193 : 0 : return sal_False;
194 : : }
195 : : //columns aren't selectable
196 : 0 : sal_Bool SAL_CALL AccessibleGridControlHeader::isAccessibleColumnSelected( sal_Int32 nColumn )
197 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
198 : : {
199 : : (void)nColumn;
200 : 0 : return sal_False;
201 : : }
202 : : //not implemented
203 : 0 : Reference< XAccessible > SAL_CALL AccessibleGridControlHeader::getAccessibleCellAt(
204 : : sal_Int32 /*nRow*/, sal_Int32 /*nColumn*/ )
205 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
206 : : {
207 : 0 : return NULL;
208 : : }
209 : : // not selectable
210 : 0 : sal_Bool SAL_CALL AccessibleGridControlHeader::isAccessibleSelected(
211 : : sal_Int32 /*nRow*/, sal_Int32 /*nColumn */)
212 : : throw ( lang::IndexOutOfBoundsException, uno::RuntimeException )
213 : : {
214 : 0 : return sal_False;
215 : : }
216 : :
217 : : // XServiceInfo ---------------------------------------------------------------
218 : :
219 : 0 : OUString SAL_CALL AccessibleGridControlHeader::getImplementationName()
220 : : throw ( uno::RuntimeException )
221 : : {
222 : 0 : return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleGridControlHeader" ) );
223 : : }
224 : :
225 : : namespace
226 : : {
227 : : class theAccessibleGridControlHeaderImplementationId : public rtl::Static< UnoTunnelIdInit, theAccessibleGridControlHeaderImplementationId > {};
228 : : }
229 : :
230 : 0 : Sequence< sal_Int8 > SAL_CALL AccessibleGridControlHeader::getImplementationId()
231 : : throw ( uno::RuntimeException )
232 : : {
233 : 0 : return theAccessibleGridControlHeaderImplementationId::get().getSeq();
234 : : }
235 : :
236 : : // internal virtual methods ---------------------------------------------------
237 : :
238 : 0 : Rectangle AccessibleGridControlHeader::implGetBoundingBox()
239 : : {
240 : 0 : return m_aTable.calcHeaderRect(isColumnBar());
241 : : }
242 : :
243 : 0 : Rectangle AccessibleGridControlHeader::implGetBoundingBoxOnScreen()
244 : : {
245 : 0 : return m_aTable.calcHeaderRect(isColumnBar());
246 : : }
247 : :
248 : 0 : sal_Int32 AccessibleGridControlHeader::implGetRowCount() const
249 : : {
250 : 0 : return 1;
251 : : }
252 : :
253 : 0 : sal_Int32 AccessibleGridControlHeader::implGetColumnCount() const
254 : : {
255 : 0 : return 1;
256 : : }
257 : :
258 : : // internal helper methods ----------------------------------------------------
259 : :
260 : 0 : Reference< XAccessible > AccessibleGridControlHeader::implGetChild(
261 : : sal_Int32 nRow, sal_uInt32 nColumnPos )
262 : : {
263 : 0 : Reference< XAccessible > xChild;
264 [ # # ]: 0 : if(m_eObjType == svt::table::TCTYPE_COLUMNHEADERBAR)
265 : : {
266 [ # # ][ # # ]: 0 : AccessibleGridControlHeaderCell* pColHeaderCell = new AccessibleGridControlHeaderCell(nColumnPos, this, m_aTable, svt::table::TCTYPE_COLUMNHEADERCELL);
267 [ # # ][ # # ]: 0 : xChild = pColHeaderCell;
268 : : }
269 [ # # ]: 0 : else if(m_eObjType == svt::table::TCTYPE_ROWHEADERBAR)
270 : : {
271 [ # # ][ # # ]: 0 : AccessibleGridControlHeaderCell* pRowHeaderCell = new AccessibleGridControlHeaderCell(nRow, this, m_aTable, svt::table::TCTYPE_ROWHEADERCELL);
272 [ # # ][ # # ]: 0 : xChild = pRowHeaderCell;
273 : : }
274 : 0 : return xChild;
275 : : }
276 : :
277 : : // ============================================================================
278 : :
279 : : } // namespace accessibility
280 : :
281 : : // ============================================================================
282 : :
283 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|