mobile-lua: add additional LABELLED_BY relation 01/50901/9
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Tue, 3 Nov 2015 10:41:50 +0000 (11:41 +0100)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Wed, 25 Nov 2015 10:58:43 +0000 (02:58 -0800)
Change-Id: I543b531ad4386ce7996e3b7ee061d70e5e564a9e

res/scripts/mobile.lua
src/lua_engine.c

index c53c2e0..39d5396 100644 (file)
@@ -114,16 +114,44 @@ function trait(obj)
        end
 end
 
+function stringArrayAppend(strings, string)
+       if string ~= "" then
+               table.insert(strings, string)
+       end
+end
+
+function generateStringArray(objects, createFunc)
+       local ret = {}
+       for k, target in ipairs(objects) do
+               stringArrayAppend(ret, createFunc(target))
+       end
+       return ret
+end
+
 function describeObject(obj)
-       local related_trait = {}
-       for k, target in ipairs(obj:inRelation(RELATION_DESCRIBED_BY)) do
-               table.insert(related_trait, trait(target))
+       local labels = generateStringArray(obj:inRelation(RELATION_LABELLED_BY), function(x) return x:name() end)
+       local descriptions = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), function(x) return x:description() end)
+       local traits = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), trait)
+
+       -- use original object name if related objects do not provide other
+       if table.getn(labels) == 0 then
+               stringArrayAppend(labels, obj:name())
        end
-       local ret = {obj:name(), trait(obj), obj:description(), table.concat(related_trait, ", ")}
-       for i=#ret,1,-1 do
-               if ret[i] == nil or ret[i] == "" then
-                       table.remove(ret, i)
-               end
+
+       -- use original object description if related objects do not provide other
+       if table.getn(descriptions) == 0 then
+               stringArrayAppend(descriptions, obj:description())
        end
+
+       -- use original object trait if related objects do not provide other
+       if table.getn(traits) == 0 then
+               stringArrayAppend(traits, trait(obj))
+       end
+
+       local ret = {}
+       stringArrayAppend(ret, table.concat(labels, ", "))
+       stringArrayAppend(ret, table.concat(traits, ", "))
+       stringArrayAppend(ret, table.concat(descriptions, ", "))
+
        return table.concat(ret, ", ")
 end
index b2d8207..76cd94f 100644 (file)
@@ -166,7 +166,7 @@ static int _accessible_relations(lua_State *L) {
        AtspiAccessible *obj = _pop_class_obj(L, 1, 1, ACCESSIBLE_CLASS_NAME);
        AtspiRelationType type = lua_tonumber(L, -1);
        GError *err = NULL;
-       int i, j;
+       int i, j, idx;
 
        lua_newtable(L);
        if (!obj) return 1;
@@ -174,7 +174,7 @@ static int _accessible_relations(lua_State *L) {
        GERROR_CHECK(err);
        if (!rels) return 1;
 
-       for (i = 0; i < rels->len; i++)
+       for (i = 0, idx = 1; i < rels->len; i++)
        {
                AtspiRelation *rel = g_array_index(rels, AtspiRelation*, i);
                if (atspi_relation_get_relation_type(rel) == type)
@@ -183,7 +183,7 @@ static int _accessible_relations(lua_State *L) {
                        {
                                AtspiAccessible *target = atspi_relation_get_target(rel, j);
                                if (!target) continue;
-                               lua_pushinteger(L, j);
+                               lua_pushinteger(L, idx++);
                                _push_class_obj(L, target, ACCESSIBLE_CLASS_NAME);
                                lua_settable(L, -3);
                        }