Elementary: Implement Accessible objects, with cbs TODO later.

This commit is contained in:
Kai Huuhko 2013-04-19 12:05:36 +00:00
parent aa76bc30c1
commit 0d63acbee9
11 changed files with 300 additions and 40 deletions

View File

@ -118,6 +118,7 @@ Reference
.. toctree::
:maxdepth: 4
module-access
module-actionslider
module-background
module-box
@ -191,6 +192,7 @@ Inheritance diagram
-------------------
.. inheritance-diagram::
efl.elementary.access
efl.elementary.actionslider
efl.elementary.background
efl.elementary.box

View File

@ -0,0 +1,8 @@
:mod:`access` Module
--------------------
.. automodule:: efl.elementary.access
.. inheritance-diagram::
efl.elementary.access
:parts: 2

18
efl/elementary/access.pxd Normal file
View File

@ -0,0 +1,18 @@
from libc.string cimport const_char
from libc.stdlib cimport const_void
from efl.evas cimport Evas_Object, const_Evas_Object
from object_item cimport Elm_Object_Item
cdef extern from "Elementary.h":
ctypedef char *(*Elm_Access_Info_Cb)(void *data, Evas_Object *obj)
ctypedef void (*Elm_Access_Activate_Cb)(void *data, Evas_Object *part_obj, Elm_Object_Item *item)
Evas_Object * elm_access_object_register(Evas_Object *obj, Evas_Object *parent)
void elm_access_info_set(Evas_Object *obj, int type, const_char *text)
char * elm_access_info_get(const_Evas_Object *obj, int type)
# TODO: void elm_access_info_cb_set(Evas_Object *obj, int type, Elm_Access_Info_Cb func, const_void *data)
# TODO: void elm_access_activate_cb_set(Evas_Object *obj, Elm_Access_Activate_Cb func, void *data)
void elm_access_highlight_set(Evas_Object* obj)
Evas_Object * elm_object_item_access_register(Elm_Object_Item *item)

140
efl/elementary/access.pyx Normal file
View File

@ -0,0 +1,140 @@
# Copyright (C) 2007-2013 various contributors (see AUTHORS)
#
# This file is part of Python-EFL.
#
# Python-EFL is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# Python-EFL is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>.
from object cimport Object
from object_item cimport ObjectItem
include "widget_header.pxi"
ELM_ACCESS_TYPE = 0 # when reading out widget or item this is read first
ELM_ACCESS_INFO = 1 # next read is info - this is normally label
ELM_ACCESS_STATE = 2 # if there is a state (eg checkbox) then read state out
ELM_ACCESS_CONTEXT_INFO = 3 # to give contextual information
cdef char *access_info_cb(void *data, Evas_Object *obj):
pass
cdef void access_activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item):
pass
cdef class Accessible(Object):
"""An accessible object."""
def __init__(self, target, parent = None):
"""__init__(target, parent = None)
Register evas object as an accessible object.
:since: 1.8
:param target: The evas object to register as an accessible object.
:param parent: The elementary object which is used for creating
accessible object.
"""
cdef:
evasObject t, p
ObjectItem i
if isinstance(target, evasObject):
t = target
p = parent
self._set_obj(elm_access_object_register(t.obj, p.obj))
elif isinstance(target, ObjectItem):
i = target
self._set_obj(elm_object_item_access_register(i.item))
else:
raise TypeError("target is of unsupported type")
def info_set(self, int type, text):
"""Set text to give information for specific type.
:since: 1.8
:param type: The type of content that will be read
:param text: The text information that will be read
:type:
:see: elm_access_info_cb_set
"""
if isinstance(text, unicode): text = PyUnicode_AsUTF8String(text)
elm_access_info_set(self.obj, type,
<const_char *>text if text is not None else NULL)
def info_get(self, int type):
"""Get text to give information for specific type.
:since: 1.8
:param type: The type of content that will be read
:see: elm_access_info_cb_set
"""
return _touni(elm_access_info_get(self.obj, type))
# def info_cb_set(self, int type, func, *args, **kwargs):
# """Set content callback to give information for specific type.
# :since: 1.8
# :param type: The type of content that will be read
# :param func: The function to be called when the content is read
# :param data: The data pointer to be passed to @p func
# The type would be one of ELM_ACCESS_TYPE, ELM_ACCESS_INFO,
# ELM_ACCESS_STATE, ELM_ACCESS_CONTEXT_INFO.
# In the case of button widget, the content of ELM_ACCESS_TYPE would be
# "button". The label of button such as "ok", "cancel" is for ELM_ACCESS_INFO.
# If the button is disabled, content of ELM_ACCESS_STATE would be "disabled".
# And if there is contextual information, use ELM_ACCESS_CONTEXT_INFO.
# """
# if not callable(func):
# raise TypeError("func is not callable.")
# elm_access_info_cb_set(self.obj, type, access_info_cb, <const_void *>self)
# def activate_cb_set(self, func, *args, **kwargs):
# """Set activate callback to activate highlight object.
# :since: 1.8
# :param func: The function to be called when the activate gesture is detected
# :param data: The data pointer to be passed to @p func
# """
# if not callable(func):
# raise TypeError("func is not callable.")
# elm_access_activate_cb_set(self.obj, access_activate_cb, <void *>self)
def access_highlight_set(self):
"""Give the highlight to the object directly.
:since: 1.8
The object should be an elementary object or an access object.
"""
elm_access_highlight_set(self.obj)
_object_mapping_register("elm_access", Accessible)

