1 function entry_trait(obj)
3 if obj:is(FOCUSED) then
4 ret = T("IDS_TRAIT_TEXT_EDIT_FOCUSED")
6 ret = T("IDS_TRAIT_TEXT_EDIT")
8 return obj:roleName() .. ", " .. ret
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)
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, " ")
22 function dialog_trait(obj)
23 local n = table.getn(obj:children())
24 local ret = T("IDS_TRAIT_POPUP")
26 ret = ret .. T("IDS_TRAIT_SHOWING") .. " " .. tostring(n) .. " " .. T("IDS_TRAIT_ITEMS")
28 return ret .. T("IDS_TRAIT_POPUP_CLOSE")
31 function list_item_trait(obj)
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")
39 ret = ret .. string.format(T("IDS_TRAIT_ITEM_SELECTED_COUNT"), p:selection():count())
42 if obj:is(EXPANDABLE) then
43 if obj:is(EXPANDED) then
44 ret = ret .. T("IDS_TRAIT_GROUP_INDEX_EXPANDED")
46 ret = ret .. T("IDS_TRAIT_GROUP_INDEX_COLLAPSED")
53 function check_radio_trait(obj)
54 if obj:is(CHECKED) then
55 return T("IDS_TRAIT_CHECK_BOX_SELECTED")
57 return T("IDS_TRAIT_CHECK_BOX_NOT_SELECTED")
61 function push_button_trait(obj)
62 return T("IDS_TRAIT_PUSH_BUTTON")
65 function progress_bar_trait(obj)
67 cv = obj:value():current()
69 return string.format(T("IDS_TRAIT_PD_PROGRESSBAR_PERCENT"), cv * 100)
71 return T("IDS_TRAIT_PD_PROGRESSBAR")
77 function toggle_button_trait(obj)
78 if obj:is(CHECKED) then
79 local state = T("IDS_TRAIT_TOGGLE_BUTTON_ON")
81 local state = T("IDS_TRAIT_TOGGLE_BUTTON_OFF")
83 return T("IDS_TRAIT_TOGGLE_BUTTON") .. ", " .. state
86 function heading_trait(obj)
90 function default_trait(obj)
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,
109 local func = trait_map[obj:role()]
113 return default_trait(obj)
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))
122 local ret = {obj:name(), trait(obj), obj:description(), table.concat(related_trait, ", ")}
124 if ret[i] == nil or ret[i] == "" then
128 return table.concat(ret, ", ")