Elementary: Add a test for Access.

Change internal only GenlistItem.itc to readonly item_class
This commit is contained in:
Kai Huuhko 2013-10-04 15:11:57 +03:00
parent 914c6ffd6b
commit fa9e96dff9
4 changed files with 352 additions and 13 deletions

View File

@ -561,7 +561,7 @@ cdef char *_py_elm_genlist_item_text_get(void *data, Evas_Object *obj, const_cha
GenlistItem item = <GenlistItem>data
unicode u = _ctouni(part)
func = item.itc._text_get_func
func = item.item_class._text_get_func
if func is None:
return NULL
@ -584,7 +584,7 @@ cdef Evas_Object *_py_elm_genlist_item_content_get(void *data, Evas_Object *obj,
unicode u = _ctouni(part)
evasObject icon
func = item.itc._content_get_func
func = item.item_class._content_get_func
if func is None:
return NULL
@ -610,7 +610,7 @@ cdef Eina_Bool _py_elm_genlist_item_state_get(void *data, Evas_Object *obj, cons
GenlistItem item = <GenlistItem>data
unicode u = _ctouni(part)
func = item.itc._state_get_func
func = item.item_class._state_get_func
if func is None:
return 0
@ -629,7 +629,7 @@ cdef void _py_elm_genlist_object_item_del(void *data, Evas_Object *obj) with gil
if item is None:
return
func = item.itc._del_func
func = item.item_class._del_func
if func is not None:
try:

View File

@ -3,7 +3,7 @@ cdef class GenlistItem(ObjectItem):
"""An item for the :py:class:`Genlist` widget."""
cdef:
GenlistItemClass itc
readonly GenlistItemClass item_class
Elm_Object_Item *parent_item
int flags
object comparison_func, item_data, func_data
@ -46,7 +46,7 @@ cdef class GenlistItem(ObjectItem):
"""
self.itc = item_class
self.item_class = item_class
self.parent_item = _object_item_from_python(parent_item) if parent_item is not None else NULL
@ -76,7 +76,7 @@ cdef class GenlistItem(ObjectItem):
def __str__(self):
return "%s(item_class=%s, func=%s, item_data=%s)" % \
(type(self).__name__,
type(self.itc).__name__,
type(self.item_class).__name__,
self.cb_func,
self.item_data)
@ -87,7 +87,7 @@ cdef class GenlistItem(ObjectItem):
<unsigned long><void*>self,
PY_REFCOUNT(self),
<unsigned long>self.item,
type(self.itc).__name__,
type(self.item_class).__name__,
self.cb_func,
self.item_data)
@ -109,7 +109,7 @@ cdef class GenlistItem(ObjectItem):
cb = _py_elm_genlist_item_func
item = elm_genlist_item_append(genlist.obj,
self.itc.cls, <void*>self,
self.item_class.cls, <void*>self,
self.parent_item,
<Elm_Genlist_Item_Type>self.flags,
cb, <void*>self)
@ -139,7 +139,7 @@ cdef class GenlistItem(ObjectItem):
cb = _py_elm_genlist_item_func
item = elm_genlist_item_prepend(genlist.obj,
self.itc.cls, <void*>self,
self.item_class.cls, <void*>self,
self.parent_item,
<Elm_Genlist_Item_Type>self.flags,
cb, <void*>self)
@ -173,7 +173,7 @@ cdef class GenlistItem(ObjectItem):
before = _object_item_from_python(before_item)
item = elm_genlist_item_insert_before(genlist.obj,
self.itc.cls, <void*>self,
self.item_class.cls, <void*>self,
self.parent_item, before,
<Elm_Genlist_Item_Type>self.flags,
cb, <void*>self)
@ -207,7 +207,7 @@ cdef class GenlistItem(ObjectItem):
after = _object_item_from_python(after_item)
item = elm_genlist_item_insert_after(genlist.obj,
self.itc.cls, <void*>self,
self.item_class.cls, <void*>self,
self.parent_item, after,
<Elm_Genlist_Item_Type>self.flags,
cb, <void*>self)
@ -256,7 +256,7 @@ cdef class GenlistItem(ObjectItem):
self.comparison_func = comparison_func
item = elm_genlist_item_sorted_insert(genlist.obj,
self.itc.cls, <void*>self,
self.item_class.cls, <void*>self,
self.parent_item,
<Elm_Genlist_Item_Type>self.flags,
_py_elm_genlist_compare_func,

View File

@ -113,6 +113,9 @@ items = [
("Gengrid", "test_gengrid", "gengrid_clicked"),
]),
("Miscellaneous", [
("Accessibility", "test_access", "access_clicked"),
# ("Accessibility 2", "test_access", "access2_clicked"),
# ("Accessibility 3", "test_access", "access3_clicked"),
("Configuration", "test_config", "config_clicked"),
("Floating Objects", "test_floating", "floating_clicked"),
]),

View File

@ -0,0 +1,336 @@
#!/usr/bin/env python
# encoding: utf-8
from efl.evas import EVAS_HINT_FILL, EVAS_HINT_EXPAND, \
EVAS_ASPECT_CONTROL_VERTICAL
from efl import elementary
from efl.elementary.window import StandardWindow
from efl.elementary.box import Box
from efl.elementary.button import Button
from efl.elementary.genlist import Genlist, GenlistItemClass, \
ELM_GENLIST_ITEM_NONE
from efl.elementary.gengrid import Gengrid, GengridItemClass
from efl.elementary.configuration import Configuration
from efl.elementary.access import Accessible
from efl.elementary.frame import Frame
from efl.elementary.label import Label
from efl.elementary.list import List
from efl.elementary.icon import Icon
config = Configuration()
def cleanup_cb(obj):
config.access = False
class GLItC1(GenlistItemClass):
def text_get(self, gl, part, data):
return "Item # {0}".format(data)
def content_get(self, gl, part, data):
if not part == "elm.swallow.end":
bt = Button(gl)
bt.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
bt.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
bt.text = "OK"
else:
bt = Icon(gl)
bt.file = "images/logo_small.png"
bt.size_hint_aspect = EVAS_ASPECT_CONTROL_VERTICAL, 1, 1
return bt
class GLItC2(GenlistItemClass):
def content_get(self, gl, part, data):
if part != "elm.swallow.content": return
grid = Gengrid(gl)
grid.item_size = config.scale * 100, config.scale * 100
grid.horizontal = False
grid.reorder_mode = True
grid.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
grid.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
gic = GGItC(item_style="default")
for i in range(4):
grid.item_append(gic, i)
#gic.free()
scale = config.scale
grid.size_hint_min = 300 * config.scale, 150 * config.scale
return grid
class GGItC(GengridItemClass):
def content_get(self, gg, part, data):
if not part == "elm.swallow.icon":
ic = Icon(gg)
ic.scale = 0.5
ic.file = "images/icon_%02i.png" % (data % 4)
ic.resizable = 0, 0
ic.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
ic.size_hint_align = 0.5, 0.5
ic.show()
return ic
def _realized(obj, ei):
if not ei: return
item = ei
itc = item.item_class
if not itc.item_style == "full":
# unregister item itself
item.access_unregister()
# convey highlight to its content
content = item.part_content_get("elm.swallow.content")
if not content: return
items.append(content)
else:
bt = item.part_content_get("elm.swallow.end")
if not bt: return
items.append(bt)
item.access_order = items
def access_clicked(obj, item=None):
win = StandardWindow("access", "Access")
win.autodel = True
win.on_free_add(cleanup_cb)
config.access = True
bx = Box(win)
bx.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
bx.homogeneous = True
bx.horizontal = True
win.resize_object_add(bx)
bx.show()
gl = Genlist(win)
gl.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
gl.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
bx.pack_end(gl)
gl.show()
gl.callback_realized_add(_realized)
itc1 = GLItC1(item_style="default")
itc2 = GLItC2(item_style="full")
for i in range(1,9):
if i % 4:
gl.item_append(itc1, i, None, ELM_GENLIST_ITEM_NONE)
else:
gl.item_append(itc2, i, None, ELM_GENLIST_ITEM_NONE)
itc1.free()
itc2.free()
win.resize(500, 400)
win.show()
# def access2_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED):
# int i, j, k
# char buf[PATH_MAX]
# Evas_Object *win, *bx, *sc, *ly, *ly2, *ic
# Evas_Object *ao, *to
# win = StandardWindow("access", "Access")
# elm_win_autodel_set(win, True)
# evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, NULL)
# elm_config_access_set(True)
# sc = elm_scroller_add(win)
# elm_scroller_bounce_set(sc, True, False)
# elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF)
# evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# elm_win_resize_object_add(win, sc)
# evas_object_show(sc)
# bx = Box(win)
# evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL)
# elm_box_homogeneous_set(bx, True)
# elm_box_horizontal_set(bx, True)
# elm_object_content_set(sc, bx)
# evas_object_show(bx)
# for (k = 0 ; k < 3; k++)
# ly = elm_layout_add(win)
# snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get())
# elm_layout_file_set(ly, buf, "access_page")
# evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL)
# evas_object_show(ly)
# for (j = 0; j < 3; j++)
# for (i = 0; i < 3; i++)
# ly2 = elm_layout_add(win)
# snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get())
# elm_layout_file_set(ly2, buf, "access_icon")
# evas_object_size_hint_weight_set(ly2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(ly2, EVAS_HINT_FILL, EVAS_HINT_FILL)
# ic = Icon(win)
# elm_object_scale_set(ic, 0.5)
# snprintf(buf, sizeof(buf), "%s/images/icon_%02i.png", elm_app_data_dir_get(), (i + (k * 3)))
# elm_image_file_set(ic, buf, NULL)
# elm_image_resizable_set(ic, 0, 0)
# evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(ic, 0.5, 0.5)
# elm_object_part_content_set(ly2, "slot", ic)
# evas_object_show(ic)
# snprintf(buf, sizeof(buf), "slot.%i.%i", i, j)
# elm_object_part_content_set(ly, buf, ly2)
# evas_object_show(ly2)
# /* access */
# to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(ly2), "access")
# ao = elm_access_object_register(to, ly2)
# elm_object_focus_custom_chain_append(ly2, ao, NULL)
# elm_box_pack_end(bx, ly)
# evas_object_resize(win, 300, 300)
# evas_object_show(win)
# static Eina_Bool
# _key_down_cb(void *data, int type EINA_UNUSED, void *ei)
# Elm_Access_Action_Info *a
# Ecore_Event_Key *ev = ei
# a = calloc(1, sizeof(Elm_Access_Action_Info))
# if (!a) return ECORE_CALLBACK_PASS_ON
# if (ev && ev->key)
# if (!strcmp(ev->key, "F1"))
# a->highlight_cycle = True
# elm_access_action(data, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT, a)
# free(a)
# return ECORE_CALLBACK_PASS_ON
# static char *
# _access_info_cb(void *data, Evas_Object *obj EINA_UNUSED)
# if (data) return strdup(data)
# return NULL
# def access3_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED):
# char buf[PATH_MAX]
# Evas_Object *win, *box, *lbl, *ly, *btn
# Evas_Object *red_ao, *green_ao, *blue_ao, *black_ao, *to
# win = StandardWindow("access", "Access")
# elm_win_autodel_set(win, True)
# evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, NULL)
# elm_config_access_set(True)
# box = Box(win)
# evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# elm_win_resize_object_add(win, box)
# evas_object_show(box)
# lbl = elm_label_add(box)
# elm_object_text_set(lbl,
# "Move a mouse pointer to any object and press F1 to "
# "move access highlight to the next object.")
# evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0)
# evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL)
# elm_box_pack_end(box, lbl)
# evas_object_show(lbl)
# ly = elm_layout_add(box)
# snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get())
# elm_layout_file_set(ly, buf, "access_color_page")
# evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL)
# elm_box_pack_end(box, ly)
# evas_object_show(ly)
# btn = elm_button_add(win)
# elm_object_text_set(btn, "action")
# evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
# evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL)
# evas_object_show(btn)
# elm_object_part_content_set(ly, "center", btn)
# to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(ly), "red")
# red_ao = elm_access_object_register(to, ly)
# elm_access_info_cb_set(red_ao, ELM_ACCESS_INFO, _access_info_cb, "red")
# elm_access_highlight_next_set(btn, ELM_HIGHLIGHT_DIR_NEXT, red_ao)
# to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(ly), "green")
# green_ao = elm_access_object_register(to, ly)
# elm_access_info_cb_set(green_ao, ELM_ACCESS_INFO, _access_info_cb, "green")
# elm_access_highlight_next_set(red_ao, ELM_HIGHLIGHT_DIR_NEXT, green_ao)
# to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(ly), "blue")
# blue_ao = elm_access_object_register(to, ly)
# elm_access_info_cb_set(blue_ao, ELM_ACCESS_INFO, _access_info_cb, "blue")
# elm_access_highlight_next_set(green_ao, ELM_HIGHLIGHT_DIR_NEXT, blue_ao)
# to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(ly), "black")
# black_ao = elm_access_object_register(to, ly)
# elm_access_info_cb_set(black_ao, ELM_ACCESS_INFO, _access_info_cb, "black")
# elm_access_highlight_next_set(blue_ao, ELM_HIGHLIGHT_DIR_NEXT, black_ao)
# ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, win)
# evas_object_resize(win, 300, 300)
# evas_object_show(win)
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application")
win.callback_delete_request_add(lambda o: elementary.exit())
box0 = Box(win)
box0.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
win.resize_object_add(box0)
box0.show()
fr = Frame(win)
fr.text_set("Information")
box0.pack_end(fr)
fr.show()
lb = Label(win)
lb.text_set("Please select a test from the list below<br>"
"by clicking the test button to show the<br>"
"test window.")
fr.content_set(lb)
lb.show()
items = [
("Access 1", access_clicked),
#("Access 2", access2_clicked),
#("Access 3", accesst3_clicked),
]
li = List(win)
li.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
li.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL)
box0.pack_end(li)
li.show()
for item in items:
li.item_append(item[0], callback=item[1])
li.go()
win.resize(320,520)
win.show()
elementary.run()
elementary.shutdown()