[libchamplain] Update python binding



commit 859994f87736361c4c6c6daf6a176a2cf341895d
Author: Victor Godoy Poluceno <victorpoluceno gmail com>
Date:   Fri Jul 31 14:46:27 2009 -0300

    Update python binding

 bindings/python/champlain/pychamplain.defs     |   78 +++++++++++++++++++++++-
 bindings/python/champlain/pychamplain.override |   52 +++++-----------
 bindings/python/demos/animated-marker.py       |    1 +
 bindings/python/demos/capitals.py              |    1 +
 bindings/python/demos/launcher.py              |   10 +++-
 bindings/python/demos/markers.py               |   50 +++++++++++++++
 6 files changed, 153 insertions(+), 39 deletions(-)
---
diff --git a/bindings/python/champlain/pychamplain.defs b/bindings/python/champlain/pychamplain.defs
index 7a27fab..3100082 100644
--- a/bindings/python/champlain/pychamplain.defs
+++ b/bindings/python/champlain/pychamplain.defs
@@ -77,6 +77,16 @@
   (gtype-id "CHAMPLAIN_TYPE_ZOOM_LEVEL")
 )
 
+(define-boxed Point
+  (in-module "Champlain")
+  (c-name "ChamplainPoint")
+  (gtype-id "CHAMPLAIN_TYPE_POINT")
+  (fields
+    '("double" "lat")
+    '("double" "lon")
+  )   
+)
+
 ;; Enumerations and flags ...
 
 (define-enum ScrollMode
@@ -499,6 +509,15 @@
   )
 )
 
+(define-method remove_point
+  (of-object "ChamplainPolygon")
+  (c-name "champlain_polygon_remove_point")
+  (return-type "none")
+  (parameters
+    '("ChamplainPoint*" "point")
+  )
+)
+
 (define-method clear_points
   (of-object "ChamplainPolygon")
   (c-name "champlain_polygon_clear_points")
@@ -644,6 +663,36 @@
   (return-type "ChamplainLayer*")
 )
 
+(define-method show
+  (of-object "ChamplainLayer")
+  (c-name "champlain_layer_show")
+  (return-type "none")
+)
+
+(define-method hide
+  (of-object "ChamplainLayer")
+  (c-name "champlain_layer_hide")
+  (return-type "none")
+)
+
+(define-method add_marker
+  (of-object "ChamplainLayer")
+  (c-name "champlain_layer_add_marker")
+  (return-type "none")
+  (parameters
+    '("ChamplainBaseMarker*" "marker")
+  )
+)
+
+(define-method remove_marker
+  (of-object "ChamplainLayer")
+  (c-name "champlain_layer_remove_marker")
+  (return-type "none")
+  (parameters
+    '("ChamplainBaseMarker*" "marker")
+  )
+)
+
 
 
 ;; From champlain-map-source.h
@@ -1186,6 +1235,14 @@
   (return-type "gboolean")
 )
 
+(define-function marker_set_highlight_color
+  (c-name "champlain_marker_set_highlight_color")
+  (return-type "none")
+  (parameters
+    '("ClutterColor*" "color")
+  )
+)
+
 
 
 ;; From champlain-base-marker.h
@@ -1211,6 +1268,21 @@
   )
 )
 
+(define-method set_highlighted
+  (of-object "ChamplainBaseMarker")
+  (c-name "champlain_base_marker_set_highlighted")
+  (return-type "none")
+  (parameters
+    '("gboolean" "value")
+  )
+)
+
+(define-method get_highlighted
+  (of-object "ChamplainBaseMarker")
+  (c-name "champlain_base_marker_get_highlighted")
+  (return-type "gboolean")
+)
+
 
 
 ;; From champlain-tile.h
@@ -1300,13 +1372,13 @@
 (define-method get_modified_time_string
   (of-object "ChamplainTile")
   (c-name "champlain_tile_get_modified_time_string")
-  (return-type "char*")
+  (return-type "gchar*")
 )
 
 (define-method get_etag
   (of-object "ChamplainTile")
   (c-name "champlain_tile_get_etag")
-  (return-type "const-char*")
+  (return-type "const-gchar*")
 )
 
 (define-method set_x
@@ -1396,7 +1468,7 @@
   (c-name "champlain_tile_set_modified_time")
   (return-type "none")
   (parameters
-    '("GTimeVal*" "time")
+    '("const-GTimeVal*" "time")
   )
 )
 
