Elementary: Add a test for Access.
Change internal only GenlistItem.itc to readonly item_class
This commit is contained in:
parent
914c6ffd6b
commit
fa9e96dff9
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"),
|
||||
]),
|
||||
|
|
|
@ -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()
|
Loading…
Reference in New Issue