View File

@ -30,7 +30,6 @@ cdef extern from "Edje.h":
ctypedef void (*Edje_Signal_Cb)(void *data, Evas_Object *obj, const_char *emission, const_char *source)
cdef extern from "Elementary.h":
ctypedef struct Elm_Theme
ctypedef struct Elm_Selection_Data:
@ -162,6 +161,11 @@ cdef extern from "Elementary.h":
# Eina_Bool elm_drag_start(Evas_Object *obj, Elm_Sel_Format format, const_char *data, Elm_Xdnd_Action action, Elm_Drag_Icon_Create_Cb createicon, void *createdata, Elm_Drag_Pos dragpos, void *dragdata, Elm_Drag_Accept acceptcb, void *acceptdata, Elm_Drag_State dragdone, void *donecbdata)
# Eina_Bool elm_drag_action_set(Evas_Object *obj, Elm_Xdnd_Action action)
# Access (elm_access.h)
Evas_Object * elm_access_object_get(const_Evas_Object *obj)
void elm_access_highlight_set(Evas_Object* obj)
void elm_access_object_unregister(Evas_Object *obj)
cdef class Canvas(evasCanvas):
pass

View File

@ -1555,9 +1555,7 @@ cdef class Object(evasObject):
"""
return <long>self.obj
# TODO:
# TODO: Copy and Paste
# def cnp_selection_set(self, Elm_Sel_Type selection, Elm_Sel_Format format, buf, buflen):
# """Set copy data for a widget.
@ -1709,3 +1707,32 @@ cdef class Object(evasObject):
# if not elm_drag_action_set(Evas_Object *obj, action):
# raise RuntimeError("Could not set cnp xdnd action.")
def unregister(self):
"""Unregister accessible object.
:since: 1.8
"""
elm_access_object_unregister(self.obj)
property access_object:
"""Get an accessible object of the evas object.
:since: 1.8
:type: Object
"""
def __get__(self):
return object_from_instance(elm_access_object_get(self.obj))
def access_highlight_set(self):
"""Give the highlight to the object directly.
:since: 1.8
The object should be an elementary object or an access object.
"""
elm_access_highlight_set(self.obj)

View File

