python-efl/efl/elementary/efl.elementary_map.pxi

791 lines
24 KiB
Cython
Raw Normal View History

Put in a first, still wip, version of the python bindings in a merged tree. This is meant to be the 1.8 version of the wrappers and will include everything that now is in the python folder. Atm this include evas, ecore, edje, elementary and emotion (emotion still commented in the build couse it need some more testing). Eo is used as a base for all the objects that inherit from it in C, but in real nothing is used from Eo, it is used more like a container to share code between the libs. All the docs has been stripped out because we want to use the new sphinx style docs that Kay has done in his git repo. (Kay: please wait a little bit to include it, as working on the libs without docs is much more easy) The new wrappers include a new container module called efl and thus you can live with both the old and the new installation. This also means that you need to import the new modules as: "from efl import evas" (instead of the old "import evas") The idea here is that you can make your code works with both version doing something like: try: import evas except: from efl import evas ...like is done in the gtk bindings Some stuff has been leaved out on purpose, because was old stuff (like the hacked evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX modules). See the TODO.txt file for more info. Probably some stuff is out just because I missed them, let me know if you miss something. Improvements from the old version: - Py3 compatible (still some work to be done, but really only TODO, no problems to resolv) - Should also works on other platforms, like windoz (but not tested) - Unittests greatly improved, you can also run ALL tests at once - much more simpler :) I will contine the works in the next weeks and hope someone will help too. NOTE: I switched back to setup.py instead of autotools, because that is the right way to compile python stuff. So to build just use: python setup.py install or python3 setup.py install Enjoy davemds SVN revision: 83831
2013-02-11 14:32:50 -08:00
# Copyright (c) 2012 Davide Andreoli <dave@gurumeditation.it>
#
# This file is part of python-elementary.
#
# python-elementary 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 3 of the License, or
# (at your option) any later version.
#
# python-elementary 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 python-elementary. If not, see <http://www.gnu.org/licenses/>.
#
cdef _elm_map_overlay_to_python(Elm_Map_Overlay *ov):
cdef void *data
if ov == NULL:
return None
data = elm_map_overlay_data_get(ov)
if data == NULL:
return None
return <object>data
cdef void _map_overlay_get_callback(void *data, Evas_Object *map, Elm_Map_Overlay *overlay) with gil:
cdef Object obj
# obj = <Object>evas_object_data_get(map, "python-evas")
obj = object_from_instance(map)
try:
(func, args, kwargs) = <object>data
func(obj, _elm_map_overlay_to_python(overlay), *args, **kwargs)
except Exception, e:
traceback.print_exc()
cdef void _map_overlay_del_cb(void *data, Evas_Object *map, Elm_Map_Overlay *overlay) with gil:
ov = <object>data
ov.__del_cb()
cdef void _map_route_callback(void *data, Evas_Object *map, Elm_Map_Route *route) with gil:
cdef Object obj
# obj = <Object>evas_object_data_get(map, "python-evas")
obj = object_from_instance(map)
(proute, func, args, kwargs) = <object>data
try:
func(obj, proute, *args, **kwargs)
except Exception, e:
traceback.print_exc()
Py_DECREF(<object>data)
cdef void _map_name_callback(void *data, Evas_Object *map, Elm_Map_Name *name) with gil:
cdef Object obj
# obj = <Object>evas_object_data_get(map, "python-evas")
obj = object_from_instance(map)
(pname, func, args, kwargs) = <object>data
try:
func(obj, pname, *args, **kwargs)
except Exception, e:
traceback.print_exc()
Py_DECREF(<object>data)
cdef class MapRoute(object):
cdef Elm_Map_Route *route
def __cinit__(self):
self.route = NULL
def __init__(self, evasObject map,
Elm_Map_Route_Type type, Elm_Map_Route_Method method,
double flon, double flat, double tlon, double tlat,
func, *args, **kwargs):
if not callable(func):
raise TypeError("func must be callable")
data = (self, func, args, kwargs)
self.route = elm_map_route_add(map.obj, type, method,
flon, flat, tlon, tlat,
_map_route_callback, <void *>data)
Py_INCREF(data)
Py_INCREF(self)
def delete(self):
elm_map_route_del(self.route)
self.route = NULL
Py_DECREF(self)
def distance_get(self):
return elm_map_route_distance_get(self.route)
property distance:
def __get__(self):
return self.distance_get()
def node_get(self):
return elm_map_route_node_get(self.route)
property node:
def __get__(self):
return self.node_get()
def waypoint_get(self):
return elm_map_route_waypoint_get(self.route)
property waypoint:
def __get__(self):
return self.waypoint_get()
cdef class MapName(object):
cdef Elm_Map_Name *name
def __cinit__(self):
self.name = NULL
def __init__(self, evasObject map, address, double lon, double lat,
func, *args, **kwargs):
if not callable(func):
raise TypeError("func must be callable")
data = (self, func, args, kwargs)
if address:
self.name = elm_map_name_add(map.obj, address, lon, lat,
_map_name_callback, <void *>data)
else:
self.name = elm_map_name_add(map.obj, NULL, lon, lat,
_map_name_callback, <void *>data)
Py_INCREF(data)
Py_INCREF(self)
def delete(self):
elm_map_name_del(self.name)
self.name = NULL
Py_DECREF(self)
def address_get(self):
return _ctouni(elm_map_name_address_get(self.name))
property address:
def __get__(self):
return self.address_get()
def region_get(self):
cdef double lon, lat
elm_map_name_region_get(self.name, &lon, &lat)
return (lon, lat)
property region:
def __get__(self):
return self.region_get()
cdef class MapOverlay(object):
cdef Elm_Map_Overlay *overlay
cdef void* cb_get_data
def __cinit__(self):
self.overlay = NULL
self.cb_get_data = NULL
def __init__(self, evasObject Map, double lon, double lat):
self.overlay = elm_map_overlay_add(Map.obj, lon, lat)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
def __del_cb(self):
self.overlay = NULL
Py_DECREF(self)
def delete(self):
if self.overlay == NULL:
raise ValueError("Object already deleted")
elm_map_overlay_del(self.overlay)
def type_get(self):
return elm_map_overlay_type_get(self.overlay)
property type:
def __get__(self):
return self.type_get()
def hide_set(self, hide):
elm_map_overlay_hide_set(self.overlay, bool(hide))
def hide_get(self):
return bool(elm_map_overlay_hide_get(self.overlay))
property hide:
def __get__(self):
return self.hide_get()
def __set__(self, value):
self.hide_set(value)
def displayed_zoom_min_set(self, zoom):
elm_map_overlay_displayed_zoom_min_set(self.overlay, zoom)
def displayed_zoom_min_get(self):
return elm_map_overlay_displayed_zoom_min_get(self.overlay)
property displayed_zoom_min:
def __get__(self):
return self.displayed_zoom_min_get()
def __set__(self, value):
self.displayed_zoom_min_set(value)
def paused_set(self, paused):
elm_map_overlay_paused_set(self.overlay, paused)
def paused_get(self):
return elm_map_overlay_paused_get(self.overlay)
property paused:
def __get__(self):
return self.paused_get()
def __set__(self, value):
self.paused_set(value)
def visible_get(self):
return bool(elm_map_overlay_visible_get(self.overlay))
property visible:
def __get__(self):
return self.visible_get()
def content_set(self, Object content):
elm_map_overlay_content_set(self.overlay, content.obj)
def content_get(self):
return object_from_instance(elm_map_overlay_content_get(self.overlay))
property content:
def __get__(self):
return self.content_get()
def __set__(self, value):
self.content_set(value)
def icon_set(self, Object icon):
elm_map_overlay_icon_set(self.overlay, icon.obj)
def icon_get(self):
return object_from_instance(elm_map_overlay_icon_get(self.overlay))
property icon:
def __get__(self):
return self.icon_get()
def __set__(self, value):
self.icon_set(value)
def region_set(self, lon, lat):
elm_map_overlay_region_set(self.overlay, lon, lat)
def region_get(self):
cdef double lon, lat
elm_map_overlay_region_get(self.overlay, &lon, &lat)
return (lon, lat)
property region:
def __get__(self):
return self.region_get()
def __set__(self, value):
self.region_set(*value)
def color_set(self, r, g, b, a):
elm_map_overlay_color_set(self.overlay, r, g, b, a)
def color_get(self):
cdef int r, g, b, a
elm_map_overlay_color_get(self.overlay, &r, &g, &b, &a)
return (r, g, b, a)
property color:
def __get__(self):
return self.color_get()
def __set__(self, value):
self.color_set(*value)
def show(self):
elm_map_overlay_show(self.overlay)
def callback_clicked_set(self, func, *args, **kwargs):
if not callable(func):
raise TypeError("func must be callable")
cb_data = (func, args, kwargs)
elm_map_overlay_get_cb_set(self.overlay, _map_overlay_get_callback,
<void *>cb_data)
Py_INCREF(cb_data)
self.cb_get_data
def callback_clicked_unset(self, func):
elm_map_overlay_get_cb_set(self.overlay, NULL, NULL)
cb_data = <object>self.cb_get_data
self.cb_get_data = NULL
Py_DECREF(cb_data)
cdef class MapOverlayClass(MapOverlay):
def __init__(self, evasObject Map):
self.overlay = elm_map_overlay_class_add(Map.obj)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
def append(self, MapOverlay overlay):
elm_map_overlay_class_append(self.overlay, overlay.overlay)
def remove(self, MapOverlay overlay):
elm_map_overlay_class_remove(self.overlay, overlay.overlay)
def zoom_max_set(self, zoom):
elm_map_overlay_class_zoom_max_set(self.overlay, zoom)
def zoom_max_get(self):
return elm_map_overlay_class_zoom_max_get(self.overlay)
property zoom_max:
def __get__(self):
return self.zoom_max_get()
def __set__(self, value):
self.zoom_max_set(value)
def members_get(self):
cdef Eina_List *lst
cdef Elm_Map_Overlay *ov
lst = elm_map_overlay_group_members_get(self.overlay)# TODO this is somehow wrong... group <> class
ret = []
ret_append = ret.append
while lst:
ov = <Elm_Map_Overlay *>lst.data
lst = lst.next
o = _elm_map_overlay_to_python(ov)
if o is not None:
ret_append(o)
return ret
property members:
def __get__(self):
return self.members_get()
cdef class MapOverlayBubble(MapOverlay):
def __init__(self, evasObject Map):
self.overlay = elm_map_overlay_bubble_add(Map.obj)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
def follow(self, MapOverlay overlay):
elm_map_overlay_bubble_follow(self.overlay, overlay.overlay)
def content_append(self, evasObject content):
elm_map_overlay_bubble_content_append(self.overlay, content.obj)
def content_clear(self):
elm_map_overlay_bubble_content_clear(self.overlay)
cdef class MapOverlayLine(MapOverlay):
def __init__(self, evasObject Map, flon, flat, tlot, tlat):
self.overlay = elm_map_overlay_line_add(Map.obj, flon, flat, tlot, tlat)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
cdef class MapOverlayPolygon(MapOverlay):
def __init__(self, evasObject Map):
self.overlay = elm_map_overlay_polygon_add(Map.obj)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
def region_add(self, lon, lat):
elm_map_overlay_polygon_region_add(self.overlay, lon, lat)
cdef class MapOverlayCircle(MapOverlay):
def __init__(self, evasObject Map, lon, lat, radius):
self.overlay = elm_map_overlay_circle_add(Map.obj, lon, lat, radius)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
cdef class MapOverlayScale(MapOverlay):
def __init__(self, evasObject Map, x, y):
self.overlay = elm_map_overlay_scale_add(Map.obj, x, y)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
cdef class MapOverlayRoute(MapOverlay):
def __init__(self, evasObject Map, MapRoute route):
self.overlay = elm_map_overlay_route_add(Map.obj, route.route)
elm_map_overlay_data_set(self.overlay, <void *>self)
elm_map_overlay_del_cb_set(self.overlay, _map_overlay_del_cb, <void *>self)
Py_INCREF(self)
cdef class Map(Object):
def __init__(self, evasObject parent):
# Object.__init__(self, parent.evas)
self._set_obj(elm_map_add(parent.obj))
def zoom_set(self, zoom):
elm_map_zoom_set(self.obj, zoom)
def zoom_get(self):
return elm_map_zoom_get(self.obj)
property zoom:
def __get__(self):
return self.zoom_get()
def __set__(self, value):
self.zoom_set(value)
def zoom_mode_set(self, mode):
elm_map_zoom_mode_set(self.obj, mode)
def zoom_mode_get(self):
return elm_map_zoom_mode_get(self.obj)
property zoom_mode:
def __get__(self):
return self.zoom_mode_get()
def __set__(self, value):
self.zoom_mode_set(value)
def zoom_min_set(self, zoom):
elm_map_zoom_min_set(self.obj, zoom)
def zoom_min_get(self):
return elm_map_zoom_min_get(self.obj)
property zoom_min:
def __get__(self):
return self.zoom_min_get()
def __set__(self, value):
self.zoom_min_set(value)
def zoom_max_set(self, zoom):
elm_map_zoom_max_set(self.obj, zoom)
def zoom_max_get(self):
return elm_map_zoom_max_get(self.obj)
property zoom_max:
def __get__(self):
return self.zoom_max_get()
def __set__(self, value):
self.zoom_max_set(value)
def region_get(self):
cdef double lon, lat
elm_map_region_get(self.obj, &lon, &lat)
return (lon, lat)
property region:
def __get__(self):
return self.region_get()
def region_bring_in(self, lon, lat):
elm_map_region_bring_in(self.obj, lon, lat)
def region_show(self, lon, lat):
elm_map_region_show(self.obj, lon, lat)
def canvas_to_region_convert(self, x, y):
cdef double lon, lat
elm_map_canvas_to_region_convert(self.obj, x, y, &lon, &lat)
return (lon, lat)
def region_to_canvas_convert(self, lon, lat):
cdef Evas_Coord x, y
elm_map_region_to_canvas_convert(self.obj, lon, lat, &x, &y)
return (x, y)
def paused_set(self, paused):
elm_map_paused_set(self.obj, bool(paused))
def paused_get(self):
return bool(elm_map_paused_get(self.obj))
property paused:
def __get__(self):
return self.paused_get()
def __set__(self, value):
self.paused_set(value)
def rotate_set(self, degree, cx, cy):
elm_map_rotate_set(self.obj, degree, cx, cy)
def rotate_get(self):
cdef double degree
cdef Evas_Coord cx, cy
elm_map_rotate_get(self.obj, &degree, &cx, &cy)
return (degree, cx, cy)
property rotate:
def __get__(self):
return self.rotate_get()
def __set__(self, value):
self.rotate_set(*value)
def wheel_disabled_set(self, disabled):
elm_map_wheel_disabled_set(self.obj, bool(disabled))
def wheel_disabled_get(self):
return bool(elm_map_wheel_disabled_get(self.obj))
property wheel_disabled:
def __get__(self):
return self.wheel_disabled_get()
def __set__(self, value):
self.wheel_disabled_set(value)
def user_agent_set(self, user_agent):
elm_map_user_agent_set(self.obj, user_agent)
def user_agent_get(self):
return elm_map_user_agent_get(self.obj)
property user_agent:
def __get__(self):
return self.user_agent_get()
def __set__(self, value):
self.user_agent_set(value)
def overlay_add(self, lon, lat):
return MapOverlay(self, lon, lat)
def overlays_get(self):
cdef Eina_List *lst
cdef Elm_Map_Overlay *ov
lst = elm_map_overlays_get(self.obj)
ret = []
ret_append = ret.append
while lst:
ov = <Elm_Map_Overlay *>lst.data
lst = lst.next
o = _elm_map_overlay_to_python(ov)
if o is not None:
ret_append(o)
return ret
property overlays:
def __get__(self):
return self.overlays_get()
def overlays_show(self, overlays):
cdef Eina_List *lst
lst = NULL
for overlay in overlays:
ov = <MapOverlay>overlay
lst = eina_list_append(lst, ov.overlay)
elm_map_overlays_show(lst)
eina_list_free(lst)
def overlay_bubble_add(self):
return MapOverlayBubble(self)
def overlay_line_add(self, flon, flat, tlon, tlat):
return MapOverlayLine(self, flon, flat, tlon, tlat)
def overlay_polygon_add(self):
return MapOverlayPolygon(self)
def overlay_circle_add(self, lon, lat, radius):
return MapOverlayCircle(self, lon, lat, radius)
def overlay_scale_add(self, x, y):
return MapOverlayScale(self, x, y)
def overlay_class_add(self):
return MapOverlayClass(self)
def overlay_route_add(self, route):
return MapOverlayRoute(self, route)
def tile_load_status_get(self):
cdef int try_num, finish_num
elm_map_tile_load_status_get(self.obj, &try_num, &finish_num)
return (try_num, finish_num)
property tile_load_status_get:
def __get__(self):
return self.tile_load_status_get_get()
def sources_get(self, type):
cdef const_char_ptr *lst
i = 0
ret = []
lst = elm_map_sources_get(self.obj, type)
while (lst[i]):
ret.append(_ctouni(lst[i]))
i += 1
return ret
def source_set(self, type, source_name):
elm_map_source_set(self.obj, type, _cfruni(source_name))
def source_get(self, type):
return _ctouni(elm_map_source_get(self.obj, type))
def route_add(self, Elm_Map_Route_Type type, Elm_Map_Route_Method method,
double flon, double flat, double tlon, double tlat,
route_cb, *args, **kwargs):
return MapRoute(self, type, method, flon, flat, tlon, tlat,
route_cb, *args, **kwargs)
def name_add(self, address, double lon, double lat,
name_cb, *args, **kwargs):
return MapName(self, address, lon, lat, name_cb, *args, **kwargs)
# TODO elm_map_track_add
# TODO elm_map_track_remove
def callback_clicked_add(self, func, *args, **kwargs):
self._callback_add("clicked", func, *args, **kwargs)
def callback_clicked_del(self, func):
self._callback_del("clicked", func)
def callback_clicked_double_add(self, func, *args, **kwargs):
self._callback_add("clicked,double", func, *args, **kwargs)
def callback_clicked_double_del(self, func):
self._callback_del("clicked,double", func)
def callback_press_add(self, func, *args, **kwargs):
self._callback_add("press", func, *args, **kwargs)
def callback_press_del(self, func):
self._callback_del("press", func)
def callback_longpressed_add(self, func, *args, **kwargs):
self._callback_add("longpressed", func, *args, **kwargs)
def callback_longpressed_del(self, func):
self._callback_del("longpressed", func)
def callback_scroll_add(self, func, *args, **kwargs):
self._callback_add("scroll", func, *args, **kwargs)
def callback_scroll_del(self, func):
self._callback_del("scroll", func)
def callback_scroll_drag_start_add(self, func, *args, **kwargs):
self._callback_add("scroll,drag,start", func, *args, **kwargs)
def callback_scroll_drag_start_del(self, func):
self._callback_del("scroll,drag,start", func)
def callback_scroll_drag_stop_add(self, func, *args, **kwargs):
self._callback_add("scroll,drag,stop", func, *args, **kwargs)
def callback_scroll_drag_stop_del(self, func):
self._callback_del("scroll,drag,stop", func)
def callback_scroll_anim_start_add(self, func, *args, **kwargs):
self._callback_add("scroll,anim,start", func, *args, **kwargs)
def callback_scroll_anim_start_del(self, func):
self._callback_del("scroll,anim,start", func)
def callback_scroll_anim_stop_add(self, func, *args, **kwargs):
self._callback_add("scroll,anim,stop", func, *args, **kwargs)
def callback_scroll_anim_stop_del(self, func):
self._callback_del("scroll,anim,stop", func)
def callback_zoom_start_add(self, func, *args, **kwargs):
self._callback_add("zoom,start", func, *args, **kwargs)
def callback_zoom_start_del(self, func):
self._callback_del("zoom,start", func)
def callback_zoom_stop_add(self, func, *args, **kwargs):
self._callback_add("zoom,stop", func, *args, **kwargs)
def callback_zoom_stop_del(self, func):
self._callback_del("zoom,stop", func)
def callback_zoom_change_add(self, func, *args, **kwargs):
self._callback_add("zoom,change", func, *args, **kwargs)
def callback_zoom_change_del(self, func):
self._callback_del("zoom,change", func)
def callback_tile_load_add(self, func, *args, **kwargs):
self._callback_add("tile,load", func, *args, **kwargs)
def callback_tile_load_del(self, func):
self._callback_del("tile,load", func)
def callback_tile_loaded_add(self, func, *args, **kwargs):
self._callback_add("tile,loaded", func, *args, **kwargs)
def callback_tile_loaded_del(self, func):
self._callback_del("tile,loaded", func)
def callback_tile_loaded_fail_add(self, func, *args, **kwargs):
self._callback_add("tile,loaded,fail", func, *args, **kwargs)
def callback_tile_loaded_fail_del(self, func):
self._callback_del("tile,loaded,fail", func)
def callback_route_load_add(self, func, *args, **kwargs):
self._callback_add("route,load", func, *args, **kwargs)
def callback_route_load_del(self, func):
self._callback_del("route,load", func)
def callback_route_loaded_add(self, func, *args, **kwargs):
self._callback_add("route,loaded", func, *args, **kwargs)
def callback_route_loaded_del(self, func):
self._callback_del("route,loaded", func)
def callback_route_loaded_fail_add(self, func, *args, **kwargs):
self._callback_add("route,loaded,fail", func, *args, **kwargs)
def callback_route_loaded_fail_del(self, func):
self._callback_del("route,loaded,fail", func)
def callback_name_load_add(self, func, *args, **kwargs):
self._callback_add("name,load", func, *args, **kwargs)
def callback_name_load_del(self, func):
self._callback_del("name,load", func)
def callback_name_loaded_add(self, func, *args, **kwargs):
self._callback_add("name,loaded", func, *args, **kwargs)
def callback_name_loaded_del(self, func):
self._callback_del("name,loaded", func)
def callback_name_loaded_fail_add(self, func, *args, **kwargs):
self._callback_add("name,loaded,fail", func, *args, **kwargs)
def callback_name_loaded_fail_del(self, func):
self._callback_del("name,loaded,fail", func)
def callback_overlay_clicked_add(self, func, *args, **kwargs):
self._callback_add("overlay,clicked", func, *args, **kwargs)
def callback_overlay_clicked_del(self, func):
self._callback_del("overlay,clicked", func)
def callback_overlay_del_add(self, func, *args, **kwargs):
self._callback_add("overlay,del", func, *args, **kwargs)
def callback_overlay_del_del(self, func):
self._callback_del("overlay,del", func)
def callback_loaded_add(self, func, *args, **kwargs):
self._callback_add("loaded", func, *args, **kwargs)
def callback_loaded_del(self, func):
self._callback_del("loaded", func)
_object_mapping_register("elm_map", Map)