20#include <com/sun/star/uno/Sequence.h>
21#include <com/sun/star/accessibility/AccessibleStateType.hpp>
22#include <com/sun/star/accessibility/AccessibleRole.hpp>
23#include <com/sun/star/accessibility/XAccessibleValue.hpp>
24#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
25#include <com/sun/star/accessibility/XAccessibleText.hpp>
40#pragma clang diagnostic push
41#pragma clang diagnostic ignored "-Wextra-tokens"
46#pragma clang diagnostic pop
51using namespace com::sun::star::accessibility::AccessibleRole;
52using namespace com::sun::star::accessibility::AccessibleStateType;
58 {ALERT , ROLE_SYSTEM_DIALOG},
62 {CHECK_BOX , ROLE_SYSTEM_CHECKBUTTON},
70 {
DIALOG, ROLE_SYSTEM_DIALOG},
75 {FILLER, ROLE_SYSTEM_WHITESPACE},
80 {
FRAME, ROLE_SYSTEM_DIALOG},
82 {
GRAPHIC , ROLE_SYSTEM_GRAPHIC},
83 {GROUP_BOX, ROLE_SYSTEM_GROUPING},
86 {HYPER_LINK , ROLE_SYSTEM_TEXT},
89 {LABEL, ROLE_SYSTEM_STATICTEXT},
91 {
LIST , ROLE_SYSTEM_LIST},
92 {LIST_ITEM , ROLE_SYSTEM_LISTITEM},
94 {
MENU, ROLE_SYSTEM_MENUITEM},
95 {MENU_BAR, ROLE_SYSTEM_MENUBAR},
96 {MENU_ITEM, ROLE_SYSTEM_MENUITEM},
98 {PAGE_TAB, ROLE_SYSTEM_PAGETAB},
99 {PAGE_TAB_LIST, ROLE_SYSTEM_PAGETABLIST},
102 {PASSWORD_TEXT, ROLE_SYSTEM_TEXT},
103 {POPUP_MENU, ROLE_SYSTEM_MENUPOPUP},
104 {PUSH_BUTTON, ROLE_SYSTEM_PUSHBUTTON},
105 {PROGRESS_BAR, ROLE_SYSTEM_PROGRESSBAR},
106 {RADIO_BUTTON, ROLE_SYSTEM_RADIOBUTTON},
110 {SCROLL_BAR , ROLE_SYSTEM_SCROLLBAR},
114 {
SLIDER , ROLE_SYSTEM_SLIDER},
115 {SPIN_BOX , ROLE_SYSTEM_SPINBUTTON},
117 {STATUS_BAR, ROLE_SYSTEM_STATUSBAR},
118 {
TABLE, ROLE_SYSTEM_TABLE},
120 {
TEXT, ROLE_SYSTEM_TEXT},
123 {TOGGLE_BUTTON, ROLE_SYSTEM_PUSHBUTTON},
125 {TOOL_BAR, ROLE_SYSTEM_TOOLBAR},
126 {TOOL_TIP, ROLE_SYSTEM_TOOLTIP},
127 {TREE , ROLE_SYSTEM_OUTLINE},
129 {
WINDOW, ROLE_SYSTEM_WINDOW},
130 {BUTTON_DROPDOWN, ROLE_SYSTEM_BUTTONDROPDOWN},
131 {BUTTON_MENU, ROLE_SYSTEM_BUTTONMENU},
141 {TREE_ITEM , ROLE_SYSTEM_OUTLINEITEM},
142 {TREE_TABLE, ROLE_SYSTEM_OUTLINE},
145 {DOCUMENT_PRESENTATION, ROLE_SYSTEM_DOCUMENT },
146 {DOCUMENT_SPREADSHEET, ROLE_SYSTEM_DOCUMENT },
147 {DOCUMENT_TEXT, ROLE_SYSTEM_DOCUMENT },
148 {
STATIC, ROLE_SYSTEM_STATICTEXT },
149 {NOTIFICATION, ROLE_SYSTEM_ALERT}
164 m_pParantID (nullptr),
166 m_pParentObj(nullptr),
167 m_pListener (pListener),
204 std::vector<AccObject*>::iterator iter;
229 std::vector<AccObject*>::iterator iter;
324 pAny = pRValue->getCurrentValue();
346 case RADIO_MENU_ITEM:
347 case CHECK_MENU_ITEM:
351 case BUTTON_DROPDOWN:
383 val = pRText->getText();
418 strValue=OUString::number(val);
433 for (
const OUString& rElem : val)
442 strValue=OUString::number(val);
450 strValue=OUString::number(val);
455 css::accessibility::TextSegment val;
458 OUString realVal(val.SegmentText);
509 IState = STATE_SYSTEM_BUSY;
512 if( Role == PUSH_BUTTON || Role == TOGGLE_BUTTON )
514 IState = STATE_SYSTEM_PRESSED;
517 IState = STATE_SYSTEM_CHECKED;
520 IState = STATE_SYSTEM_UNAVAILABLE;
523 IState = STATE_SYSTEM_EXPANDED;
526 IState = STATE_SYSTEM_FOCUSABLE;
529 IState = STATE_SYSTEM_FOCUSED;
532 IState = STATE_SYSTEM_MIXED;
534 case MULTI_SELECTABLE:
535 IState = STATE_SYSTEM_MULTISELECTABLE;
538 IState = STATE_SYSTEM_PRESSED;
541 IState = STATE_SYSTEM_SIZEABLE;
550 IState = STATE_SYSTEM_SELECTABLE;
560 IState = STATE_SYSTEM_SELECTED;
564 IState = STATE_SYSTEM_FOCUSED;
570 if( Role == PUSH_BUTTON || Role == TOGGLE_BUTTON || BUTTON_DROPDOWN == Role )
572 IState = STATE_SYSTEM_HASPOPUP;
578 IState = STATE_SYSTEM_COLLAPSED;
592 IState = STATE_SYSTEM_OFFSCREEN;
595 IState = STATE_SYSTEM_MOVEABLE;
598 IState = STATE_SYSTEM_COLLAPSED;
601 IState = STATE_SYSTEM_DEFAULT;
622 if( xState == FOCUSABLE)
626 || Role == RADIO_MENU_ITEM
627 || Role == CHECK_MENU_ITEM)
631 if (Role == TOGGLE_BUTTON || Role == PUSH_BUTTON || BUTTON_DROPDOWN == Role)
639 else if( xState == AccessibleStateType::VISIBLE )
643 else if( xState == AccessibleStateType::SHOWING )
667 if( xState == AccessibleStateType::VISIBLE )
671 else if( xState == AccessibleStateType::SHOWING )
706 if( Role == PUSH_BUTTON || Role == RADIO_BUTTON || Role == MENU_ITEM ||
707 Role == LIST_ITEM || Role == CHECK_BOX || Role == TREE_ITEM ||
708 Role == CHECK_MENU_ITEM || Role == RADIO_MENU_ITEM )
719 if (!(Role == SPIN_BOX || Role ==
COMBO_BOX || Role == DATE_EDITOR ||
720 Role == EDIT_BAR || Role == PASSWORD_TEXT || Role ==
TEXT))
722 const OUString sActionDesc =
m_xAccActionRef->getAccessibleActionDescription(0);
724 if (!sActionDesc.isEmpty())
746 sal_Int16 iRoleIndex = pContext->getAccessibleRole();
767 sal_Int64 nRState = pContext->getAccessibleStateSet();
776 bool isEnable =
false;
777 bool isShowing =
false;
778 bool isEditable =
false;
779 bool isVisible =
false;
780 bool isFocusable =
false;
782 for (
int i=0;
i<63; ++
i)
784 sal_Int64
nState = sal_Int64(1) <<
i;
789 else if (
nState == SHOWING)
795 else if (
nState == FOCUSABLE)
804 if(!(isShowing && isVisible) )
812 if(!(isShowing || isVisible) )
858 if(!(Role == FILLER || Role == END_NOTE || Role ==
FOOTER || Role ==
FOOTNOTE || Role == GROUP_BOX || Role ==
RULER
859 || Role ==
HEADER || Role ==
ICON || Role == INTERNAL_FRAME || Role == LABEL || Role == LAYERED_PANE
860 || Role == SCROLL_BAR || Role == SCROLL_PANE || Role == SPLIT_PANE || Role ==
STATIC || Role == STATUS_BAR
861 || Role == TOOL_TIP || Role == NOTIFICATION))
869 else if (
TABLE_CELL == Role ||
TABLE == Role || PANEL == Role || OPTION_PANE == Role ||
879 if ( isShowing && isVisible)
894 if( !((Role == MENU_ITEM) ||
895 (Role == RADIO_MENU_ITEM) ||
896 (Role == CHECK_MENU_ITEM)) )
898 if ( Role == TOGGLE_BUTTON || Role == PUSH_BUTTON || BUTTON_DROPDOWN == Role)
908 else if( isShowing || isVisible )
918 if( pContext->getAccessibleChildCount() > 0 )
989 *isExpandable =
false;
997 if (nRState & EXPANDED)
999 if (nRState & EXPANDABLE)
1000 *isExpandable =
true;
const short ROLE_TABLE[][2]
IMAccessible * UAccCOMCreateInstance()
#define UNO_MSAA_UNMAPPING
AccEventListener is the general event listener for all controls.
void UpdateRole()
update role information from uno to com
void UpdateActionDesc()
update action description desc
void UpdateName()
Update name property to com object.
void unsetFocus()
Unset self from focus object in parent child list.
void DecreaseState(sal_Int64 xState)
Decrease state of com object.
void UpdateAction()
Update default action property to com object.
void IncreaseState(sal_Int64 xState)
Increase state of com object.
DWORD GetMSAAStateFromUNO(sal_Int64 xState)
Get MSAA state from UNO state @Role nState UNO state.
::rtl::Reference< AccEventListener > m_pListener
void DeleteChild(AccObject *pChild)
Delete a child element.
void UpdateDefaultAction()
Set special default action description string via UNO role.
void SetParentObj(AccObject *pParentAccObj)
void UpdateState()
update state information from uno to com
virtual ~AccObject()
Destructor.
AccEventListener * getListener()
void SetParentHWND(HWND hWnd)
OUString GetMAccessibleValueFromAny(css::uno::Any pAny)
css::uno::Reference< css::accessibility::XAccessible > m_xAccRef
void UpdateValue()
Update value property to com object.
short GetRole() const
Get role property via pAny.
void setFocus()
Set self to focus object in parent child list.
bool UpdateAccessibleInfoFromUnoToMSAA()
Public method to mapping information between MSAA and UNO.
IAccChildList m_childrenList
AccObject(css::accessibility::XAccessible *pXAcc=nullptr, AccObjectManagerAgent *pAgent=nullptr, AccEventListener *accListener=nullptr)
Constructor.
void InsertChild(AccObject *pChild, short pos=LAST_CHILD)
Insert a child element.
void SetValue(css::uno::Any pAny)
Set value property via pAny.
AccObject * GetParentObj()
css::uno::Reference< css::accessibility::XAccessible > const & GetXAccessible()
css::uno::Reference< css::accessibility::XAccessibleAction > m_xAccActionRef
css::uno::Reference< css::accessibility::XAccessibleContext > m_xAccContextRef
void ImplInitializeCreateObj()
Translate all UNO basic information into MSAA com information.
::rtl::Reference< AccEventListener > SetListener(::rtl::Reference< AccEventListener > const &pListener)
IMAccessible *const m_pIMAcc
void SetName(css::uno::Any newName)
Set name property via pAny.
IMAccessible * GetIMAccessible()
AccObject * NextChild()
Get next child element.
void GetExpandedState(sal_Bool *isExpandable, sal_Bool *isExpanded)
void UpdateValidWindow()
In order to windows API WindowFromAccessibleObject, we sometimes to set a pure top window accessible ...
@ IA2_ROLE_SCROLL_PANE
A scroll pane.
@ IA2_ROLE_OPTION_PANE
A specialized pane whose primary use is inside a dialog.
@ IA2_ROLE_HEADER
Header of a document page.
@ IA2_ROLE_CAPTION
A caption describing another object.
@ IA2_ROLE_SPLIT_PANE
A split pane.
@ IA2_ROLE_CHECK_MENU_ITEM
Used for check buttons that are menu items.
@ IA2_ROLE_PAGE
An object representing a page of document content.
@ IA2_ROLE_FILE_CHOOSER
A file chooser.
@ IA2_ROLE_INTERNAL_FRAME
An internal frame.
@ IA2_ROLE_CANVAS
An object that can be drawn into and to manage events from the objects drawn into it.
@ IA2_ROLE_ENDNOTE
Text that is used as an endnote (footnote at the end of a chapter or section).
@ IA2_ROLE_DATE_EDITOR
A date editor.
@ IA2_ROLE_FOOTNOTE
Text that is used as a footnote. Also refer to IA2_ROLE_ENDNOTE.
@ IA2_ROLE_FOOTER
Footer of a document page.
@ IA2_ROLE_DESKTOP_PANE
A desktop pane.
@ IA2_ROLE_UNKNOWN
Unknown role.
@ IA2_ROLE_TEXT_FRAME
Collection of objects that constitute a logical text entity.
@ IA2_ROLE_FORM
A container of form controls.
@ IA2_ROLE_SECTION
A container of document content.
@ IA2_ROLE_RULER
A ruler such as those used in word processors.
@ IA2_ROLE_RADIO_MENU_ITEM
A radio button that is a menu item.
@ IA2_ROLE_COLOR_CHOOSER
A specialized dialog that lets the user choose a color.
@ IA2_ROLE_EDITBAR
An editable text object in a toolbar.
@ IA2_ROLE_LAYERED_PANE
A layered pane.
@ IA2_ROLE_ROOT_PANE
A root pane.
@ IA2_ROLE_NOTE
A section whose content is parenthetic or ancillary to the main content of the resource.
@ IA2_ROLE_DESKTOP_ICON
An iconified internal frame in an IA2_ROLE_DESKTOP_PANE.
@ IA2_ROLE_VIEW_PORT
A viewport.
@ IA2_ROLE_DIRECTORY_PANE
A directory pane.
@ IA2_ROLE_SHAPE
Object with graphical representation used to represent content on draw pages.
@ IA2_ROLE_HEADING
Heading. Use the IAccessible2::attributes level attribute to determine the heading level.
@ IA2_ROLE_EMBEDDED_OBJECT
Embedded (OLE) object.
@ IA2_ROLE_GLASS_PANE
A glass pane.
@ IA2_ROLE_FONT_CHOOSER
A font chooser.
@ IA2_ROLE_ICON
A small fixed size picture, typically used to decorate components.
@ IA2_ROLE_PARAGRAPH
A paragraph of text.
@ IA2_ROLE_IMAGE_MAP
An image map object.
HRESULT Put_XAccWindowHandle(HWND hwnd)
HRESULT Put_XAccChildID(long dChildID)
HRESULT Put_XAccAgent(hyper pAgent)
HRESULT Put_XAccValue(const OLECHAR *pszAccValue)
HRESULT SetXAccessible(hyper XAccessible)
HRESULT Put_ActionDescription(const OLECHAR *szAction)
HRESULT Put_XAccParent(IMAccessible *pIParent)
HRESULT Put_XAccName(const OLECHAR *pszName)
HRESULT SetDefaultAction(hyper pAction)
HRESULT IncreaseState(DWORD pXSate)
HRESULT SetState(DWORD pXSate)
HRESULT DecreaseState(DWORD pXSate)
HRESULT Put_XAccFocus(long dChildID)
HRESULT Put_XAccRole(unsigned short pRole)
#define SAL_N_ELEMENTS(arr)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)