Elementary: Implement Accessible objects, with cbs TODO later.
This commit is contained in:
parent
aa76bc30c1
commit
0d63acbee9
|
@ -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
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
:mod:`access` Module
|
||||
--------------------
|
||||
|
||||
.. automodule:: efl.elementary.access
|
||||
|
||||
.. inheritance-diagram::
|
||||
efl.elementary.access
|
||||
:parts: 2
|
|
@ -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)
|
|
@ -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)
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
1
setup.py
1
setup.py
|
@ -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"]),
|
||||
|
|
Loading…
Reference in New Issue