30 #include <inputwin.hxx>
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>
40 #include <editeng/editeng.hxx>
47 #include <unonames.hxx>
48 #include <document.hxx>
50 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
52 #include <com/sun/star/accessibility/XAccessibleText.hpp>
54 using ::com::sun::star::lang::IndexOutOfBoundsException;
61 const uno::Reference<XAccessible>& rxParent,
63 const OUString& rDescription, EditObjectType eObjectType)
65 , mpEditView(pEditView)
68 , meObjectType(eObjectType)
72 InitAcc(rxParent, pEditView, rName, rDescription);
80 , meObjectType(eObjectType)
87 const uno::Reference<XAccessible>& rxParent,
89 const OUString& rName,
90 const OUString& rDescription)
146 css::uno::Any SAL_CALL
150 if ( ! aReturn.hasValue())
152 static_cast< css::accessibility::XAccessibleSelection* >(
this)
171 const awt::Point& rPoint )
173 uno::Reference<XAccessible> xRet;
199 Point aCellLoc = aScreenBounds.TopLeft();
202 Point aPos( aCellLoc.getX() + aWindowLoc.getX(), aCellLoc.getY() + aWindowLoc.getY() );
203 aScreenBounds.SetPos( aPos );
212 return aScreenBounds;
224 uno::Reference< XAccessibleContext > xContext( xThis->getAccessibleContext() );
227 uno::Reference< XAccessible > xParent( xContext->getAccessibleParent() );
230 uno::Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), uno::UNO_QUERY );
231 if ( xParentComponent.is() )
234 awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen();
235 Point aPos( aScreenLoc.getX() - aParentScreenLoc.X, aScreenLoc.getY() - aParentScreenLoc.Y );
257 uno::Reference< XAccessible > SAL_CALL
266 uno::Reference<XAccessibleStateSet> SAL_CALL
270 uno::Reference<XAccessibleStateSet> xParentStates;
273 uno::Reference<XAccessibleContext> xParentContext =
getAccessibleParent()->getAccessibleContext();
274 xParentStates = xParentContext->getAccessibleStateSet();
278 pStateSet->AddState(AccessibleStateType::DEFUNC);
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);
303 OSL_FAIL(
"Should never be called, because is set in the constructor.");
333 return "ScAccessibleEditObject";
338 uno::Sequence<sal_Int8> SAL_CALL
341 return css::uno::Sequence<sal_Int8>();
347 const uno::Reference<XAccessibleStateSet>& rxParentStates)
350 (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
363 ::std::unique_ptr < ScAccessibleTextData > pAccessibleTextData;
366 pAccessibleTextData.reset
371 pAccessibleTextData.reset
375 std::unique_ptr<ScAccessibilityEditSource> pEditSrc =
376 std::make_unique<ScAccessibilityEditSource>(std::move(pAccessibleTextData));
378 mpTextHelper = std::make_unique<::accessibility::AccessibleTextHelper>(std::move(pEditSrc));
379 mpTextHelper->SetEventSource(
this);
384 mpTextHelper->SetFocus();
395 if( pInputHdl && !pInputHdl->
IsTopMode() )
397 SdrHint aHint( SdrHintKind::BeginEdit );
398 mpTextHelper->GetEditSource().GetBroadcaster().Broadcast( aHint );
422 uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->
GetModel(), uno::UNO_QUERY );
423 if ( xSpreadDoc.is() )
425 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
426 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
430 uno::Reference<sheet::XSpreadsheet> xTable;
436 uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
439 uno::Any aAny = xCellProps->getPropertyValue(strPropColor);
459 uno::Reference<XAccessibleContext> xContext;
461 xContext = xAcc->getAccessibleContext();
464 if( xContext->getAccessibleRole() == AccessibleRole::PARAGRAPH )
466 uno::Reference< css::accessibility::XAccessibleText >
467 xText(xAcc, uno::UNO_QUERY);
470 if( xText->getSelectionStart() >= 0 )
return true;
489 for( sal_Int32
i = 0;
i < TotalCount;
i++ )
497 throw IndexOutOfBoundsException();
502 if( i2 == nSelectedChildIndex )
506 return uno::Reference<XAccessible>();
522 if ( pLabeledBy && pLabeledBy != pWindow )
524 uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pLabeledBy->
GetAccessible() };
525 rRelationSet->AddRelation( AccessibleRelation( AccessibleRelationType::LABELED_BY, aSequence ) );
528 if ( pMemberOf && pMemberOf != pWindow )
530 uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pMemberOf->
GetAccessible() };
531 rRelationSet->AddRelation( AccessibleRelation( AccessibleRelationType::MEMBER_OF, aSequence ) );
535 return uno::Reference< XAccessibleRelationSet >();
548 return aScreenBounds;
555 uno::Reference< XAccessibleContext > xContext(const_cast<ScAccessibleEditControlObject*>(
this)->
getAccessibleContext());
558 uno::Reference< XAccessible > xParent( xContext->getAccessibleParent() );
561 uno::Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), uno::UNO_QUERY );
562 if ( xParentComponent.is() )
565 awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen();
566 Point aPos( aScreenLoc.getX() - aParentScreenLoc.X, aScreenLoc.getY() - aParentScreenLoc.Y );
585 return uno::Reference< XAccessibleRelationSet >();
virtual OUString createAccessibleDescription() override
Return this object's description.
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
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
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual a11yrelationset get_accessible_relation_set()=0
#define SC_UNONAME_CELLBACK
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)
virtual void SAL_CALL acquire() noexcept override
weld::CustomWidgetController * m_pController
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
EditObjectType meObjectType
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
void IsObjectValid() const
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
EditEngine * GetEditEngine() const
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
void CommitFocusGained() const
Calls all FocusListener to tell they that the focus is gained.
ScAddress m_curCellAddress
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
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
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.
virtual void SAL_CALL disposing() override
virtual OutputDevice * GetOutputDeviceForView() override
virtual void SAL_CALL disposing() override
::OutputDevice const * GetOutDev() const
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
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
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
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 =====================================================
bool m_bDetectedRangeSegmentation false
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.