@ -1,4 +1,5 @@
from efl.evas cimport Eina_Bool, const_Eina_List, Evas_Object, Evas_Smart_Cb
from efl.evas cimport Eina_Bool, const_Eina_List, Evas_Object, Evas_Smart_Cb, \
Eina_List, const_Eina_List
from libc.string cimport const_char
cdef extern from "Elementary.h":
@ -9,39 +10,48 @@ cdef extern from "Elementary.h":
ctypedef Evas_Object *(*Elm_Tooltip_Content_Cb) (void *data, Evas_Object *obj, Evas_Object *tooltip)
ctypedef Evas_Object *(*Elm_Tooltip_Item_Content_Cb) (void *data, Evas_Object *obj, Evas_Object *tooltip, void *item)
Evas_Object *elm_object_item_widget_get(Elm_Object_Item *it)
void elm_object_item_part_content_set(Elm_Object_Item *it, const_char *part, Evas_Object* content)
void elm_object_item_content_set(Elm_Object_Item *it, Evas_Object* content)
Evas_Object *elm_object_item_part_content_get(Elm_Object_Item *it, const_char *part)
Evas_Object *elm_object_item_content_get(Elm_Object_Item *it)
Evas_Object *elm_object_item_part_content_unset(Elm_Object_Item *it, const_char *part)
Evas_Object *elm_object_item_content_unset(Elm_Object_Item *it)
void elm_object_item_part_text_set(Elm_Object_Item *item, const_char *part, const_char *label)
void elm_object_item_text_set(Elm_Object_Item *item, const_char *label)
const_char * elm_object_item_part_text_get(Elm_Object_Item *item, const_char *part)
const_char * elm_object_item_text_get(Elm_Object_Item *item)
void elm_object_item_access_info_set(Elm_Object_Item *it, const_char *txt)
void *elm_object_item_data_get(Elm_Object_Item *item)
void elm_object_item_data_set(Elm_Object_Item *item, void *data)
void elm_object_item_signal_emit(Elm_Object_Item *it, const_char *emission, const_char *source)
void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
Eina_Bool elm_object_item_disabled_get(Elm_Object_Item *it)
void elm_object_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb del_cb)
void elm_object_item_del(Elm_Object_Item *item)
void elm_object_item_tooltip_text_set(Elm_Object_Item *it, const_char *text)
Eina_Bool elm_object_item_tooltip_window_mode_set(Elm_Object_Item *it, Eina_Bool disable)
Eina_Bool elm_object_item_tooltip_window_mode_get(Elm_Object_Item *it)
void elm_object_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, void *data, Evas_Smart_Cb del_cb)
void elm_object_item_tooltip_unset(Elm_Object_Item *it)
void elm_object_item_tooltip_style_set(Elm_Object_Item *it, const_char *style)
const_char * elm_object_item_tooltip_style_get(Elm_Object_Item *it)
void elm_object_item_cursor_set(Elm_Object_Item *it, const_char *cursor)
const_char * elm_object_item_cursor_get(Elm_Object_Item *it)
void elm_object_item_cursor_unset(Elm_Object_Item *it)
void elm_object_item_cursor_style_set(Elm_Object_Item *it, const_char *style)
const_char * elm_object_item_cursor_style_get(Elm_Object_Item *it)
void elm_object_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
Eina_Bool elm_object_item_cursor_engine_only_get(Elm_Object_Item *it)
Evas_Object * elm_object_item_widget_get(Elm_Object_Item *it)
void elm_object_item_part_content_set(Elm_Object_Item *it, const_char *part, Evas_Object* content)
void elm_object_item_content_set(Elm_Object_Item *it, Evas_Object* content)
Evas_Object * elm_object_item_part_content_get(Elm_Object_Item *it, const_char *part)
Evas_Object * elm_object_item_content_get(Elm_Object_Item *it)
Evas_Object * elm_object_item_part_content_unset(Elm_Object_Item *it, const_char *part)
Evas_Object * elm_object_item_content_unset(Elm_Object_Item *it)
void elm_object_item_part_text_set(Elm_Object_Item *item, const_char *part, const_char *label)
void elm_object_item_text_set(Elm_Object_Item *item, const_char *label)
const_char * elm_object_item_part_text_get(Elm_Object_Item *item, const_char *part)
const_char * elm_object_item_text_get(Elm_Object_Item *item)
void elm_object_item_access_info_set(Elm_Object_Item *it, const_char *txt)
void * elm_object_item_data_get(Elm_Object_Item *item)
void elm_object_item_data_set(Elm_Object_Item *item, void *data)
void elm_object_item_signal_emit(Elm_Object_Item *it, const_char *emission, const_char *source)
void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
Eina_Bool elm_object_item_disabled_get(Elm_Object_Item *it)
void elm_object_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb del_cb)
void elm_object_item_del(Elm_Object_Item *item)
void elm_object_item_tooltip_text_set(Elm_Object_Item *it, const_char *text)
Eina_Bool elm_object_item_tooltip_window_mode_set(Elm_Object_Item *it, Eina_Bool disable)
Eina_Bool elm_object_item_tooltip_window_mode_get(Elm_Object_Item *it)
void elm_object_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, void *data, Evas_Smart_Cb del_cb)
void elm_object_item_tooltip_unset(Elm_Object_Item *it)
void elm_object_item_tooltip_style_set(Elm_Object_Item *it, const_char *style)
const_char * elm_object_item_tooltip_style_get(Elm_Object_Item *it)
void elm_object_item_cursor_set(Elm_Object_Item *it, const_char *cursor)
const_char * elm_object_item_cursor_get(Elm_Object_Item *it)
void elm_object_item_cursor_unset(Elm_Object_Item *it)
void elm_object_item_cursor_style_set(Elm_Object_Item *it, const_char *style)
const_char * elm_object_item_cursor_style_get(Elm_Object_Item *it)
void elm_object_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
Eina_Bool elm_object_item_cursor_engine_only_get(Elm_Object_Item *it)
Evas_Object * elm_object_item_access_register(Elm_Object_Item *item)
void elm_object_item_access_unregister(Elm_Object_Item *item)
Evas_Object * elm_object_item_access_object_get(const_Elm_Object_Item *item)
void elm_object_item_access_order_set(Elm_Object_Item *item, Eina_List *objs)
const_Eina_List *elm_object_item_access_order_get(const_Elm_Object_Item *item)
void elm_object_item_access_order_unset(Elm_Object_Item *item)
cdef _object_item_to_python(Elm_Object_Item *it)
cdef Elm_Object_Item * _object_item_from_python(ObjectItem item) except NULL