diff --git a/bindings/python/champlain/pychamplain.override b/bindings/python/champlain/pychamplain.override
index 2331c06..3fea03a 100644
--- a/bindings/python/champlain/pychamplain.override
+++ b/bindings/python/champlain/pychamplain.override
@@ -116,60 +116,42 @@ _wrap_champlain_map_source_factory_register(PyGObject *self, PyObject *args, PyO
         (gpointer)pyuser_data));
 }
 %%
-override champlain_polygon_append_point kwargs
-static PyObject *
-_wrap_champlain_polygon_append_point(PyGObject *self, PyObject *args) 
-{
-    double lat, lon; 
-    
-    if (!PyArg_ParseTuple(args, "dd:ChamplainPolygon.append_point", &lat, &lon))
-        return NULL;
-    champlain_polygon_append_point(CHAMPLAIN_POLYGON(self->obj), lat, lon);
-    return Py_BuildValue("(dd)", lat, lon);
-}
-%%
-%%
-override champlain_polygon_insert_point kwargs
-static PyObject *
-_wrap_champlain_polygon_insert_point(PyGObject *self, PyObject *args) 
-{
-    double lat, lon; 
-    int pos;
-    
-    if (!PyArg_ParseTuple(args, "ddi:ChamplainPolygon.insert_point", &lat, &lon, &pos))
-        return NULL;
-    champlain_polygon_insert_point(CHAMPLAIN_POLYGON(self->obj), lat, lon, pos);
-    return Py_BuildValue("(dd)", lat, lon);
-}
-%%
-%%
 override champlain_polygon_get_points kwargs
 static PyObject *
 _wrap_champlain_polygon_get_points(PyGObject *self, PyObject *args) 
 {
     GList *iter, *list = champlain_polygon_get_points(CHAMPLAIN_POLYGON(self->obj));
     PyObject *ret = PyList_New(0);
+    PyObject *pypoint;
 
 	for(iter = list; iter != NULL; iter = iter->next) {
 		ChamplainPoint *point = (ChamplainPoint *) iter->data;
-		PyObject *item = Py_BuildValue("(dd)", point->lat, point->lon);
-		PyList_Append(ret, item);
-		Py_DECREF(item);
+        pypoint = pyg_boxed_new(CHAMPLAIN_TYPE_POINT, point, TRUE, TRUE);
+		PyList_Append(ret, pypoint);
+		Py_DECREF(pypoint);
     }
     return ret;
 }
 %%
 override champlain_view_get_coords_from_event kwargs
 static PyObject *
-_wrap_champlain_view_get_coords_from_event(PyGObject *self, PyObject *args) 
+_wrap_champlain_view_get_coords_from_event(PyGObject *self, PyObject *args, PyObject *kargs) 
 {
-    double lat, lon;
+    static char *kwlist[] = {"event", NULL};
+    gdouble lat, lon;
     PyObject *pyevent;
+    ClutterEvent *event;
 
-    if (!PyArg_ParseTuple(args, "O:ChamplainView.get_coords_from_event", &pyevent))
+    if (!PyArg_ParseTupleAndKeywords(args, kargs, "O:ChamplainView.get_coords_from_event", kwlist, &pyevent))
         return NULL;
 
-    ClutterEvent *event = pyg_boxed_get (pyevent, ClutterEvent);
+    if (pyg_boxed_check(pyevent, CLUTTER_TYPE_EVENT))
+        event = pyg_boxed_get(pyevent, ClutterEvent);
+    else {
+        PyErr_SetString(PyExc_TypeError, "event should be a ClutterEvent");
+        return NULL;
+    }
+ 
     champlain_view_get_coords_from_event(CHAMPLAIN_VIEW(self->obj), event, &lat, &lon);
     return Py_BuildValue("(dd)", lat, lon);
 }
