LibreOffice Module sc (master)  1
AccessibleCellBase.cxx
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 #include <AccessibleCellBase.hxx>
21 #include <document.hxx>
22 #include <docfunc.hxx>
23 #include <docsh.hxx>
24 #include <strings.hxx>
25 #include <unonames.hxx>
26 #include <detfunc.hxx>
27 
28 #include <com/sun/star/accessibility/AccessibleRole.hpp>
29 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
30 #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
31 #include <com/sun/star/sheet/XSpreadsheet.hpp>
32 #include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
33 #include <com/sun/star/text/XSimpleText.hpp>
34 #include <com/sun/star/table/BorderLine.hpp>
35 #include <com/sun/star/table/ShadowFormat.hpp>
36 #include <comphelper/sequence.hxx>
37 #include <sfx2/objsh.hxx>
38 #include <vcl/svapp.hxx>
39 
40 #include <float.h>
41 
42 using namespace ::com::sun::star;
43 using namespace ::com::sun::star::accessibility;
44 
45 #define DEFAULT_LINE_WIDTH 2
46 
47 //===== internal ============================================================
48 
50  const uno::Reference<XAccessible>& rxParent,
51  ScDocument* pDoc,
52  const ScAddress& rCellAddress,
53  sal_Int32 nIndex)
54  :
55  ScAccessibleContextBase(rxParent, AccessibleRole::TABLE_CELL),
56  maCellAddress(rCellAddress),
57  mpDoc(pDoc),
58  mnIndex(nIndex)
59 {
60 }
61 
63 {
64 }
65 
66  //===== XAccessibleComponent ============================================
67 
69 {
70  SolarMutexGuard aGuard;
71  IsObjectValid();
72  // test whether the cell is hidden (column/row - hidden/filtered)
73  bool bVisible(true);
74  if (mpDoc)
75  {
76  bool bColHidden = mpDoc->ColHidden(maCellAddress.Col(), maCellAddress.Tab());
77  bool bRowHidden = mpDoc->RowHidden(maCellAddress.Row(), maCellAddress.Tab());
78  bool bColFiltered = mpDoc->ColFiltered(maCellAddress.Col(), maCellAddress.Tab());
79  bool bRowFiltered = mpDoc->RowFiltered(maCellAddress.Row(), maCellAddress.Tab());
80 
81  if (bColHidden || bColFiltered || bRowHidden || bRowFiltered)
82  bVisible = false;
83  }
84  return bVisible;
85 }
86 
88 {
89  SolarMutexGuard aGuard;
90  IsObjectValid();
91  sal_Int32 nColor(0);
92  if (mpDoc)
93  {
95  if ( pObjSh )
96  {
97  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
98  if ( xSpreadDoc.is() )
99  {
100  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
101  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
102  if ( xIndex.is() )
103  {
104  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
105  uno::Reference<sheet::XSpreadsheet> xTable;
106  if (aTable>>=xTable)
107  {
108  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
109  if (xCell.is())
110  {
111  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
112  if (xCellProps.is())
113  {
114  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_CCOLOR);
115  aAny >>= nColor;
116  }
117  }
118  }
119  }
120  }
121  }
122  }
123  return nColor;
124 }
125 
127 {
128  SolarMutexGuard aGuard;
129  IsObjectValid();
130  sal_Int32 nColor(0);
131 
132  if (mpDoc)
133  {
135  if ( pObjSh )
136  {
137  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
138  if ( xSpreadDoc.is() )
139  {
140  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
141  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
142  if ( xIndex.is() )
143  {
144  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
145  uno::Reference<sheet::XSpreadsheet> xTable;
146  if (aTable>>=xTable)
147  {
148  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
149  if (xCell.is())
150  {
151  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
152  if (xCellProps.is())
153  {
154  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_CELLBACK);
155  aAny >>= nColor;
156  }
157  }
158  }
159  }
160  }
161  }
162  }
163 
164  return nColor;
165 }
166 
167  //===== XInterface =====================================================
168 
170 {
172  return aAny.hasValue() ? aAny : ScAccessibleContextBase::queryInterface(rType);
173 }
174 
176  noexcept
177 {
179 }
180 
182  noexcept
183 {
185 }
186 
187  //===== XAccessibleContext ==============================================
188 
189 sal_Int32
191 {
192  SolarMutexGuard aGuard;
193  IsObjectValid();
194  return mnIndex;
195 }
196 
197 OUString
199 {
200  return STR_ACC_CELL_DESCR;
201 }
202 
203 OUString
205 {
206  // Document not needed, because only the cell address, but not the tablename is needed
207  // always us OOO notation
209 }
210 
211  //===== XAccessibleValue ================================================
212 
213 uno::Any SAL_CALL
215 {
216  SolarMutexGuard aGuard;
217  IsObjectValid();
218  uno::Any aAny;
219  if (mpDoc)
220  {
221  aAny <<= mpDoc->GetValue(maCellAddress);
222  }
223  return aAny;
224 }
225 
226 sal_Bool SAL_CALL
228 {
229  SolarMutexGuard aGuard;
230  IsObjectValid();
231  double fValue = 0;
232  bool bResult = false;
233  if((aNumber >>= fValue) && mpDoc && mpDoc->GetDocumentShell())
234  {
235  uno::Reference<XAccessibleStateSet> xParentStates;
236  if (getAccessibleParent().is())
237  {
238  uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
239  xParentStates = xParentContext->getAccessibleStateSet();
240  }
241  if (IsEditable(xParentStates))
242  {
243  ScDocShell* pDocShell = static_cast<ScDocShell*>(mpDoc->GetDocumentShell());
244  bResult = pDocShell->GetDocFunc().SetValueCell(maCellAddress, fValue, false);
245  }
246  }
247  return bResult;
248 }
249 
250 uno::Any SAL_CALL
252 {
253  return uno::Any(DBL_MAX);
254 }
255 
256 uno::Any SAL_CALL
258 {
259  return uno::Any(-DBL_MAX);
260 }
261 
262 uno::Any SAL_CALL
264 {
265  return uno::Any();
266 }
267 
268  //===== XServiceInfo ====================================================
269 
271 {
272  return "ScAccessibleCellBase";
273 }
274 
275  //===== XTypeProvider ===================================================
276 
277 uno::Sequence< uno::Type > SAL_CALL ScAccessibleCellBase::getTypes()
278 {
280 }
281 
282 uno::Sequence<sal_Int8> SAL_CALL
284 {
285  return css::uno::Sequence<sal_Int8>();
286 }
287 
289  const uno::Reference<XAccessibleStateSet>& rxParentStates)
290 {
291  bool bEditable(false);
292  if (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::EDITABLE))
293  bEditable = true;
294  return bEditable;
295 }
296 
298 {
299  SolarMutexGuard aGuard;
300  IsObjectValid();
301  OUString sNote;
302  if (mpDoc)
303  {
305  if ( pObjSh )
306  {
307  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
308  if ( xSpreadDoc.is() )
309  {
310  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
311  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
312  if ( xIndex.is() )
313  {
314  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
315  uno::Reference<sheet::XSpreadsheet> xTable;
316  if (aTable>>=xTable)
317  {
318  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
319  if (xCell.is())
320  {
321  uno::Reference <sheet::XSheetAnnotationAnchor> xAnnotationAnchor ( xCell, uno::UNO_QUERY);
322  if(xAnnotationAnchor.is())
323  {
324  uno::Reference <sheet::XSheetAnnotation> xSheetAnnotation = xAnnotationAnchor->getAnnotation();
325  if (xSheetAnnotation.is())
326  {
327  uno::Reference <text::XSimpleText> xText (xSheetAnnotation, uno::UNO_QUERY);
328  if (xText.is())
329  {
330  sNote = xText->getString();
331  }
332  }
333  }
334  }
335  }
336  }
337  }
338  }
339  }
340  return sNote;
341 }
342 
344 {
345  SolarMutexGuard aGuard;
346  IsObjectValid();
347  table::ShadowFormat aShadowFmt;
348  if (mpDoc)
349  {
351  if ( pObjSh )
352  {
353  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
354  if ( xSpreadDoc.is() )
355  {
356  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
357  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
358  if ( xIndex.is() )
359  {
360  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
361  uno::Reference<sheet::XSpreadsheet> xTable;
362  if (aTable>>=xTable)
363  {
364  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
365  if (xCell.is())
366  {
367  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
368  if (xCellProps.is())
369  {
370  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_SHADOW);
371  aAny >>= aShadowFmt;
372  }
373  }
374  }
375  }
376  }
377  }
378  }
379  //construct shadow attributes string
380  OUString sShadowAttrs("Shadow:");
381  OUString sInnerSplit(",");
382  OUString sOuterSplit(";");
383  sal_Int32 nLocationVal = 0;
384  switch( aShadowFmt.Location )
385  {
386  case table::ShadowLocation_TOP_LEFT:
387  nLocationVal = 1;
388  break;
389  case table::ShadowLocation_TOP_RIGHT:
390  nLocationVal = 2;
391  break;
392  case table::ShadowLocation_BOTTOM_LEFT:
393  nLocationVal = 3;
394  break;
395  case table::ShadowLocation_BOTTOM_RIGHT:
396  nLocationVal = 4;
397  break;
398  default:
399  break;
400  }
401  //if there is no shadow property for the cell
402  if ( nLocationVal == 0 )
403  {
404  sShadowAttrs += sOuterSplit;
405  return sShadowAttrs;
406  }
407  //else return all the shadow properties
408  sShadowAttrs += "Location=" +
409  OUString::number( nLocationVal ) +
410  sInnerSplit +
411  "ShadowWidth=" +
412  OUString::number( static_cast<sal_Int32>(aShadowFmt.ShadowWidth) ) +
413  sInnerSplit +
414  "IsTransparent=" +
415  OUString::number( static_cast<int>(aShadowFmt.IsTransparent) ) +
416  sInnerSplit +
417  "Color=" +
418  OUString::number( aShadowFmt.Color ) +
419  sOuterSplit;
420  return sShadowAttrs;
421 }
422 
424 {
425  SolarMutexGuard aGuard;
426  IsObjectValid();
427  table::BorderLine aTopBorder;
428  table::BorderLine aBottomBorder;
429  table::BorderLine aLeftBorder;
430  table::BorderLine aRightBorder;
431  if (mpDoc)
432  {
434  if ( pObjSh )
435  {
436  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
437  if ( xSpreadDoc.is() )
438  {
439  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
440  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
441  if ( xIndex.is() )
442  {
443  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
444  uno::Reference<sheet::XSpreadsheet> xTable;
445  if (aTable>>=xTable)
446  {
447  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
448  if (xCell.is())
449  {
450  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
451  if (xCellProps.is())
452  {
453  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_TOPBORDER);
454  aAny >>= aTopBorder;
455  aAny = xCellProps->getPropertyValue(SC_UNONAME_BOTTBORDER);
456  aAny >>= aBottomBorder;
457  aAny = xCellProps->getPropertyValue(SC_UNONAME_LEFTBORDER);
458  aAny >>= aLeftBorder;
459  aAny = xCellProps->getPropertyValue(SC_UNONAME_RIGHTBORDER);
460  aAny >>= aRightBorder;
461  }
462  }
463  }
464  }
465  }
466  }
467  }
468 
469  Color aColor;
470  bool bIn = mpDoc && mpDoc->IsCellInChangeTrack(maCellAddress,&aColor);
471  if (bIn)
472  {
473  aTopBorder.Color = sal_Int32(aColor);
474  aBottomBorder.Color = sal_Int32(aColor);
475  aLeftBorder.Color = sal_Int32(aColor);
476  aRightBorder.Color = sal_Int32(aColor);
477  aTopBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
478  aBottomBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
479  aLeftBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
480  aRightBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
481  }
482 
483  //construct border attributes string
484  OUString sBorderAttrs;
485  OUString sInnerSplit(",");
486  OUString sOuterSplit(";");
487  //top border
488  //if top of the cell has no border
489  if ( aTopBorder.InnerLineWidth == 0 && aTopBorder.OuterLineWidth == 0 )
490  {
491  sBorderAttrs += "TopBorder:;";
492  }
493  else//add all the border properties to the return string.
494  {
495  sBorderAttrs += "TopBorder:Color=" +
496  OUString::number( aTopBorder.Color ) +
497  sInnerSplit +
498  "InnerLineWidth=" +
499  OUString::number( static_cast<sal_Int32>(aTopBorder.InnerLineWidth) ) +
500  sInnerSplit +
501  "OuterLineWidth=" +
502  OUString::number( static_cast<sal_Int32>(aTopBorder.OuterLineWidth) ) +
503  sInnerSplit +
504  "LineDistance=" +
505  OUString::number( static_cast<sal_Int32>(aTopBorder.LineDistance) ) +
506  sOuterSplit;
507  }
508  //bottom border
509  if ( aBottomBorder.InnerLineWidth == 0 && aBottomBorder.OuterLineWidth == 0 )
510  {
511  sBorderAttrs += "BottomBorder:;";
512  }
513  else
514  {
515  sBorderAttrs += "BottomBorder:Color=" +
516  OUString::number( aBottomBorder.Color ) +
517  sInnerSplit +
518  "InnerLineWidth=" +
519  OUString::number( static_cast<sal_Int32>(aBottomBorder.InnerLineWidth) ) +
520  sInnerSplit +
521  "OuterLineWidth=" +
522  OUString::number( static_cast<sal_Int32>(aBottomBorder.OuterLineWidth) ) +
523  sInnerSplit +
524  "LineDistance=" +
525  OUString::number( static_cast<sal_Int32>(aBottomBorder.LineDistance) ) +
526  sOuterSplit;
527  }
528  //left border
529  if ( aLeftBorder.InnerLineWidth == 0 && aLeftBorder.OuterLineWidth == 0 )
530  {
531  sBorderAttrs += "LeftBorder:;";
532  }
533  else
534  {
535  sBorderAttrs += "LeftBorder:Color=" +
536  OUString::number( aLeftBorder.Color ) +
537  sInnerSplit +
538  "InnerLineWidth=" +
539  OUString::number( static_cast<sal_Int32>(aLeftBorder.InnerLineWidth) ) +
540  sInnerSplit +
541  "OuterLineWidth=" +
542  OUString::number( static_cast<sal_Int32>(aLeftBorder.OuterLineWidth) ) +
543  sInnerSplit +
544  "LineDistance=" +
545  OUString::number( static_cast<sal_Int32>(aLeftBorder.LineDistance) ) +
546  sOuterSplit;
547  }
548  //right border
549  if ( aRightBorder.InnerLineWidth == 0 && aRightBorder.OuterLineWidth == 0 )
550  {
551  sBorderAttrs += "RightBorder:;";
552  }
553  else
554  {
555  sBorderAttrs += "RightBorder:Color=" +
556  OUString::number( aRightBorder.Color ) +
557  sInnerSplit +
558  "InnerLineWidth=" +
559  OUString::number( static_cast<sal_Int32>(aRightBorder.InnerLineWidth) ) +
560  sInnerSplit +
561  "OuterLineWidth=" +
562  OUString::number( static_cast<sal_Int32>(aRightBorder.OuterLineWidth) ) +
563  sInnerSplit +
564  "LineDistance=" +
565  OUString::number( static_cast<sal_Int32>(aRightBorder.LineDistance) ) +
566  sOuterSplit;
567  }
568  return sBorderAttrs;
569 }
570 //end of cell attributes
571 
573 {
574  OUString strNote;
575  OUString strTrackText;
576  if (mpDoc)
577  {
578  bool bLeftedge = false;
579  mpDoc->GetCellChangeTrackNote(maCellAddress,strTrackText,bLeftedge);
580  }
581  if (!strTrackText.isEmpty())
582  {
584  strNote = strTrackText;
585  }
586  strNote += GetNote();
587  return strNote;
588 }
589 
590 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual sal_Bool SAL_CALL setCurrentValue(const css::uno::Any &aNumber) override
virtual bool isVisible() override
SC_DLLPUBLIC void Format(OStringBuffer &r, ScRefFlags nFlags, const ScDocument *pDocument=nullptr, const Details &rDetails=detailsOOOa1) const
Definition: address.cxx:2116
bool hasValue()
bool bVisible
virtual css::uno::Any SAL_CALL getMinimumValue() override
SCROW Row() const
Definition: address.hxx:261
virtual OUString createAccessibleDescription() override
Return this object's description.
#define DEFAULT_LINE_WIDTH
css::uno::Reference< css::frame::XModel3 > GetModel() const
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
Returns an implementation id.
virtual css::uno::Any SAL_CALL getMinimumIncrement() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
#define SC_UNONAME_CCOLOR
Definition: unonames.hxx:50
#define SC_UNONAME_CELLBACK
Definition: unonames.hxx:97
ScAccessibleCellBase(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScDocument *pDoc, const ScAddress &rCellAddress, sal_Int32 nIndex)
#define SC_UNONAME_LEFTBORDER
Definition: unonames.hxx:123
virtual void SAL_CALL acquire() noexcept override
SCTAB Tab() const
Definition: address.hxx:270
bool ColFiltered(SCCOL nCol, SCTAB nTab) const
Definition: document.cxx:4546
virtual OUString createAccessibleName() override
Return the object's current name.
SC_DLLPUBLIC double GetValue(const ScAddress &rPos) const
Definition: document.cxx:3659
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
bool SetValueCell(const ScAddress &rPos, double fVal, bool bInteraction)
Definition: docfunc.cxx:860
#define SC_UNONAME_TOPBORDER
Definition: unonames.hxx:125
bool IsCellInChangeTrack(const ScAddress &cell, Color *pColCellBorder)
Definition: documen2.cxx:1205
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
Definition: document.cxx:4476
OUString GetNote() const
void GetCellChangeTrackNote(const ScAddress &cell, OUString &strTrackText, bool &pbLeftEdge)
Definition: documen2.cxx:1268
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
SC_DLLPUBLIC bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
Definition: document.cxx:4530
unsigned char sal_Bool
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
virtual void SAL_CALL release() noexcept override
SCCOL Col() const
Definition: address.hxx:266
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) SAL_OVERRIDE
virtual ~ScAccessibleCellBase() override
virtual void SAL_CALL release() noexcept override
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override
===== XAccessibleContext ==============================================
OUString GetAllDisplayNote() const
static void AppendChangTrackNoteSeparator(OUString &str)
Definition: detfunc.cxx:1756
#define SC_UNONAME_SHADOW
Definition: unonames.hxx:107
#define SC_UNONAME_BOTTBORDER
Definition: unonames.hxx:122
OUString getShadowAttrs() const
virtual css::uno::Any SAL_CALL getMaximumValue() override
virtual bool IsEditable(const css::uno::Reference< css::accessibility::XAccessibleStateSet > &rxParentStates)
SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
Definition: document.cxx:4460
virtual void SAL_CALL acquire() noexcept override
#define STR_ACC_CELL_DESCR
Definition: strings.hxx:16
SfxObjectShell * GetDocumentShell() const
Definition: document.hxx:1057
ScDocFunc & GetDocFunc()
Definition: docsh.hxx:218
virtual sal_Int32 SAL_CALL getBackground() override
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) override
===== XInterface =====================================================
int mnIndex
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) override
===== XInterface =====================================================
virtual sal_Int32 SAL_CALL getForeground() override
===== XAccessibleComponent ============================================
#define SC_UNONAME_RIGHTBORDER
Definition: unonames.hxx:124
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
virtual css::uno::Any SAL_CALL getCurrentValue() override
===== XAccessibleValue ================================================