1+ // This file implements accessibility interface for RegistersView
2+ #ifndef QT_NO_ACCESSIBILITY
3+ #include " AccessibleRegistersView.h"
4+
5+ AccessibleRegistersViewItem::AccessibleRegistersViewItem () : mParent(nullptr ), id(RegistersView::REGISTER_NAME::CAX)
6+ {
7+ }
8+
9+ void AccessibleRegistersViewItem::setRegistersView (AccessibleRegistersView* parent, int id)
10+ {
11+ this ->mParent = parent;
12+ this ->id = (RegistersView::REGISTER_NAME)id;
13+ }
14+
15+ QString AccessibleRegistersViewItem::text (QAccessible::Text t) const
16+ {
17+ RegistersView* w = mParent ->m_registersView ;
18+ switch (t)
19+ {
20+ case QAccessible::Name:
21+ case QAccessible::Value:
22+ if (w->mLABELDISPLAY .contains (id))
23+ return QString (w->mRegisterMapping [id]) + " = " + w->GetRegStringValueFromValue (w->mSelected , w->registerValue (&w->mRegDumpStruct , w->mSelected )) + ' ' + w->getRegisterLabel (id);
24+ return QString (w->mRegisterMapping [id]) + " = " + w->GetRegStringValueFromValue (w->mSelected , w->registerValue (&w->mRegDumpStruct , w->mSelected ));
25+ case QAccessible::Help:
26+ return w->helpRegister (id);
27+ default :
28+ return QString ();
29+ }
30+ }
31+
32+ QColor AccessibleRegistersViewItem::foregroundColor () const
33+ {
34+ if (mParent ->m_registersView ->mRegisterUpdates .contains (id))
35+ {
36+ return ConfigColor (" RegistersModifiedColor" );
37+ }
38+ else
39+ {
40+ return ConfigColor (" RegistersColor" );
41+ }
42+ }
43+
44+ int AccessibleRegistersViewItem::childCount () const
45+ {
46+ return 0 ;
47+ }
48+
49+ QWindow* AccessibleRegistersViewItem::window () const
50+ {
51+ return mParent ->window ();
52+ }
53+
54+ QAccessibleInterface* AccessibleRegistersViewItem::parent () const
55+ {
56+ return dynamic_cast <QAccessibleInterface*>(mParent );
57+ }
58+
59+ QAccessibleInterface* AccessibleRegistersViewItem::child (int index) const
60+ {
61+ return nullptr ;
62+ }
63+
64+ int AccessibleRegistersViewItem::indexOfChild (const QAccessibleInterface* child) const
65+ {
66+ return -1 ;
67+ }
68+
69+ QAccessible::Role AccessibleRegistersViewItem::role () const
70+ {
71+ return QAccessible::ListItem;
72+ }
73+
74+ QAccessible::State AccessibleRegistersViewItem::state () const
75+ {
76+ QAccessible::State state;
77+ state.focusable = mParent ->m_registersView ->isActive ;
78+ state.active = mParent ->m_registersView ->isActive ;
79+ state.selectable = mParent ->m_registersView ->isActive ;
80+ if (mParent ->m_registersView ->mSelected == id)
81+ {
82+ state.selected = true ;
83+ if (mParent ->m_registersView ->hasFocus ())
84+ state.focused = true ;
85+ }
86+ return state;
87+ }
88+
89+ QAccessibleInterface* AccessibleRegistersViewItem::childAt (int x, int y) const
90+ {
91+ return nullptr ;
92+ }
93+
94+ QObject* AccessibleRegistersViewItem::object () const
95+ {
96+ return nullptr ;
97+ }
98+
99+ void AccessibleRegistersViewItem::setText (QAccessible::Text t, const QString & text)
100+ {
101+ }
102+
103+ QRect AccessibleRegistersViewItem::rect () const
104+ {
105+ return QRect ();
106+ }
107+
108+ bool AccessibleRegistersViewItem::isValid () const
109+ {
110+ return mParent ->m_registersView ->isActive ;
111+ }
112+
113+ AccessibleRegistersView::AccessibleRegistersView (QWidget* w) : QAccessibleWidget(w, QAccessible::List, dynamic_cast <RegistersView*>(w)->accessibleName())
114+ {
115+ m_registersView = dynamic_cast <RegistersView*>(w);
116+ interfaces.fill (0 );
117+ }
118+
119+ AccessibleRegistersView::~AccessibleRegistersView ()
120+ {
121+ for (auto & i : interfaces)
122+ {
123+ if (i != 0 )
124+ {
125+ QAccessible::deleteAccessibleInterface (i);
126+ }
127+ }
128+ }
129+
130+ int AccessibleRegistersView::childCount () const
131+ {
132+ return RegistersView::REGISTER_NAME::UNKNOWN;
133+ }
134+
135+ QAccessibleInterface* AccessibleRegistersView::child (int index) const
136+ {
137+ if (index >= 0 && index < childCount ())
138+ {
139+ if (interfaces[index] != 0 )
140+ {
141+ return QAccessible::accessibleInterface (interfaces[index]);
142+ }
143+ else
144+ {
145+ auto child = new AccessibleRegistersViewItem ();
146+ child->setRegistersView (const_cast <AccessibleRegistersView*>(this ), index);
147+ interfaces[index] = QAccessible::registerAccessibleInterface (child);
148+ return child;
149+ }
150+ }
151+ else
152+ return nullptr ;
153+ }
154+
155+ QAccessibleInterface* AccessibleRegistersView::childAt (int x, int y) const
156+ {
157+ RegistersView::REGISTER_NAME clickedReg;
158+ QPoint local = m_registersView->mapFromGlobal (QPoint (x, y));
159+ if (m_registersView->identifyRegister (local.y (), local.x (), &clickedReg))
160+ if (clickedReg < RegistersView::UNKNOWN)
161+ return child (static_cast <int >(clickedReg));
162+ return (QAccessibleInterface*)this ;
163+ }
164+
165+ QAccessibleInterface* AccessibleRegistersView::focusChild () const
166+ {
167+ return child (m_registersView->mSelected );
168+ }
169+
170+ bool AccessibleRegistersView::isValid () const
171+ {
172+ return m_registersView->isActive ;
173+ }
174+
175+ QAccessible::Role AccessibleRegistersView::role () const
176+ {
177+ return QAccessible::List;
178+ }
179+
180+ QAccessible::State AccessibleRegistersView::state () const
181+ {
182+ QAccessible::State state;
183+ state.focusable = true ;
184+ if (m_registersView->hasFocus ())
185+ state.focused = true ;
186+ state.active = m_registersView->isActive ;
187+ state.multiLine = true ;
188+ state.multiSelectable = false ;
189+ state.disabled = !m_registersView->isActive ;
190+ state.hasPopup = true ;
191+ return state;
192+ }
193+ #endif
0 commit comments