LibreOffice Module winaccessibility (master) 1
AccObjectWinManager.hxx
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#pragma once
21
22#include <map>
23#include <mutex>
24
25#if !defined WIN32_LEAN_AND_MEAN
26# define WIN32_LEAN_AND_MEAN
27#endif
28#include <windows.h>
29#include <rtl/ref.hxx>
30#include "ResIDGenerator.hxx"
31#include <UAccCOM.h>
32
34class XAccessible;
35}
36class ResIDGenerator;
39class AccObject;
40enum class UnoMSAAEvent;
41
42/*******************************************************************
43AccObjectWinManager complete the functions:
441. Insert, delete,query,update Acc objects
452. Create, delete,fire AccEventLister, the lifecycle of AccEventListener is as same as
46 Acc Object
47 3.Return COM interface for AT,by the call back in salframe
48 4.Pass accessible information to Acc objects
49 *******************************************************************/
51{
53
54private:
55 typedef std::map<com::sun::star::accessibility::XAccessible*, AccObject> XIdToAccObjHash;
56 typedef std::map<HWND, com::sun::star::accessibility::XAccessible*> XHWNDToXAccHash;
57 typedef std::map<const long, AccObject*> XResIdToAccObjHash;
58
59 typedef std::map<const HWND, css::accessibility::XAccessible* >
61
62 // guard any access to XIdAccList and HwndXAcc
63 std::recursive_mutex m_Mutex;
64
65 //XAccessible to AccObject
67
68 //HWND to All XAccessible pointer
70
71 //id_Child to AccObject
73
74 //for file name support
76
77 css::accessibility::XAccessible* oldFocus;
78
81
83
84private:
85 long ImpleGenerateResID();
86 AccObject* GetAccObjByXAcc( css::accessibility::XAccessible* pXAcc);
87
89
90 css::accessibility::XAccessible* GetAccDocByHWND(HWND hWnd);
91
93 static void InsertAccChildNode(AccObject* pCurObj,AccObject* pParentObj,HWND pWnd);
94 static void DeleteAccChildNode(AccObject* pChild);
95 void DeleteFromHwndXAcc(css::accessibility::XAccessible const * pXAcc );
96
98 css::accessibility::XAccessible* pXAcc);
99public:
100 virtual ~AccObjectWinManager();
101 bool InsertAccObj( css::accessibility::XAccessible* pXAcc,css::accessibility::XAccessible* pParentXAcc,HWND pWnd);
102 bool InsertChildrenAccObj( css::accessibility::XAccessible* pXAcc,HWND pWnd=nullptr);
103 void DeleteAccObj( css::accessibility::XAccessible* pXAcc );
104 void DeleteChildrenAccObj(css::accessibility::XAccessible* pAccObj);
105
106 bool NotifyAccEvent(css::accessibility::XAccessible* pXAcc, UnoMSAAEvent eEvent);
107
108 LRESULT Get_ToATInterface(HWND hWnd, long lParam, WPARAM wParam);
109
110 void DecreaseState(css::accessibility::XAccessible* pXAcc, sal_Int64 nState);
111 void IncreaseState(css::accessibility::XAccessible* pXAcc, sal_Int64 nState);
112 void UpdateState( css::accessibility::XAccessible* pXAcc );
113
114 void SetValue( css::accessibility::XAccessible* pXAcc, css::uno::Any pAny );
115 void UpdateValue( css::accessibility::XAccessible* pXAcc );
116
117 void SetAccName( css::accessibility::XAccessible* pXAcc, css::uno::Any newName);
118 void UpdateAccName( css::accessibility::XAccessible* pXAcc );
119
120 void UpdateAccFocus( css::accessibility::XAccessible* newFocus );
121 void UpdateAction( css::accessibility::XAccessible* pXAcc );
122
123 static bool IsContainer( css::accessibility::XAccessible* pAccessible );
124
125 IMAccessible* GetIMAccByXAcc( css::accessibility::XAccessible* pXAcc );
127
128 void NotifyDestroy( css::accessibility::XAccessible* pXAcc );
129 css::accessibility::XAccessible* GetParentXAccessible( css::accessibility::XAccessible* pXAcc );
130 short GetParentRole( css::accessibility::XAccessible* pXAcc );
131
132 void SaveTopWindowHandle(HWND hWnd, css::accessibility::XAccessible* pXAcc);
133
134 void UpdateChildState(css::accessibility::XAccessible* pXAcc);
135
136 bool IsSpecialToolbarItem(css::accessibility::XAccessible* pXAcc);
137
138 static short GetRole(css::accessibility::XAccessible* pXAcc);
139
140 css::accessibility::XAccessible* GetAccDocByAccTopWin( css::accessibility::XAccessible* pXAcc );
141 bool IsTopWinAcc( css::accessibility::XAccessible* pXAcc );
142
143 static bool IsStateManageDescendant(css::accessibility::XAccessible* pAccessible);
144
145};
146
147/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
AccEventListener is the general event listener for all controls.
XResIdToAccObjHash XResIdAccList
bool IsSpecialToolbarItem(css::accessibility::XAccessible *pXAcc)
static short GetRole(css::accessibility::XAccessible *pXAcc)
void UpdateValue(css::accessibility::XAccessible *pXAcc)
Set corresponding com object's value via XAccessible interface.
void DecreaseState(css::accessibility::XAccessible *pXAcc, sal_Int64 nState)
state is a combination integer, each bit of which represents a single state, such as focused,...
XIdToAccObjHash XIdAccList
void NotifyDestroy(css::accessibility::XAccessible *pXAcc)
Notify some object will be destroyed.
void SetAccName(css::accessibility::XAccessible *pXAcc, css::uno::Any newName)
Set corresponding com object's name via XAccessible interface and new name.
static bool IsStateManageDescendant(css::accessibility::XAccessible *pAccessible)
Judge if a XAccessible object has ManageDescendant event.
::rtl::Reference< AccEventListener > CreateAccEventListener(css::accessibility::XAccessible *pXAcc)
Create the corresponding listener.
void UpdateAccFocus(css::accessibility::XAccessible *newFocus)
Update focus object by new focused XAccessible interface.
AccObjectWinManager(AccObjectManagerAgent *Agent=nullptr)
constructor
IMAccessible * GetIMAccByXAcc(css::accessibility::XAccessible *pXAcc)
Query and get IAccessible interface by XAccessible interface from list.
short GetParentRole(css::accessibility::XAccessible *pXAcc)
Get Parent role by XAccessible interface.
static void DeleteAccChildNode(AccObject *pChild)
Delete child element from children list.
void DeleteFromHwndXAcc(css::accessibility::XAccessible const *pXAcc)
Delete XAccessible items in top window handle hashtable.
static void InsertAccChildNode(AccObject *pCurObj, AccObject *pParentObj, HWND pWnd)
Insert child object.
void IncreaseState(css::accessibility::XAccessible *pXAcc, sal_Int64 nState)
state is a combination integer, each bit of which represents a single state,such as focused,...
css::accessibility::XAccessible * oldFocus
css::accessibility::XAccessible * GetParentXAccessible(css::accessibility::XAccessible *pXAcc)
Get Parent XAccessible interface by XAccessible interface.
std::recursive_mutex m_Mutex
void SetValue(css::accessibility::XAccessible *pXAcc, css::uno::Any pAny)
Set corresponding com object's value via XAccessible interface and new value.
virtual ~AccObjectWinManager()
Destructor,clear all resource.
css::accessibility::XAccessible * GetAccDocByAccTopWin(css::accessibility::XAccessible *pXAcc)
XHWNDToDocumentHash XHWNDDocList
AccObjectManagerAgent * pAgent
std::map< const long, AccObject * > XResIdToAccObjHash
long ImpleGenerateResID()
Generate a child ID, which is used for AT.
bool InsertAccObj(css::accessibility::XAccessible *pXAcc, css::accessibility::XAccessible *pParentXAcc, HWND pWnd)
Insert child object.
bool IsTopWinAcc(css::accessibility::XAccessible *pXAcc)
static rtl::Reference< AccEventListener > DeleteAccListener(AccObject *pAccObj)
Delete listener that inspects some XAccessible object.
std::map< const HWND, css::accessibility::XAccessible * > XHWNDToDocumentHash
void DeleteChildrenAccObj(css::accessibility::XAccessible *pAccObj)
Delete all children with the tree root of XAccessible pointer.
css::accessibility::XAccessible * GetAccDocByHWND(HWND hWnd)
IMAccessible * GetTopWindowIMAccessible(HWND hWnd)
get acc object of top window by its handle
void DeleteAccObj(css::accessibility::XAccessible *pXAcc)
Delete Acc object self.
LRESULT Get_ToATInterface(HWND hWnd, long lParam, WPARAM wParam)
Get valid com object interface when notifying some MSAA event.
void UpdateState(css::accessibility::XAccessible *pXAcc)
void UpdateChildState(css::accessibility::XAccessible *pXAcc)
void SaveTopWindowHandle(HWND hWnd, css::accessibility::XAccessible *pXAcc)
save the pair <topwindowhandle, XAccessible>
IMAccessible * GetIAccessibleFromResID(long resID)
Query and get IAccessible interface by child id from list.
void UpdateAccName(css::accessibility::XAccessible *pXAcc)
Set corresponding com object's accessible name via XAccessible interface and new name.
static bool IsContainer(css::accessibility::XAccessible *pAccessible)
Judge if a XAccessible object is a container object.
AccObject * GetAccObjByXAcc(css::accessibility::XAccessible *pXAcc)
Search AccObject by XAccessible pointer from our container.
bool InsertChildrenAccObj(css::accessibility::XAccessible *pXAcc, HWND pWnd=nullptr)
Insert all children of the current acc object.
bool NotifyAccEvent(css::accessibility::XAccessible *pXAcc, UnoMSAAEvent eEvent)
Simulate MSAA event via XAccessible interface and event type.
std::map< com::sun::star::accessibility::XAccessible *, AccObject > XIdToAccObjHash
void UpdateAction(css::accessibility::XAccessible *pXAcc)
std::map< HWND, com::sun::star::accessibility::XAccessible * > XHWNDToXAccHash
UnoMSAAEvent