f28dcbe01a7ddaa497b7eec0661ccec82598d452
[platform/core/uifw/dali-adaptor.git] / dali / dali-bridge / src / BridgeObject.cpp
1 #include "BridgeObject.hpp"
2 #include <iostream>
3 #include <string>
4
5 using namespace Dali::Accessibility;
6
7 BridgeObject::BridgeObject()
8 {
9 }
10
11 void BridgeObject::RegisterInterfaces()
12 {
13   // DBus::DBusInterfaceDescription desc{ ATSPI_DBUS_INTERFACE_EVENT_OBJECT };
14   // stateChanged = addSignal<std::string, int, int, DBus::EldbusVariant<int>, Accessible*>(desc, "StateChanged");
15   // dbusServer.addInterface("/", desc, true);
16 }
17
18 void BridgeObject::Emit( Accessible* obj, WindowEvent we, unsigned int detail1 )
19 {
20   const char* name = nullptr;
21   switch( we )
22   {
23     case WindowEvent::PropertyChange:
24     {
25       name = "PropertyChange";
26       break;
27     }
28     case WindowEvent::Minimize:
29     {
30       name = "Minimize";
31       break;
32     }
33     case WindowEvent::Maximize:
34     {
35       name = "Maximize";
36       break;
37     }
38     case WindowEvent::Restore:
39     {
40       name = "Restore";
41       break;
42     }
43     case WindowEvent::Close:
44     {
45       name = "Close";
46       break;
47     }
48     case WindowEvent::Create:
49     {
50       name = "Create";
51       break;
52     }
53     case WindowEvent::Reparent:
54     {
55       name = "Reparent";
56       break;
57     }
58     case WindowEvent::DesktopCreate:
59     {
60       name = "DesktopCreate";
61       break;
62     }
63     case WindowEvent::DesktopDestroy:
64     {
65       name = "DesktopDestroy";
66       break;
67     }
68     case WindowEvent::Destroy:
69     {
70       name = "Destroy";
71       break;
72     }
73     case WindowEvent::Activate:
74     {
75       name = "Activate";
76       break;
77     }
78     case WindowEvent::Deactivate:
79     {
80       name = "Deactivate";
81       break;
82     }
83     case WindowEvent::Raise:
84     {
85       name = "Raise";
86       break;
87     }
88     case WindowEvent::Lower:
89     {
90       name = "Lower";
91       break;
92     }
93     case WindowEvent::Move:
94     {
95       name = "Move";
96       break;
97     }
98     case WindowEvent::Resize:
99     {
100       name = "Resize";
101       break;
102     }
103     case WindowEvent::Shade:
104     {
105       name = "Shade";
106       break;
107     }
108     case WindowEvent::UuShade:
109     {
110       name = "uUshade";
111       break;
112     }
113     case WindowEvent::Restyle:
114     {
115       name = "Restyle";
116       break;
117     }
118   }
119   if( name )
120   {
121     auto addr = obj->GetAddress();
122     const auto prefixPath = "/org/a11y/atspi/accessible/";
123     const auto nullPath = "/org/a11y/atspi/null";
124     std::string p;
125     if( addr )
126       p = prefixPath + addr.GetPath();
127     else
128       p = nullPath;
129     dbusServer.emit2< std::string, int, int, DBus::EldbusVariant< int >, Address >(
130         p,
131         ATSPI_DBUS_INTERFACE_EVENT_WINDOW,
132         name,
133         "",
134         detail1,
135         0,
136         {0},
137         {GetBusName(), "root"} );
138   }
139 }
140
141 void BridgeObject::EmitStateChanged( Accessible* obj, State state, int newValue1, int newValue2 )
142 {
143   const char* stateName = nullptr;
144   switch( state )
145   {
146     case State::Invalid:
147     {
148       stateName = "invalid";
149       break;
150     }
151     case State::Active:
152     {
153       stateName = "active";
154       break;
155     }
156     case State::Armed:
157     {
158       stateName = "armed";
159       break;
160     }
161     case State::Busy:
162     {
163       stateName = "busy";
164       break;
165     }
166     case State::Checked:
167     {
168       stateName = "checked";
169       break;
170     }
171     case State::Collapsed:
172     {
173       stateName = "collapsed";
174       break;
175     }
176     case State::Defunct:
177     {
178       stateName = "defunct";
179       break;
180     }
181     case State::Editable:
182     {
183       stateName = "editable";
184       break;
185     }
186     case State::Enabled:
187     {
188       stateName = "enabled";
189       break;
190     }
191     case State::Expandable:
192     {
193       stateName = "expandable";
194       break;
195     }
196     case State::Expanded:
197     {
198       stateName = "expanded";
199       break;
200     }
201     case State::Focusable:
202     {
203       stateName = "focusable";
204       break;
205     }
206     case State::Focused:
207     {
208       stateName = "focused";
209       break;
210     }
211     case State::HasTooltip:
212     {
213       stateName = "has-tooltip";
214       break;
215     }
216     case State::Horizontal:
217     {
218       stateName = "horizontal";
219       break;
220     }
221     case State::Iconified:
222     {
223       stateName = "iconified";
224       break;
225     }
226     case State::Modal:
227     {
228       stateName = "modal";
229       break;
230     }
231     case State::MultiLine:
232     {
233       stateName = "multi-line";
234       break;
235     }
236     case State::MultiSelectable:
237     {
238       stateName = "multiselectable";
239       break;
240     }
241     case State::Opaque:
242     {
243       stateName = "opaque";
244       break;
245     }
246     case State::Pressed:
247     {
248       stateName = "pressed";
249       break;
250     }
251     case State::Resizeable:
252     {
253       stateName = "resizable";
254       break;
255     }
256     case State::Selectable:
257     {
258       stateName = "selectable";
259       break;
260     }
261     case State::Selected:
262     {
263       stateName = "selected";
264       break;
265     }
266     case State::Sensitive:
267     {
268       stateName = "sensitive";
269       break;
270     }
271     case State::Showing:
272     {
273       stateName = "showing";
274       break;
275     }
276     case State::SingleLine:
277     {
278       stateName = "single-line";
279       break;
280     }
281     case State::Stale:
282     {
283       stateName = "stale";
284       break;
285     }
286     case State::Transient:
287     {
288       stateName = "transient";
289       break;
290     }
291     case State::Vertical:
292     {
293       stateName = "vertical";
294       break;
295     }
296     case State::Visible:
297     {
298       stateName = "visible";
299       break;
300     }
301     case State::ManagesDescendants:
302     {
303       stateName = "manages-descendants";
304       break;
305     }
306     case State::Indeterminate:
307     {
308       stateName = "indeterminate";
309       break;
310     }
311     case State::Required:
312     {
313       stateName = "required";
314       break;
315     }
316     case State::Truncated:
317     {
318       stateName = "truncated";
319       break;
320     }
321     case State::Animated:
322     {
323       stateName = "animated";
324       break;
325     }
326     case State::InvalidEntry:
327     {
328       stateName = "invalid-entry";
329       break;
330     }
331     case State::SupportsAutocompletion:
332     {
333       stateName = "supports-autocompletion";
334       break;
335     }
336     case State::SelectableText:
337     {
338       stateName = "selectable-text";
339       break;
340     }
341     case State::IsDefault:
342     {
343       stateName = "is-default";
344       break;
345     }
346     case State::Visited:
347     {
348       stateName = "visited";
349       break;
350     }
351     case State::Checkable:
352     {
353       stateName = "checkable";
354       break;
355     }
356     case State::HasPopup:
357     {
358       stateName = "has-popup";
359       break;
360     }
361     case State::ReadOnly:
362     {
363       stateName = "read-only";
364       break;
365     }
366     case State::Highlighted:
367     {
368       stateName = "highlighted";
369       break;
370     }
371     case State::Highlightable:
372     {
373       stateName = "highlightable";
374       break;
375     }
376     case State::_Count:
377     {
378       break;
379     }
380   }
381   if( stateName )
382   {
383     auto addr = obj->GetAddress();
384     const auto prefixPath = "/org/a11y/atspi/accessible/";
385     const auto nullPath = "/org/a11y/atspi/null";
386     std::string p;
387     if( addr )
388       p = prefixPath + addr.GetPath();
389     else
390       p = nullPath;
391     dbusServer.emit2< std::string, int, int, DBus::EldbusVariant< int >, Address >(
392         p,
393         ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
394         "StateChanged",
395         stateName,
396         newValue1,
397         newValue2,
398         {0},
399         {GetBusName(), "root"} );
400   }
401 }