LibreOffice Module sc (master)  1
AccessibleEditObject.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 <sal/config.h>
21 
22 #include <memory>
23 #include <utility>
24 
25 #include <AccessibleEditObject.hxx>
26 #include <AccessibleText.hxx>
27 #include <editsrc.hxx>
28 #include <scmod.hxx>
29 #include <inputhdl.hxx>
30 #include <inputwin.hxx>
31 
33 #include <com/sun/star/accessibility/AccessibleRole.hpp>
34 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
35 #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
36 #include <com/sun/star/sheet/XSpreadsheet.hpp>
37 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
39 #include <editeng/editview.hxx>
40 #include <editeng/editeng.hxx>
41 #include <svx/svdmodel.hxx>
42 #include <vcl/svapp.hxx>
43 #include <vcl/window.hxx>
44 #include <sfx2/objsh.hxx>
46 
47 #include <unonames.hxx>
48 #include <document.hxx>
49 #include <AccessibleDocument.hxx>
50 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
52 #include <com/sun/star/accessibility/XAccessibleText.hpp>
53 
54 using ::com::sun::star::lang::IndexOutOfBoundsException;
55 using namespace ::com::sun::star;
56 using namespace ::com::sun::star::accessibility;
57 
58 //===== internal ============================================================
59 
61  const uno::Reference<XAccessible>& rxParent,
62  EditView* pEditView, vcl::Window* pWin, const OUString& rName,
63  const OUString& rDescription, EditObjectType eObjectType)
64  : ScAccessibleContextBase(rxParent, AccessibleRole::TEXT_FRAME)
65  , mpEditView(pEditView)
66  , mpWindow(pWin)
67  , mpTextWnd(nullptr)
68  , meObjectType(eObjectType)
69  , mbHasFocus(false)
70  , m_pScDoc(nullptr)
71 {
72  InitAcc(rxParent, pEditView, rName, rDescription);
73 }
74 
76  : ScAccessibleContextBase(nullptr, AccessibleRole::TEXT_FRAME)
77  , mpEditView(nullptr)
78  , mpWindow(nullptr)
79  , mpTextWnd(nullptr)
80  , meObjectType(eObjectType)
81  , mbHasFocus(false)
82  , m_pScDoc(nullptr)
83 {
84 }
85 
87  const uno::Reference<XAccessible>& rxParent,
88  EditView* pEditView,
89  const OUString& rName,
90  const OUString& rDescription)
91 {
92  SetParent(rxParent);
93  mpEditView = pEditView;
94 
96  SetName(rName);
97  SetDescription(rDescription);
99  {
100  const ScAccessibleDocument *pAccDoc = static_cast<ScAccessibleDocument*>(rxParent.get());
101  if (pAccDoc)
102  {
103  m_pScDoc = pAccDoc->GetDocument();
105  }
106  }
107 }
108 
110 {
111  if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose)
112  {
113  // increment refcount to prevent double call off dtor
114  osl_atomic_increment( &m_refCount );
115  // call dispose to inform object which have a weak reference to this object
116  dispose();
117  }
118 }
119 
121 {
122  SolarMutexGuard aGuard;
123  mpTextHelper.reset();
124 
126 }
127 
129 {
130  mbHasFocus = false;
131  if (mpTextHelper)
132  mpTextHelper->SetFocus(false);
133  CommitFocusLost();
134 }
135 
137 {
138  mbHasFocus = true;
140  if (mpTextHelper)
141  mpTextHelper->SetFocus();
142 }
143 
144 //===== XInterface ==========================================================
145 
146 css::uno::Any SAL_CALL
147  ScAccessibleEditObject::queryInterface (const css::uno::Type & rType)
148 {
149  css::uno::Any aReturn = ScAccessibleContextBase::queryInterface (rType);
150  if ( ! aReturn.hasValue())
151  aReturn = ::cppu::queryInterface (rType,
152  static_cast< css::accessibility::XAccessibleSelection* >(this)
153  );
154  return aReturn;
155 }
156 void SAL_CALL
158  noexcept
159 {
161 }
162 void SAL_CALL
164  noexcept
165 {
167 }
168  //===== XAccessibleComponent ============================================
169 
170 uno::Reference< XAccessible > SAL_CALL ScAccessibleEditObject::getAccessibleAtPoint(
171  const awt::Point& rPoint )
172 {
173  uno::Reference<XAccessible> xRet;
174  if (containsPoint(rPoint))
175  {
176  SolarMutexGuard aGuard;
177  IsObjectValid();
178 
180 
181  xRet = mpTextHelper->GetAt(rPoint);
182  }
183 
184  return xRet;
185 }
186 
188 {
189  tools::Rectangle aScreenBounds;
190 
191  if ( mpWindow )
192  {
193  if ( meObjectType == CellInEditMode )
194  {
195  if ( mpEditView && mpEditView->GetEditEngine() )
196  {
197  MapMode aMapMode( mpEditView->GetEditEngine()->GetRefMapMode() );
198  aScreenBounds = mpWindow->LogicToPixel( mpEditView->GetOutputArea(), aMapMode );
199  Point aCellLoc = aScreenBounds.TopLeft();
200  tools::Rectangle aWindowRect = mpWindow->GetWindowExtentsRelative( nullptr );
201  Point aWindowLoc = aWindowRect.TopLeft();
202  Point aPos( aCellLoc.getX() + aWindowLoc.getX(), aCellLoc.getY() + aWindowLoc.getY() );
203  aScreenBounds.SetPos( aPos );
204  }
205  }
206  else
207  {
208  aScreenBounds = mpWindow->GetWindowExtentsRelative( nullptr );
209  }
210  }
211 
212  return aScreenBounds;
213 }
214 
216 {
218 
219  if ( mpWindow )
220  {
221  uno::Reference< XAccessible > xThis( mpWindow->GetAccessible() );
222  if ( xThis.is() )
223  {
224  uno::Reference< XAccessibleContext > xContext( xThis->getAccessibleContext() );
225  if ( xContext.is() )
226  {
227  uno::Reference< XAccessible > xParent( xContext->getAccessibleParent() );
228  if ( xParent.is() )
229  {
230  uno::Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), uno::UNO_QUERY );
231  if ( xParentComponent.is() )
232  {
233  Point aScreenLoc = aBounds.TopLeft();
234  awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen();
235  Point aPos( aScreenLoc.getX() - aParentScreenLoc.X, aScreenLoc.getY() - aParentScreenLoc.Y );
236  aBounds.SetPos( aPos );
237  }
238  }
239  }
240  }
241  }
242 
243  return aBounds;
244 }
245 
246  //===== XAccessibleContext ==============================================
247 
248 sal_Int32 SAL_CALL
250 {
251  SolarMutexGuard aGuard;
252  IsObjectValid();
254  return mpTextHelper->GetChildCount();
255 }
256 
257 uno::Reference< XAccessible > SAL_CALL
259 {
260  SolarMutexGuard aGuard;
261  IsObjectValid();
263  return mpTextHelper->GetChild(nIndex);
264 }
265 
266 uno::Reference<XAccessibleStateSet> SAL_CALL
268 {
269  SolarMutexGuard aGuard;
270  uno::Reference<XAccessibleStateSet> xParentStates;
271  if (getAccessibleParent().is())
272  {
273  uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
274  xParentStates = xParentContext->getAccessibleStateSet();
275  }
277  if (IsDefunc(xParentStates))
278  pStateSet->AddState(AccessibleStateType::DEFUNC);
279  else
280  {
281  // all states are const, because this object exists only in one state
282  pStateSet->AddState(AccessibleStateType::EDITABLE);
283  pStateSet->AddState(AccessibleStateType::ENABLED);
284  pStateSet->AddState(AccessibleStateType::SENSITIVE);
285  pStateSet->AddState(AccessibleStateType::MULTI_LINE);
286  pStateSet->AddState(AccessibleStateType::MULTI_SELECTABLE);
287  pStateSet->AddState(AccessibleStateType::SHOWING);
288  pStateSet->AddState(AccessibleStateType::VISIBLE);
289  }
290  return pStateSet;
291 }
292 
293 OUString
295 {
296 // OSL_FAIL("Should never be called, because is set in the constructor.")
297  return OUString();
298 }
299 
300 OUString
302 {
303  OSL_FAIL("Should never be called, because is set in the constructor.");
304  return OUString();
305 }
306 
308 
309 void SAL_CALL
310  ScAccessibleEditObject::addAccessibleEventListener(const uno::Reference<XAccessibleEventListener>& xListener)
311 {
313 
314  mpTextHelper->AddEventListener(xListener);
315 
317 }
318 
319 void SAL_CALL
320  ScAccessibleEditObject::removeAccessibleEventListener(const uno::Reference<XAccessibleEventListener>& xListener)
321 {
323 
324  mpTextHelper->RemoveEventListener(xListener);
325 
327 }
328 
329  //===== XServiceInfo ====================================================
330 
332 {
333  return "ScAccessibleEditObject";
334 }
335 
336 //===== XTypeProvider =======================================================
337 
338 uno::Sequence<sal_Int8> SAL_CALL
340 {
341  return css::uno::Sequence<sal_Int8>();
342 }
343 
344  //==== internal =========================================================
345 
347  const uno::Reference<XAccessibleStateSet>& rxParentStates)
348 {
350  (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
351 }
352 
354 {
355  return mpWindow->GetOutDev();
356 }
357 
359 {
360  if (mpTextHelper)
361  return;
362 
363  ::std::unique_ptr < ScAccessibleTextData > pAccessibleTextData;
365  {
366  pAccessibleTextData.reset
368  }
369  else
370  {
371  pAccessibleTextData.reset
373  }
374 
375  std::unique_ptr<ScAccessibilityEditSource> pEditSrc =
376  std::make_unique<ScAccessibilityEditSource>(std::move(pAccessibleTextData));
377 
378  mpTextHelper = std::make_unique<::accessibility::AccessibleTextHelper>(std::move(pEditSrc));
379  mpTextHelper->SetEventSource(this);
380 
381  const ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl();
382  if ( pInputHdl && pInputHdl->IsEditMode() )
383  {
384  mpTextHelper->SetFocus();
385  }
386  else
387  {
388  mpTextHelper->SetFocus(mbHasFocus);
389  }
390 
391  // #i54814# activate cell in edit mode
393  {
394  // do not activate cell object, if top edit line is active
395  if( pInputHdl && !pInputHdl->IsTopMode() )
396  {
397  SdrHint aHint( SdrHintKind::BeginEdit );
398  mpTextHelper->GetEditSource().GetBroadcaster().Broadcast( aHint );
399  }
400  }
401 }
402 
404 {
406 }
407 
409 {
411 }
412 
413 sal_Int32 ScAccessibleEditObject::GetFgBgColor( const OUString &strPropColor)
414 {
415  SolarMutexGuard aGuard;
416  sal_Int32 nColor(0);
417  if (m_pScDoc)
418  {
420  if ( pObjSh )
421  {
422  uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
423  if ( xSpreadDoc.is() )
424  {
425  uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
426  uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
427  if ( xIndex.is() )
428  {
429  uno::Any aTable = xIndex->getByIndex(m_curCellAddress.Tab());
430  uno::Reference<sheet::XSpreadsheet> xTable;
431  if (aTable>>=xTable)
432  {
433  uno::Reference<table::XCell> xCell = xTable->getCellByPosition(m_curCellAddress.Col(), m_curCellAddress.Row());
434  if (xCell.is())
435  {
436  uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
437  if (xCellProps.is())
438  {
439  uno::Any aAny = xCellProps->getPropertyValue(strPropColor);
440  aAny >>= nColor;
441  }
442  }
443  }
444  }
445  }
446  }
447  }
448  return nColor;
449 }
450 //===== XAccessibleSelection ============================================
451 
453 {
454 }
455 
457 {
458  uno::Reference<XAccessible> xAcc = getAccessibleChild( nChildIndex );
459  uno::Reference<XAccessibleContext> xContext;
460  if( xAcc.is() )
461  xContext = xAcc->getAccessibleContext();
462  if( xContext.is() )
463  {
464  if( xContext->getAccessibleRole() == AccessibleRole::PARAGRAPH )
465  {
466  uno::Reference< css::accessibility::XAccessibleText >
467  xText(xAcc, uno::UNO_QUERY);
468  if( xText.is() )
469  {
470  if( xText->getSelectionStart() >= 0 ) return true;
471  }
472  }
473  }
474  return false;
475 }
476 
478 {
479 }
480 
482 {
483 }
484 
486 {
487  sal_Int32 nCount = 0;
488  sal_Int32 TotalCount = getAccessibleChildCount();
489  for( sal_Int32 i = 0; i < TotalCount; i++ )
490  if( isAccessibleChildSelected(i) ) nCount++;
491  return nCount;
492 }
493 
494 uno::Reference<XAccessible> SAL_CALL ScAccessibleEditObject::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
495 {
496  if ( nSelectedChildIndex > getSelectedAccessibleChildCount() )
497  throw IndexOutOfBoundsException();
498  sal_Int32 i1, i2;
499  for( i1 = 0, i2 = 0; i1 < getAccessibleChildCount(); i1++ )
500  if( isAccessibleChildSelected(i1) )
501  {
502  if( i2 == nSelectedChildIndex )
503  return getAccessibleChild( i1 );
504  i2++;
505  }
506  return uno::Reference<XAccessible>();
507 }
508 
510  sal_Int32 )
511 {
512 }
513 
514 uno::Reference< XAccessibleRelationSet > ScAccessibleEditObject::getAccessibleRelationSet( )
515 {
516  SolarMutexGuard aGuard;
517  vcl::Window* pWindow = mpWindow;
519  if ( pWindow )
520  {
521  vcl::Window *pLabeledBy = pWindow->GetAccessibleRelationLabeledBy();
522  if ( pLabeledBy && pLabeledBy != pWindow )
523  {
524  uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pLabeledBy->GetAccessible() };
525  rRelationSet->AddRelation( AccessibleRelation( AccessibleRelationType::LABELED_BY, aSequence ) );
526  }
527  vcl::Window* pMemberOf = pWindow->GetAccessibleRelationMemberOf();
528  if ( pMemberOf && pMemberOf != pWindow )
529  {
530  uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pMemberOf->GetAccessible() };
531  rRelationSet->AddRelation( AccessibleRelation( AccessibleRelationType::MEMBER_OF, aSequence ) );
532  }
533  return rRelationSet;
534  }
535  return uno::Reference< XAccessibleRelationSet >();
536 }
537 
539 {
540  tools::Rectangle aScreenBounds;
541 
543  {
546  }
547 
548  return aScreenBounds;
549 }
550 
552 {
554 
555  uno::Reference< XAccessibleContext > xContext(const_cast<ScAccessibleEditControlObject*>(this)->getAccessibleContext());
556  if ( xContext.is() )
557  {
558  uno::Reference< XAccessible > xParent( xContext->getAccessibleParent() );
559  if ( xParent.is() )
560  {
561  uno::Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), uno::UNO_QUERY );
562  if ( xParentComponent.is() )
563  {
564  Point aScreenLoc = aBounds.TopLeft();
565  awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen();
566  Point aPos( aScreenLoc.getX() - aParentScreenLoc.X, aScreenLoc.getY() - aParentScreenLoc.Y );
567  aBounds.SetPos( aPos );
568  }
569  }
570  }
571 
572  return aBounds;
573 }
574 
576 {
578  m_pController = nullptr;
579 }
580 
581 uno::Reference< XAccessibleRelationSet > ScAccessibleEditControlObject::getAccessibleRelationSet()
582 {
583  SolarMutexGuard aGuard;
585  return uno::Reference< XAccessibleRelationSet >();
587 }
588 
590 {
592  return nullptr;
594 }
595 
598 {
599  // tdf#141769 set this early so its always available, even before the on-demand
600  // editview is created
601  mpTextWnd = pTextWnd;
602 }
603 
604 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void SetPos(const Point &rPoint)
virtual OUString createAccessibleDescription() override
Return this object's description.
SCROW Row() const
Definition: address.hxx:261
virtual void SAL_CALL deselectAccessibleChild(sal_Int32 nSelectedChildIndex) override
ScAddress GetCurCellAddress() const
virtual void SAL_CALL clearAccessibleSelection() override
MapMode const & GetRefMapMode() const
virtual void SAL_CALL release() noexcept override
ULONG m_refCount
virtual void SAL_CALL selectAccessibleChild(sal_Int32 nChildIndex) override
virtual void SAL_CALL acquire() noexcept override
css::uno::Reference< css::frame::XModel3 > GetModel() const
void SetDescription(const OUString &rDesc)
Use this method to set initial Description without notification.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
const tools::Rectangle & GetOutputArea() const
void InitAcc(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, EditView *pEditView, const OUString &rName, const OUString &rDescription)
#define SC_UNONAME_CCOLOR
Definition: unonames.hxx:50
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual a11yrelationset get_accessible_relation_set()=0
#define SC_UNONAME_CELLBACK
Definition: unonames.hxx:97
Size const & GetOutputSizePixel() const
virtual void SAL_CALL removeAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
virtual ~ScAccessibleEditObject() override
sal_Int32 GetFgBgColor(const OUString &strPropColor)
css::uno::Reference< css::accessibility::XAccessible > GetAccessible(bool bCreate=true)
void SetParent(const css::uno::Reference< css::accessibility::XAccessible > &rParent)
int nCount
virtual void SAL_CALL acquire() noexcept override
weld::CustomWidgetController * m_pController
SCTAB Tab() const
Definition: address.hxx:270
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
void SetName(const OUString &rName)
Use this method to set initial Name without notification.
virtual OutputDevice & get_ref_device()=0
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
Return the specified child or NULL if index is invalid.
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) override
===== XInterface =====================================================
virtual OutputDevice * GetOutputDeviceForView()
VclPtr< vcl::Window > mpWindow
Point LogicToPixel(const Point &rLogicPt) const
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
===== XAccessibleEventBroadcaster =====================================
virtual sal_Bool SAL_CALL isAccessibleChildSelected(sal_Int32 nChildIndex) override
int i
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
EditEngine * GetEditEngine() const
#define SC_MOD()
Definition: scmod.hxx:250
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
unsigned char sal_Bool
void CommitFocusGained() const
Calls all FocusListener to tell they that the focus is gained.
virtual OUString createAccessibleName() override
Return the object's current name.
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
===== XTypeProvider ===================================================
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return NULL to indicate that an empty relation set.
std::unique_ptr< accessibility::AccessibleTextHelper > mpTextHelper
SCCOL Col() const
Definition: address.hxx:266
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
constexpr Point TopLeft() const
vcl::Window * GetAccessibleRelationMemberOf() const
virtual Point get_accessible_location_on_screen()=0
virtual void SAL_CALL release() noexcept override
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
Return the set of current states.
weld::DrawingArea * GetDrawingArea() const
virtual void SAL_CALL disposing() override
virtual OutputDevice * GetOutputDeviceForView() override
virtual void SAL_CALL disposing() override
::OutputDevice const * GetOutDev() const
bool IsEditMode() const
Definition: inputhdl.hxx:185
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return NULL to indicate that an empty relation set.
void CommitFocusLost() const
Calls all FocusListener to tell they that the focus is lost.
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
===== XAccessibleEventBroadcaster =====================================
VclPtr< vcl::Window > mpWindow
ScDocument * GetDocument() const
SfxObjectShell * GetDocumentShell() const
Definition: document.hxx:1057
virtual void SAL_CALL selectAllAccessibleChildren() override
virtual sal_Int32 SAL_CALL getBackground() override
ScAccessibleEditLineObject(ScTextWnd *pTextWnd)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex) override
void dispose()
virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount() override
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) override
===== XInterface =====================================================
virtual sal_Int32 SAL_CALL getForeground() override
===== XAccessibleComponent ============================================
vcl::Window * GetAccessibleRelationLabeledBy() const
virtual void SAL_CALL removeAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
bool IsTopMode() const
Definition: inputhdl.hxx:187
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
===== XAccessibleContext ==============================================
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
===== XAccessible =====================================================
virtual void SAL_CALL disposing() override
ScAccessibleEditObject(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, EditView *pEditView, vcl::Window *pWin, const OUString &rName, const OUString &rDescription, EditObjectType eObjectType)
This base class provides an implementation of the AccessibleCell service.