21 #include <com/sun/star/accessibility/AccessibleRole.hpp>
22 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
24 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
25 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
28 #include <osl/mutex.hxx>
33 #include <svx/strings.hrc>
36 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
39 using namespace ::
cppu;
40 using namespace ::
osl;
47 #define MAX_NUM_OF_CHILDREN 9
48 #define NOCHILDSELECTED -1
53 struct ChildIndexToPointData
55 const char* pResIdName;
56 const char* pResIdDescr;
64 DBG_ASSERT( nIndex < 9 && nIndex >= 0,
"-IndexToPoint(): invalid child index! You have been warned..." );
67 static const ChildIndexToPointData pCornerData[] =
69 { RID_SVXSTR_RECTCTL_ACC_CHLD_LT, RID_SVXSTR_RECTCTL_ACC_CHLD_LT,
RectPoint::LT },
70 { RID_SVXSTR_RECTCTL_ACC_CHLD_MT, RID_SVXSTR_RECTCTL_ACC_CHLD_MT,
RectPoint::MT },
71 { RID_SVXSTR_RECTCTL_ACC_CHLD_RT, RID_SVXSTR_RECTCTL_ACC_CHLD_RT,
RectPoint::RT },
72 { RID_SVXSTR_RECTCTL_ACC_CHLD_LM, RID_SVXSTR_RECTCTL_ACC_CHLD_LM,
RectPoint::LM },
73 { RID_SVXSTR_RECTCTL_ACC_CHLD_MM, RID_SVXSTR_RECTCTL_ACC_CHLD_MM,
RectPoint::MM },
74 { RID_SVXSTR_RECTCTL_ACC_CHLD_RM, RID_SVXSTR_RECTCTL_ACC_CHLD_RM,
RectPoint::RM },
75 { RID_SVXSTR_RECTCTL_ACC_CHLD_LB, RID_SVXSTR_RECTCTL_ACC_CHLD_LB,
RectPoint::LB },
76 { RID_SVXSTR_RECTCTL_ACC_CHLD_MB, RID_SVXSTR_RECTCTL_ACC_CHLD_MB,
RectPoint::MB },
77 { RID_SVXSTR_RECTCTL_ACC_CHLD_RB, RID_SVXSTR_RECTCTL_ACC_CHLD_RB,
RectPoint::RB }
80 return pCornerData + nIndex;
86 tools::Long nRet( static_cast<tools::Long>(ePoint) );
118 Reference< XAccessible > SAL_CALL SvxRectCtlAccessibleContext::getAccessibleAtPoint( const awt::Point& rPoint )
120 ::osl::MutexGuard aGuard(
m_aMutex );
122 Reference< XAccessible > xRet;
127 xRet = getAccessibleChild( nChild );
135 ::osl::MutexGuard aGuard(
m_aMutex );
144 Reference< XAccessible > xChild(
mvChildren[ nIndex ]);
149 ::osl::MutexGuard aGuard(
m_aMutex );
153 if (!xChild.is() &&
mpRepr)
157 OUString aDescr(
SvxResId(p->pResIdDescr));
162 aDescr, aFocusRect, nIndex );
168 pChild->setStateChecked(
true );
177 ::osl::MutexGuard aGuard(
m_aMutex );
180 return uno::Reference<css::accessibility::XAccessible>();
185 return AccessibleRole::PANEL;
190 ::osl::MutexGuard aGuard(
m_aMutex );
191 return msDescription +
" Please use arrow key to selection.";
196 ::osl::MutexGuard aGuard(
m_aMutex );
205 ::osl::MutexGuard aGuard(
m_aMutex );
208 return uno::Reference<css::accessibility::XAccessibleRelationSet>();
213 ::osl::MutexGuard aGuard(
m_aMutex );
218 pStateSetHelper->AddState( AccessibleStateType::ENABLED );
219 pStateSetHelper->AddState( AccessibleStateType::FOCUSABLE );
221 pStateSetHelper->AddState( AccessibleStateType::FOCUSED );
222 pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
224 pStateSetHelper->AddState( AccessibleStateType::SHOWING );
227 pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
230 pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
232 return pStateSetHelper;
238 ::osl::MutexGuard aGuard(
m_aMutex );
247 ::osl::MutexGuard aGuard(
m_aMutex );
257 ::osl::MutexGuard aGuard(
m_aMutex );
269 ::osl::MutexGuard aGuard(
m_aMutex );
275 DBG_ASSERT(pData,
"SvxRectCtlAccessibleContext::selectAccessibleChild(): this is an impossible state! Or at least should be...");
286 SAL_WARN(
"svx",
"SvxRectCtlAccessibleContext::clearAccessibleSelection() is not possible!" );
293 ::osl::MutexGuard aGuard(
m_aMutex );
304 throw lang::IndexOutOfBoundsException();
309 ::osl::MutexGuard aGuard(
m_aMutex );
312 if( nNew < nNumOfChildren )
325 aNew <<= AccessibleStateType::FOCUSED;
326 NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOld, aNew);
335 ::osl::MutexGuard aGuard(
m_aMutex );
340 if( nNew < nNumOfChildren )
371 OAccessibleSelectionHelper::disposing();
384 ::osl::MutexGuard aGuard(
m_aMutex );
393 aRet.X = aOutPos.X();
394 aRet.Y = aOutPos.Y();
395 aRet.
Width = aOutSize.Width();
396 aRet.Height = aOutSize.Height();
403 const Reference<XAccessible>& rxParent,
404 const OUString& rName,
405 const OUString& rDescription,
408 : msDescription( rDescription )
411 , maBoundingBox( rBoundingBox )
412 , mnIndexInParent( nIndexInParent )
413 , mbIsChecked( false )
424 return Reference< XAccessible >();
434 ::osl::MutexGuard aGuard(
m_aMutex );
444 ::osl::MutexGuard aGuard(
m_aMutex );
459 throw lang::IndexOutOfBoundsException();
469 return AccessibleRole::RADIO_BUTTON;
474 ::osl::MutexGuard aGuard(
m_aMutex );
480 ::osl::MutexGuard aGuard(
m_aMutex );
492 uno::Sequence< uno::Reference< uno::XInterface > > aSequence {
mxParent };
493 pRelationSetHelper->AddRelation( css::accessibility::AccessibleRelation( css::accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
496 return pRelationSetHelper;
501 ::osl::MutexGuard aGuard(
m_aMutex );
504 if (!rBHelper.bDisposed)
508 pStateSetHelper->AddState( AccessibleStateType::CHECKED );
511 pStateSetHelper->AddState( AccessibleStateType::ENABLED );
512 pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
513 pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
514 pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
515 pStateSetHelper->AddState( AccessibleStateType::SHOWING );
516 pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
519 pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
521 return pStateSetHelper;
563 ::osl::MutexGuard aGuard(
m_aMutex );
566 throw IndexOutOfBoundsException();
568 Reference<XAccessibleSelection> xSelection(
mxParent, UNO_QUERY);
578 ::osl::MutexGuard aGuard(
m_aMutex );
581 throw IndexOutOfBoundsException();
589 ::osl::MutexGuard aGuard(
m_aMutex );
592 throw IndexOutOfBoundsException();
594 return Reference< XAccessibleKeyBinding >();
599 OAccessibleComponentHelper::disposing();
618 Any& rMod = bChecked? aNew : aOld;
621 rMod <<= AccessibleStateType::FOCUSED;
624 rMod <<= AccessibleStateType::CHECKED;
633 aNew <<= AccessibleStateType::FOCUSED;
IMPLEMENT_FORWARD_XINTERFACE2(ChildWindowPane, ChildWindowPaneInterfaceBase, Pane)
void SetActualRP(RectPoint eNewRP)
const Color & GetDialogColor() const
OUString msName
Name of this object.
OUString msDescription
Description of this object.
virtual OUString SAL_CALL getAccessibleName() override
std::unique_ptr< ContentProperties > pData
static const sal_uInt8 NO_CHILDREN
virtual sal_Bool SAL_CALL setCurrentValue(const css::uno::Any &aNumber) override
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
virtual css::uno::Any SAL_CALL getMinimumValue() override
virtual void SAL_CALL disposing() override
const StyleSettings & GetStyleSettings() const
WeakReference< XInterface > mxParent
static const AllSettings & GetSettings()
tools::Long mnIndexInParent
index of child in parent
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
virtual css::uno::Reference< css::accessibility::XAccessibleKeyBinding > SAL_CALL getAccessibleActionKeyBinding(sal_Int32 nIndex) override
const Color & GetLabelTextColor() const
OUString msDescription
Description of this object.
virtual sal_Bool SAL_CALL doAccessibleAction(sal_Int32 nIndex) override
virtual bool implIsSelected(sal_Int32 nAccessibleChildIndex) override
a11yrelationset get_accessible_relation_set() const
void checkChildIndex(tools::Long nIndex)
virtual sal_Int32 SAL_CALL getForeground() override
virtual OUString SAL_CALL getAccessibleActionDescription(sal_Int32 nIndex) override
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual ~SvxRectCtlChildAccessibleContext() override
#define MAX_NUM_OF_CHILDREN
OUString SvxResId(const char *pId)
virtual css::uno::Any SAL_CALL getCurrentValue() override
virtual ~SvxRectCtlAccessibleContext() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
std::vector< rtl::Reference< SvxRectCtlChildAccessibleContext > > mvChildren
array for all possible children
virtual OUString SAL_CALL getAccessibleDescription() override
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
virtual void SAL_CALL grabFocus() override
virtual void implSelect(sal_Int32 nAccessibleChildIndex, bool bSelect) override
virtual void SAL_CALL disposing() override
virtual css::uno::Any SAL_CALL getMaximumValue() override
#define DBG_ASSERT(sCon, aError)
virtual void SAL_CALL grabFocus() override
tools::Long Width() const
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
tools::Long mnSelectedChild
actual selected child
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return empty reference to indicate that the relation set is not supported.
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
SvxRectCtlAccessibleContext(SvxRectCtl *pRepresentation)
css::uno::Reference< css::accessibility::XAccessible > getAccessibleParent() const
void selectChild(RectPoint ePoint)
Selects a new child by point.
bool mbIsChecked
Indicates, if object is checked.
virtual css::awt::Rectangle implGetBounds() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
tools::Rectangle CalculateFocusRectangle() const
static const ChildIndexToPointData * IndexToPoint(tools::Long nIndex)
css::uno::Reference< css::accessibility::XAccessible > mxParent
Reference to the parent object.
SvxRectCtl * mpRepr
pointer to internal representation
virtual OUString SAL_CALL getAccessibleName() override
virtual sal_Int32 SAL_CALL getForeground() override
OUString msName
Name of this object.
virtual sal_Int32 SAL_CALL getBackground() override
tools::Rectangle maBoundingBox
Bounding box.
#define SAL_WARN(area, stream)
void FireChildFocus(RectPoint eButton)
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return empty reference to indicate that the relation set is not supported.
static tools::Long PointToIndex(RectPoint ePoint)
virtual sal_Int32 SAL_CALL getBackground() override
virtual css::awt::Rectangle implGetBounds() override
implements the calculation of the bounding rectangle
void setStateChecked(bool bChecked)
Sets the checked status.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
SvxRectCtlChildAccessibleContext(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, const OUString &rName, const OUString &rDescription, const tools::Rectangle &rBoundingBox, tools::Long nIndexInParent)
virtual OUString SAL_CALL getAccessibleDescription() override
css::awt::Rectangle AWTRectangle(const ::tools::Rectangle &rVCLRect)
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual sal_Int32 SAL_CALL getAccessibleActionCount() override
void NotifyAccessibleEvent(const sal_Int16 _nEventId, const css::uno::Any &_rOldValue, const css::uno::Any &_rNewValue)