View File

@ -22,6 +22,8 @@ include "tooltips.pxi"
# cdef void _tooltip_item_data_del_cb(void *data, Evas_Object *o, void *event_info) with gil:
# Py_DECREF(<object>data)
from efl.eo cimport convert_python_list_objects_to_eina_list, \
_object_list_to_python
from object cimport Object
import traceback
@ -497,4 +499,42 @@ cdef class ObjectItem(object):
return elm_object_item_cursor_engine_only_get(self.item)
def access_unregister(self):
"""Unregister accessible object of the object item.
:since: 1.8
"""
elm_object_item_access_unregister(self.item)
property access_object:
"""Get an accessible object of the object item.
:since: 1.8
:return: Accessible object of the object item or NULL for any error
"""
def __get__(self):
return object_from_instance(elm_object_item_access_object_get(self.item))
property access_order:
"""Access highlight order
:since: 1.8
:type: list of Objects
"""
def __set__(self, list value):
elm_object_item_access_order_set(self.item,
convert_python_list_objects_to_eina_list(value))
def __get__(self):
_object_list_to_python(elm_object_item_access_order_get(self.item))
def __del__(self):
elm_object_item_access_order_unset(self.item)
_object_mapping_register("elm_object_item", ObjectItem)

View File

@ -131,7 +131,7 @@ cdef list convert_eina_list_strings_to_python_list(const_Eina_List *lst):
return ret
cdef Eina_List *convert_python_list_strings_to_eina_list(strings):
cdef Eina_List *convert_python_list_strings_to_eina_list(list strings):
cdef Eina_List *lst = NULL
for s in strings:
if isinstance(s, unicode): s = PyUnicode_AsUTF8String(s)
@ -147,6 +147,15 @@ cdef list _object_list_to_python(const_Eina_List *lst):
return ret
cdef Eina_List *convert_python_list_objects_to_eina_list(list objects):
cdef:
Eina_List *lst
Eo o
for o in objects:
lst = eina_list_append(lst, o.obj)
return lst
cdef void _METHOD_DEPRECATED(object self, char *message):
cdef:
object stack

View File

@ -41,6 +41,7 @@ cdef unicode _ctouni(const_char *s)
cdef list convert_array_of_strings_to_python_list(char **array, int array_length)
cdef const_char ** convert_python_list_strings_to_array_of_strings(list strings) except NULL
cdef list convert_eina_list_strings_to_python_list(const_Eina_List *lst)
cdef Eina_List * convert_python_list_strings_to_eina_list(strings)
cdef Eina_List * convert_python_list_strings_to_eina_list(list strings)
cdef list _object_list_to_python(const_Eina_List *lst)
cdef Eina_List *convert_python_list_objects_to_eina_list(list objects)
cdef void _METHOD_DEPRECATED(object self, char *message)

View File

@ -140,6 +140,7 @@ else:
# Elementary
elm_exts = [
Extension("efl.elementary.access", ["efl/elementary/access.pyx"]),
Extension("efl.elementary.actionslider", ["efl/elementary/actionslider.pyx"]),
Extension("efl.elementary.background", ["efl/elementary/background.pyx"]),
Extension("efl.elementary.box", ["efl/elementary/box.pyx"]),