@@ -179,7 +161,7 @@ static PyObject *
 _wrap_champlain_view_get_coords_at(PyGObject *self, PyObject *args) 
 {
     guint x, y;
-    double lat, lon;
+    gdouble lat, lon;
 
     if (!PyArg_ParseTuple(args, "ii:ChamplainView.get_coords_at", &x, &y))
         return NULL;
diff --git a/bindings/python/demos/animated-marker.py b/bindings/python/demos/animated-marker.py
index 18f743a..238592c 100755
--- a/bindings/python/demos/animated-marker.py
+++ b/bindings/python/demos/animated-marker.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #This is a demonstration of the libchamplain python binding.
 #It will display a blue "pulsating" dot on a given position on the map
diff --git a/bindings/python/demos/capitals.py b/bindings/python/demos/capitals.py
index d2b2193..9147ff7 100755
--- a/bindings/python/demos/capitals.py
+++ b/bindings/python/demos/capitals.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+# -*- coding: utf-8 -*-
 import cluttergtk
 import clutter
 import champlain
diff --git a/bindings/python/demos/launcher.py b/bindings/python/demos/launcher.py
index 3fb11f8..8c82a3a 100644
--- a/bindings/python/demos/launcher.py
+++ b/bindings/python/demos/launcher.py
@@ -1,7 +1,11 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 import gobject
 import clutter
 import champlain
 
+from markers import create_marker_layer
+
 PADDING = 10
 
 def map_view_button_release_cb(actor, event, view):
@@ -43,8 +47,8 @@ def main():
     actor = champlain.View()
     actor.set_size(800, 600)
     actor.set_property('scroll-mode', champlain.SCROLL_MODE_KINETIC)
-    actor.set_property('zoom-level', 12)
     actor.center_on(45.466, -73.75)
+    actor.set_property('zoom-level', 12)
 
     # Create the buttons
     buttons = clutter.Group()
@@ -65,6 +69,10 @@ def main():
     button.connect('button-release-event', zoom_out, actor)
     buttons.add(button)
     
+    # Create the markers and marker layer
+    layer = create_marker_layer(actor)
+    actor.add_layer(layer)
+ 
     stage = clutter.stage_get_default()
     stage.set_size(800, 600)
     stage.add(actor)
diff --git a/bindings/python/demos/markers.py b/bindings/python/demos/markers.py
new file mode 100644
index 0000000..cb5a19e
--- /dev/null
+++ b/bindings/python/demos/markers.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import clutter
+import champlain
+import pango
+
+def marker_button_release_cb(actor, event, view):
+    if event.button != 1 and event.click_count > 1:
+        return False
+
+    print "Montreal was clicked\n" 
+    return True
+
+
+def create_marker_layer(view):
+    orange = clutter.Color(0xf3, 0x94, 0x07, 0xbb)
+    black = clutter.Color(0x00, 0x00, 0x00, 0xff)
+    layer = champlain.Layer()
+
+    marker = champlain.marker_new_with_text(
+        "Montréal\n<span size=\"xx-small\">Québec</span>", "Serif 14", black, 
+        orange)
+    marker.set_use_markup(True)
+    marker.set_alignment(pango.ALIGN_RIGHT)
+    marker.set_color(orange)
+
+    marker.set_position(45.528178, -73.563788)
+    layer.add_marker(marker)
+    marker.set_reactive(True)
+    marker.connect("button-release-event", marker_button_release_cb, view)
+
+    marker = champlain.marker_new_from_file(
+        "/usr/share/icons/gnome/24x24/emblems/emblem-generic.png")
+    marker.set_text("New York")
+    marker.set_position(40.77, -73.98)
+    layer.add_marker(marker)
+
+    marker = champlain.marker_new_from_file(
+        "/usr/share/icons/gnome/24x24/emblems/emblem-important.png")
+    marker.set_position(47.130885, -70.764141)
+    layer.add_marker(marker)
+
+    marker = champlain.marker_new_from_file(
+        "/usr/share/icons/gnome/24x24/emblems/emblem-favorite.png")
+    marker.set_draw_background(False)
+    marker.set_position(45.41484, -71.918907)
+    layer.add_marker(marker)
+
+    layer.show()
+    return layer



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]