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  throw ()
177 {
179 }
180 
182  throw ()
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  //===== XServiceInfo ====================================================
263 
265 {
266  return "ScAccessibleCellBase";
267 }
268 
269  //===== XTypeProvider ===================================================
270 
271 uno::Sequence< uno::Type > SAL_CALL ScAccessibleCellBase::getTypes()
272 {
274 }
275 
276 uno::Sequence<sal_Int8> SAL_CALL
278 {
279  return css::uno::Sequence<sal_Int8>();
280 }
281 
283  const uno::Reference<XAccessibleStateSet>& rxParentStates)
284 {
285  bool bEditable(false);
286  if (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::EDITABLE))
287  bEditable = true;
288  return bEditable;
289 }
290 
292 {
293  SolarMutexGuard aGuard;
294  IsObjectValid();
295  OUString sNote;
296  if (mpDoc)
297  {
299  if ( pObjSh )
300  {
301  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
302  if ( xSpreadDoc.is() )
303  {
304  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
305  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
306  if ( xIndex.is() )
307  {
308  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
309  uno::Reference<sheet::XSpreadsheet> xTable;
310  if (aTable>>=xTable)
311  {
312  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
313  if (xCell.is())
314  {
315  uno::Reference <sheet::XSheetAnnotationAnchor> xAnnotationAnchor ( xCell, uno::UNO_QUERY);
316  if(xAnnotationAnchor.is())
317  {
318  uno::Reference <sheet::XSheetAnnotation> xSheetAnnotation = xAnnotationAnchor->getAnnotation();
319  if (xSheetAnnotation.is())
320  {
321  uno::Reference <text::XSimpleText> xText (xSheetAnnotation, uno::UNO_QUERY);
322  if (xText.is())
323  {
324  sNote = xText->getString();
325  }
326  }
327  }
328  }
329  }
330  }
331  }
332  }
333  }
334  return sNote;
335 }
336 
338 {
339  SolarMutexGuard aGuard;
340  IsObjectValid();
341  table::ShadowFormat aShadowFmt;
342  if (mpDoc)
343  {
345  if ( pObjSh )
346  {
347  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
348  if ( xSpreadDoc.is() )
349  {
350  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
351  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
352  if ( xIndex.is() )
353  {
354  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
355  uno::Reference<sheet::XSpreadsheet> xTable;
356  if (aTable>>=xTable)
357  {
358  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
359  if (xCell.is())
360  {
361  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
362  if (xCellProps.is())
363  {
364  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_SHADOW);
365  aAny >>= aShadowFmt;
366  }
367  }
368  }
369  }
370  }
371  }
372  }
373  //construct shadow attributes string
374  OUString sShadowAttrs("Shadow:");
375  OUString sInnerSplit(",");
376  OUString sOuterSplit(";");
377  sal_Int32 nLocationVal = 0;
378  switch( aShadowFmt.Location )
379  {
380  case table::ShadowLocation_TOP_LEFT:
381  nLocationVal = 1;
382  break;
383  case table::ShadowLocation_TOP_RIGHT:
384  nLocationVal = 2;
385  break;
386  case table::ShadowLocation_BOTTOM_LEFT:
387  nLocationVal = 3;
388  break;
389  case table::ShadowLocation_BOTTOM_RIGHT:
390  nLocationVal = 4;
391  break;
392  default:
393  break;
394  }
395  //if there is no shadow property for the cell
396  if ( nLocationVal == 0 )
397  {
398  sShadowAttrs += sOuterSplit;
399  return sShadowAttrs;
400  }
401  //else return all the shadow properties
402  sShadowAttrs += "Location=" +
403  OUString::number( nLocationVal ) +
404  sInnerSplit +
405  "ShadowWidth=" +
406  OUString::number( static_cast<sal_Int32>(aShadowFmt.ShadowWidth) ) +
407  sInnerSplit +
408  "IsTransparent=" +
409  OUString::number( static_cast<int>(aShadowFmt.IsTransparent) ) +
410  sInnerSplit +
411  "Color=" +
412  OUString::number( aShadowFmt.Color ) +
413  sOuterSplit;
414  return sShadowAttrs;
415 }
416 
418 {
419  SolarMutexGuard aGuard;
420  IsObjectValid();
421  table::BorderLine aTopBorder;
422  table::BorderLine aBottomBorder;
423  table::BorderLine aLeftBorder;
424  table::BorderLine aRightBorder;
425  if (mpDoc)
426  {
428  if ( pObjSh )
429  {
430  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
431  if ( xSpreadDoc.is() )
432  {
433  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
434  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
435  if ( xIndex.is() )
436  {
437  uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
438  uno::Reference<sheet::XSpreadsheet> xTable;
439  if (aTable>>=xTable)
440  {
441  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
442  if (xCell.is())
443  {
444  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
445  if (xCellProps.is())
446  {
447  uno::Any aAny = xCellProps->getPropertyValue(SC_UNONAME_TOPBORDER);
448  aAny >>= aTopBorder;
449  aAny = xCellProps->getPropertyValue(SC_UNONAME_BOTTBORDER);
450  aAny >>= aBottomBorder;
451  aAny = xCellProps->getPropertyValue(SC_UNONAME_LEFTBORDER);
452  aAny >>= aLeftBorder;
453  aAny = xCellProps->getPropertyValue(SC_UNONAME_RIGHTBORDER);
454  aAny >>= aRightBorder;
455  }
456  }
457  }
458  }
459  }
460  }
461  }
462 
463  Color aColor;
464  bool bIn = mpDoc && mpDoc->IsCellInChangeTrack(maCellAddress,&aColor);
465  if (bIn)
466  {
467  aTopBorder.Color = sal_Int32(aColor);
468  aBottomBorder.Color = sal_Int32(aColor);
469  aLeftBorder.Color = sal_Int32(aColor);
470  aRightBorder.Color = sal_Int32(aColor);
471  aTopBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
472  aBottomBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
473  aLeftBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
474  aRightBorder.OuterLineWidth = DEFAULT_LINE_WIDTH;
475  }
476 
477  //construct border attributes string
478  OUString sBorderAttrs;
479  OUString sInnerSplit(",");
480  OUString sOuterSplit(";");
481  //top border
482  //if top of the cell has no border
483  if ( aTopBorder.InnerLineWidth == 0 && aTopBorder.OuterLineWidth == 0 )
484  {
485  sBorderAttrs += "TopBorder:;";
486  }
487  else//add all the border properties to the return string.
488  {
489  sBorderAttrs += "TopBorder:Color=" +
490  OUString::number( aTopBorder.Color ) +
491  sInnerSplit +
492  "InnerLineWidth=" +
493  OUString::number( static_cast<sal_Int32>(aTopBorder.InnerLineWidth) ) +
494  sInnerSplit +
495  "OuterLineWidth=" +
496  OUString::number( static_cast<sal_Int32>(aTopBorder.OuterLineWidth) ) +
497  sInnerSplit +
498  "LineDistance=" +
499  OUString::number( static_cast<sal_Int32>(aTopBorder.LineDistance) ) +
500  sOuterSplit;
501  }
502  //bottom border
503  if ( aBottomBorder.InnerLineWidth == 0 && aBottomBorder.OuterLineWidth == 0 )
504  {
505  sBorderAttrs += "BottomBorder:;";
506  }
507  else
508  {
509  sBorderAttrs += "BottomBorder:Color=" +
510  OUString::number( aBottomBorder.Color ) +
511  sInnerSplit +
512  "InnerLineWidth=" +
513  OUString::number( static_cast<sal_Int32>(aBottomBorder.InnerLineWidth) ) +
514  sInnerSplit +
515  "OuterLineWidth=" +
516  OUString::number( static_cast<sal_Int32>(aBottomBorder.OuterLineWidth) ) +
517  sInnerSplit +
518  "LineDistance=" +
519  OUString::number( static_cast<sal_Int32>(aBottomBorder.LineDistance) ) +
520  sOuterSplit;
521  }
522  //left border
523  if ( aLeftBorder.InnerLineWidth == 0 && aLeftBorder.OuterLineWidth == 0 )
524  {
525  sBorderAttrs += "LeftBorder:;";
526  }
527  else
528  {
529  sBorderAttrs += "LeftBorder:Color=" +
530  OUString::number( aLeftBorder.Color ) +
531  sInnerSplit +
532  "InnerLineWidth=" +
533  OUString::number( static_cast<sal_Int32>(aLeftBorder.InnerLineWidth) ) +
534  sInnerSplit +
535  "OuterLineWidth=" +
536  OUString::number( static_cast<sal_Int32>(aLeftBorder.OuterLineWidth) ) +
537  sInnerSplit +
538  "LineDistance=" +
539  OUString::number( static_cast<sal_Int32>(aLeftBorder.LineDistance) ) +
540  sOuterSplit;
541  }
542  //right border
543  if ( aRightBorder.InnerLineWidth == 0 && aRightBorder.OuterLineWidth == 0 )
544  {
545  sBorderAttrs += "RightBorder:;";
546  }
547  else
548  {
549  sBorderAttrs += "RightBorder:Color=" +
550  OUString::number( aRightBorder.Color ) +
551  sInnerSplit +
552  "InnerLineWidth=" +
553  OUString::number( static_cast<sal_Int32>(aRightBorder.InnerLineWidth) ) +
554  sInnerSplit +
555  "OuterLineWidth=" +
556  OUString::number( static_cast<sal_Int32>(aRightBorder.OuterLineWidth) ) +
557  sInnerSplit +
558  "LineDistance=" +
559  OUString::number( static_cast<sal_Int32>(aRightBorder.LineDistance) ) +
560  sOuterSplit;
561  }
562  return sBorderAttrs;
563 }
564 //end of cell attributes
565 
567 {
568  OUString strNote;
569  OUString strTrackText;
570  if (mpDoc)
571  {
572  bool bLeftedge = false;
573  mpDoc->GetCellChangeTrackNote(maCellAddress,strTrackText,bLeftedge);
574  }
575  if (!strTrackText.isEmpty())
576  {
578  strNote = strTrackText;
579  }
580  strNote += GetNote();
581  return strNote;
582 }
583 
584 /* 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:2107
bool hasValue()
bool bVisible
virtual css::uno::Any SAL_CALL getMinimumValue() override
SCROW Row() const
Definition: address.hxx:262
virtual OUString createAccessibleDescription() override
Return this object's description.
#define DEFAULT_LINE_WIDTH
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
Returns an implementation id.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
virtual void SAL_CALL release() override
css::uno::Reference< css::frame::XModel > GetModel() const
#define SC_UNONAME_CCOLOR
Definition: unonames.hxx:51
#define SC_UNONAME_CELLBACK
Definition: unonames.hxx:98
ScAccessibleCellBase(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScDocument *pDoc, const ScAddress &rCellAddress, sal_Int32 nIndex)
#define SC_UNONAME_LEFTBORDER
Definition: unonames.hxx:124
SCTAB Tab() const
Definition: address.hxx:271
bool ColFiltered(SCCOL nCol, SCTAB nTab) const
Definition: document.cxx:4515
virtual OUString createAccessibleName() override
Return the object's current name.
SC_DLLPUBLIC double GetValue(const ScAddress &rPos) const
Definition: document.cxx:3628
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
bool SetValueCell(const ScAddress &rPos, double fVal, bool bInteraction)
Definition: docfunc.cxx:855
#define SC_UNONAME_TOPBORDER
Definition: unonames.hxx:126
bool IsCellInChangeTrack(const ScAddress &cell, Color *pColCellBorder)
Definition: documen2.cxx:1201
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
Definition: document.cxx:4445
OUString GetNote() const
void GetCellChangeTrackNote(const ScAddress &cell, OUString &strTrackText, bool &pbLeftEdge)
Definition: documen2.cxx:1264
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
Definition: document.cxx:4499
unsigned char sal_Bool
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
virtual void SAL_CALL acquire() override
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
SCCOL Col() const
Definition: address.hxx:267
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) SAL_OVERRIDE
virtual ~ScAccessibleCellBase() override
virtual void SAL_CALL acquire() override
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override
===== XAccessibleContext ==============================================
OUString GetAllDisplayNote() const
static void AppendChangTrackNoteSeparator(OUString &str)
Definition: detfunc.cxx:1757
#define SC_UNONAME_SHADOW
Definition: unonames.hxx:108
#define SC_UNONAME_BOTTBORDER
Definition: unonames.hxx:123
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:4429
#define STR_ACC_CELL_DESCR
Definition: strings.hxx:16
virtual void SAL_CALL release() override
SfxObjectShell * GetDocumentShell() const
Definition: document.hxx:1058
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:125
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
virtual css::uno::Any SAL_CALL getCurrentValue() override
===== XAccessibleValue ================================================