LibreOffice Module sc (master) 1
AccessibleSpreadsheet.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include <sal/config.h>
23
24#include <rtl/ref.hxx>
25
27#include "viewdata.hxx"
28
29#include <vector>
30
31#include <rangelst.hxx>
32#include <map>
33
34class ScMyAddress : public ScAddress
35{
36public:
37 ScMyAddress(SCCOL nColP, SCROW nRowP, SCTAB nTabP) : ScAddress(nColP, nRowP, nTabP) {}
38 ScMyAddress(const ScAddress& rAddress) : ScAddress(rAddress) {}
39
40 bool operator< ( const ScMyAddress& rAddress ) const
41 {
42 if( Row() != rAddress.Row() )
43 return (Row() < rAddress.Row());
44 else
45 return (Col() < rAddress.Col());
46 }
47};
48
49class ScTabViewShell;
52
58{
59public:
61 ScAccessibleDocument* pAccDoc,
62 ScTabViewShell* pViewShell,
63 SCTAB nTab,
64 ScSplitPos eSplitPos);
65
67
68 virtual void SAL_CALL disposing() override;
69
70 void CompleteSelectionChanged(bool bNewState);
71
72 void LostFocus();
73 void GotFocus();
74
75 void BoundingBoxChanged();
76 void VisAreaChanged();
77 void FireFirstCellFocus();
78
79 bool IsScAddrFormulaSel (const ScAddress &addr) const;
80 bool IsFormulaMode();
81 ScMyAddress CalcScAddressFromRangeList(ScRangeList *pMarkedRanges,sal_Int32 nSelectedChildIndex);
82 static bool CalcScRangeDifferenceMax(const ScRange & rSrc, const ScRange & rDest,int nMax,std::vector<ScMyAddress> &vecRet,int &nSize);
83 static bool CalcScRangeListDifferenceMax(ScRangeList *pSrc,ScRangeList *pDest,int nMax,std::vector<ScMyAddress> &vecRet);
84
85private:
88 const ScRange& rRange );
89
90 virtual ~ScAccessibleSpreadsheet() override;
91
93 ScAccessibleDocument* pAccDoc,
94 ScTabViewShell* pViewShell,
95 SCTAB nTab,
96 ScSplitPos eSplitPos);
97
99
101 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
102
104
106 virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL
107 getAccessibleRowHeaders( ) override;
108
110 virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL
111 getAccessibleColumnHeaders( ) override;
112
114 virtual css::uno::Sequence< sal_Int32 > SAL_CALL
115 getSelectedAccessibleRows( ) override;
116
118 virtual css::uno::Sequence< sal_Int32 > SAL_CALL
120
122 virtual sal_Bool SAL_CALL
123 isAccessibleRowSelected( sal_Int32 nRow ) override;
124
126 virtual sal_Bool SAL_CALL
127 isAccessibleColumnSelected( sal_Int32 nColumn ) override;
128
130 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
131 getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) override;
132
133 rtl::Reference<ScAccessibleCell> GetAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn);
134
136 virtual sal_Bool SAL_CALL
137 isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn ) override;
138
140
141 virtual css::uno::Reference< css::accessibility::XAccessible >
142 SAL_CALL getAccessibleAtPoint(
143 const css::awt::Point& rPoint ) override;
144
145 virtual void SAL_CALL grabFocus( ) override;
146
147 virtual sal_Int32 SAL_CALL getForeground( ) override;
148
149 virtual sal_Int32 SAL_CALL getBackground( ) override;
150
152
154 virtual css::uno::Reference<css::accessibility::XAccessibleRelationSet> SAL_CALL
155 getAccessibleRelationSet() override;
156
158 virtual sal_Int64 SAL_CALL
159 getAccessibleStateSet() override;
160
162
163 virtual void SAL_CALL
164 selectAccessibleChild( sal_Int64 nChildIndex ) override;
165
166 virtual void SAL_CALL
167 clearAccessibleSelection( ) override;
168
169 virtual void SAL_CALL
170 selectAllAccessibleChildren( ) override;
171
172 virtual sal_Int64 SAL_CALL
174
175 virtual css::uno::Reference<css::accessibility::XAccessible > SAL_CALL
176 getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) override;
177
178 virtual void SAL_CALL
179 deselectAccessibleChild( sal_Int64 nChildIndex ) override;
180
182
185 virtual OUString SAL_CALL
186 getImplementationName() override;
187
190 virtual css::uno::Sequence< OUString> SAL_CALL
191 getSupportedServiceNames() override;
192
194
197 virtual css::uno::Sequence<sal_Int8> SAL_CALL
198 getImplementationId() override;
199
201
205 virtual void SAL_CALL
207 const css::uno::Reference<css::accessibility::XAccessibleEventListener>& xListener) override;
208
209 //===== XAccessibleTableSelection ============================================
210
211 virtual sal_Bool SAL_CALL selectRow( sal_Int32 row ) override;
212 virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column ) override;
213 virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row ) override;
214 virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column ) override;
215
217 virtual tools::Rectangle GetBoundingBoxOnScreen() const override;
218
220 virtual tools::Rectangle GetBoundingBox() const override;
221
222 bool IsDefunc(sal_Int64 nParentStates);
223 bool IsEditable();
224 bool IsFocused();
226
227 void SelectCell(sal_Int32 nRow, sal_Int32 nCol, bool bDeselect);
228
229 static ScDocument* GetDocument(ScTabViewShell* pViewShell);
230
231 void RemoveSelection(const ScMarkData &refScMarkData);
232 void CommitFocusCell(const ScAddress &aNewCell);
233
234 sal_Int32 GetRowAll() const { return m_nMaxY - m_nMinY + 1 ; }
235 sal_uInt16 GetColAll() const { return m_nMaxX - m_nMinX + 1; }
236 void NotifyRefMode();
237 void RemoveFormulaSelection(bool bRemoveAll = false);
238 bool CheckChildIndex(sal_Int64) const;
239 ScAddress GetChildIndexAddress(sal_Int64) const;
240 sal_Int64 GetAccessibleIndexFormula( sal_Int32 nRow, sal_Int32 nColumn );
242
244 std::unique_ptr<ScRangeList> mpMarkedRanges;
253 typedef std::map<ScMyAddress,css::uno::Reference< css::accessibility::XAccessible > >
260 std::vector<ScMyAddress> m_vecFormulaLastMyAddr;
262 sal_uInt16 m_nMinX;
263 sal_uInt16 m_nMaxX;
264 sal_Int32 m_nMinY;
265 sal_Int32 m_nMaxY;
270};
271
272/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@descr This base class provides an implementation of the AccessibleCell service.
@descr This base class provides an implementation of the AccessibleTable service.
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
===== SfxListener =====================================================
std::map< ScMyAddress, css::uno::Reference< css::accessibility::XAccessible > > MAP_ADDR_XACC
virtual void SAL_CALL grabFocus() override
static ScDocument * GetDocument(ScTabViewShell *pViewShell)
virtual sal_Bool SAL_CALL unselectColumn(sal_Int32 column) override
virtual sal_Bool SAL_CALL isAccessibleRowSelected(sal_Int32 nRow) override
Returns a boolean value indicating whether the specified row is selected.
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
===== XAccessibleContext ==============================================
std::vector< ScMyAddress > m_vecFormulaLastMyAddr
virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL getAccessibleColumnHeaders() override
Returns the column headers as an AccessibleTable.
virtual ~ScAccessibleSpreadsheet() override
bool CheckChildIndex(sal_Int64) const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
Return the set of current states.
virtual sal_Bool SAL_CALL unselectRow(sal_Int32 row) override
virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL getAccessibleRowHeaders() override
===== XAccessibleTable ================================================
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
===== XTypeProvider ===================================================
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows() override
Returns the selected rows in a table.
virtual void SAL_CALL deselectAccessibleChild(sal_Int64 nChildIndex) override
void CommitFocusCell(const ScAddress &aNewCell)
rtl::Reference< ScAccessibleCell > mpAccCell
virtual sal_Int64 SAL_CALL getSelectedAccessibleChildCount() override
static bool CalcScRangeDifferenceMax(const ScRange &rSrc, const ScRange &rDest, int nMax, std::vector< ScMyAddress > &vecRet, int &nSize)
ScMyAddress CalcScAddressFromRangeList(ScRangeList *pMarkedRanges, sal_Int32 nSelectedChildIndex)
virtual void SAL_CALL selectAllAccessibleChildren() override
void ConstructScAccessibleSpreadsheet(ScAccessibleDocument *pAccDoc, ScTabViewShell *pViewShell, SCTAB nTab, ScSplitPos eSplitPos)
sal_Int64 GetAccessibleIndexFormula(sal_Int32 nRow, sal_Int32 nColumn)
bool IsScAddrFormulaSel(const ScAddress &addr) const
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn) override
Returns the Accessible at a specified row and column in the table.
std::unique_ptr< ScRangeList > mpMarkedRanges
virtual sal_Bool SAL_CALL selectColumn(sal_Int32 column) override
virtual sal_Int32 SAL_CALL getBackground() override
ScAccessibleSpreadsheet(ScAccessibleDocument *pAccDoc, ScTabViewShell *pViewShell, SCTAB nTab, ScSplitPos eSplitPos)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild(sal_Int64 nSelectedChildIndex) override
void RemoveFormulaSelection(bool bRemoveAll=false)
virtual sal_Bool SAL_CALL isAccessibleSelected(sal_Int32 nRow, sal_Int32 nColumn) override
Returns a boolean value indicating whether the accessible at a specified row and column is selected.
virtual sal_Bool SAL_CALL selectRow(sal_Int32 row) override
static bool CalcScRangeListDifferenceMax(ScRangeList *pSrc, ScRangeList *pDest, int nMax, std::vector< ScMyAddress > &vecRet)
rtl::Reference< ScAccessibleCell > m_pAccFormulaCell
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns() override
Returns the selected columns in a table.
virtual sal_Bool SAL_CALL isAccessibleColumnSelected(sal_Int32 nColumn) override
Returns a boolean value indicating whether the specified column is selected.
ScAddress GetChildIndexAddress(sal_Int64) const
virtual void SAL_CALL disposing() override
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
virtual sal_Int32 SAL_CALL getForeground() override
rtl::Reference< ScAccessibleCell > GetAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
===== XAccessibleEventBroadcaster =====================================
void CompleteSelectionChanged(bool bNewState)
void RemoveSelection(const ScMarkData &refScMarkData)
ScAccessibleDocument * mpAccDoc
void SelectCell(sal_Int32 nRow, sal_Int32 nCol, bool bDeselect)
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
bool GetFormulaCurrentFocusCell(ScAddress &addr)
virtual void SAL_CALL clearAccessibleSelection() override
virtual void SAL_CALL selectAccessibleChild(sal_Int64 nChildIndex) override
===== XAccessibleSelection ===========================================
virtual void SAL_CALL disposing() override
SCROW Row() const
Definition: address.hxx:274
SCCOL Col() const
Definition: address.hxx:279
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
Definition: markdata.hxx:43
ScMyAddress(SCCOL nColP, SCROW nRowP, SCTAB nTabP)
bool operator<(const ScMyAddress &rAddress) const
ScMyAddress(const ScAddress &rAddress)
unsigned char sal_Bool
sal_Int16 SCTAB
Definition: types.hxx:22
sal_Int16 SCCOL
Definition: types.hxx:21
sal_Int32 SCROW
Definition: types.hxx:17
ScSplitPos
Definition: viewdata.hxx:44