c53c2e0a899994e54814ecdd930713a45d57241b
[profile/tv/apps/native/screen-reader.git] / res / scripts / mobile.lua
1 function entry_trait(obj)
2         local ret = ""
3         if obj:is(FOCUSED) then
4                 ret = T("IDS_TRAIT_TEXT_EDIT_FOCUSED")
5         else
6                 ret = T("IDS_TRAIT_TEXT_EDIT")
7         end
8         return obj:roleName() .. ", " .. ret
9 end
10
11 function menu_item_trait(obj)
12         n = table.getn(obj:parent():children())
13         return string.format(T("IDS_TRAIT_MENU_ITEM_TAB_INDEX"), obj:index() + 1, n)
14 end
15
16 function popup_menu_trait(obj)
17         local tr = { T("IDS_TRAIT_CTX_POPUP") , T("IDS_TRAIT_SHOWING") , tostring(table.getn(obj:children())),
18                                  T("IDS_TRAIT_ITEMS") , T("IDS_TRAIT_POPUP_CLOSE")}
19         return table.concat(tr, " ")
20 end
21
22 function dialog_trait(obj)
23         local n = table.getn(obj:children())
24         local ret = T("IDS_TRAIT_POPUP")
25         if n > 0 then
26                 ret = ret .. T("IDS_TRAIT_SHOWING") .. " " .. tostring(n) .. " " .. T("IDS_TRAIT_ITEMS")
27         end
28         return ret .. T("IDS_TRAIT_POPUP_CLOSE")
29 end
30
31 function list_item_trait(obj)
32         local ret = ""
33         local p = obj:parent()
34         if p and p:is(MULTISELECTABLE) then
35                 if obj:is(SELECTED) then
36                         ret = ret .. T("IDS_TRAIT_ITEM_SELECTED")
37                 end
38                 if p:selection() then
39                         ret = ret .. string.format(T("IDS_TRAIT_ITEM_SELECTED_COUNT"), p:selection():count())
40                 end
41         else
42                 if obj:is(EXPANDABLE) then
43                         if obj:is(EXPANDED) then
44                                 ret = ret .. T("IDS_TRAIT_GROUP_INDEX_EXPANDED")
45                         else
46                                 ret = ret .. T("IDS_TRAIT_GROUP_INDEX_COLLAPSED")
47                         end
48                 end
49         end
50         return ret
51 end
52
53 function check_radio_trait(obj)
54         if obj:is(CHECKED) then
55                 return T("IDS_TRAIT_CHECK_BOX_SELECTED")
56         else
57                 return T("IDS_TRAIT_CHECK_BOX_NOT_SELECTED")
58         end
59 end
60
61 function push_button_trait(obj)
62         return T("IDS_TRAIT_PUSH_BUTTON")
63 end
64
65 function progress_bar_trait(obj)
66         if obj:value() then
67                 cv = obj:value():current()
68                 if cv >= 0 then
69                         return string.format(T("IDS_TRAIT_PD_PROGRESSBAR_PERCENT"), cv * 100)
70                 else
71                         return T("IDS_TRAIT_PD_PROGRESSBAR")
72                 end
73         end
74         return ""
75 end
76
77 function toggle_button_trait(obj)
78         if obj:is(CHECKED) then
79                 local state = T("IDS_TRAIT_TOGGLE_BUTTON_ON")
80         else
81                 local state = T("IDS_TRAIT_TOGGLE_BUTTON_OFF")
82         end
83         return T("IDS_TRAIT_TOGGLE_BUTTON") .. ", " .. state
84 end
85
86 function heading_trait(obj)
87         return ""
88 end
89
90 function default_trait(obj)
91         return obj:roleName()
92 end
93
94 local trait_map = {
95         [ENTRY] = entry_trait,
96         [MENU_ITEM] = menu_item_trait,
97         [POPUP_MENU] = popup_menu_trait,
98         [DIALOG] = dialog_trait,
99         [LIST_ITEM] = list_item_trait,
100         [CHECK_BOX] = check_radio_trait,
101         [RADIO_BUTTON] = check_radio_trait,
102         [PUSH_BUTTON] = push_button_trait,
103         [PROGRESS_BAR] = progress_bar_trait,
104         [TOGGLE_BUTTON] = toggle_button_trait,
105         [HEADING] = heading_trait,
106 }
107
108 function trait(obj)
109         local func = trait_map[obj:role()]
110         if func ~= nil then
111                 return func(obj)
112         else
113                 return default_trait(obj)
114         end
115 end
116
117 function describeObject(obj)
118         local related_trait = {}
119         for k, target in ipairs(obj:inRelation(RELATION_DESCRIBED_BY)) do
120                 table.insert(related_trait, trait(target))
121         end
122         local ret = {obj:name(), trait(obj), obj:description(), table.concat(related_trait, ", ")}
123         for i=#ret,1,-1 do
124                 if ret[i] == nil or ret[i] == "" then
125                         table.remove(ret, i)
126                 end
127         end
128         return table.concat(ret, ", ")
129 end