[libchamplain] Provide missing methods champlain_map_source_factory, champlain_polygon_get_points, champlain_polygo



commit 2d58f2b2e674f2641b43df51edefc413a2509eef
Author: Victor Poluceno <victorpoluceno gmail com>
Date:   Tue Jun 16 15:37:12 2009 -0300

    Provide missing methods champlain_map_source_factory, champlain_polygon_get_points, champlain_polygon_insert_point and champlain_polygon_append_point

 bindings/python/champlain/pychamplain.override |  106 ++++++++++++++++++++++++
 1 files changed, 106 insertions(+), 0 deletions(-)
---
diff --git a/bindings/python/champlain/pychamplain.override b/bindings/python/champlain/pychamplain.override
index 2523834..b8e25f0 100644
--- a/bindings/python/champlain/pychamplain.override
+++ b/bindings/python/champlain/pychamplain.override
@@ -44,6 +44,7 @@ _wrap_champlain_map_source_factory_dup_list(PyGObject *self) {
 		PyDict_SetItemString(item, "license_uri", PyString_FromString(desc->license_uri));
 		PyDict_SetItemString(item, "min_zoom_level", PyInt_FromLong(desc->min_zoom_level));
 		PyDict_SetItemString(item, "max_zoom_level", PyInt_FromLong(desc->max_zoom_level));
+		PyDict_SetItemString(item, "uri_format", PyString_FromString(desc->uri_format));
 		PyList_Append(ret, item);
 		Py_DECREF(item);
 	}
@@ -53,3 +54,108 @@ _wrap_champlain_map_source_factory_dup_list(PyGObject *self) {
 	return ret;
 }
 %%
+override champlain_map_source_factory_register kwargs
+static PyObject *_pycallback = NULL;
+
+static ChamplainMapSource *
+champlain_map_source_constructor (ChamplainMapSourceDesc *desc, gpointer data)
+{
+    PyObject *pymap_source = NULL;
+    PyObject *pydesc = PyDict_New();
+
+    PyDict_SetItemString(pydesc, "id", PyString_FromString(desc->id));
+    PyDict_SetItemString(pydesc, "name", PyString_FromString(desc->name));
+    PyDict_SetItemString(pydesc, "license", PyString_FromString(desc->license));
+    PyDict_SetItemString(pydesc, "license_uri", PyString_FromString(desc->license_uri));
+    PyDict_SetItemString(pydesc, "min_zoom_level", PyInt_FromLong(desc->min_zoom_level));
+    PyDict_SetItemString(pydesc, "max_zoom_level", PyInt_FromLong(desc->max_zoom_level));
+    PyDict_SetItemString(pydesc, "uri_format", PyString_FromString(desc->uri_format));
+    pymap_source = PyObject_CallFunction(_pycallback, "(OO)", pydesc, data);
+    if (!pymap_source)
+        return NULL;
+    return CHAMPLAIN_MAP_SOURCE(((PyGObject *)pymap_source)->obj);
+}
+
+static PyObject *
+_wrap_champlain_map_source_factory_register(PyGObject *self, PyObject *args, PyObject *kargs) 
+{
+    ChamplainMapSourceDesc *desc;
+    PyObject *pydesc = NULL, *pyconstructor = NULL, *pyuser_data = NULL;
+    static char *kwlist[] = {"desc", "constructor", "user_data", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kargs, "OO|O:ChamplainMapSourceFactory.register", 
+        kwlist, &pydesc, &pyconstructor, &pyuser_data))
+        return NULL;
+   
+    if (!pydesc || !PyMapping_Check(pydesc)){
+        PyErr_SetString(PyExc_TypeError, "desc parameter must be a dict object");
+        return NULL;
+    }
+
+    desc = champlain_map_source_desc_new(); 
+    desc->id = PyString_AsString(PyDict_GetItemString(pydesc, "id"));
+    desc->name = PyString_AsString(PyDict_GetItemString(pydesc, "name"));
+    desc->license = PyString_AsString(PyDict_GetItemString(pydesc, "license"));
+    desc->license_uri = PyString_AsString(PyDict_GetItemString(pydesc, "license_uri"));
+    desc->min_zoom_level = PyInt_AsLong(PyDict_GetItemString(pydesc, "min_zoom_level"));
+    desc->max_zoom_level = PyInt_AsLong(PyDict_GetItemString(pydesc, "max_zoom_level"));
+    desc->uri_format = PyString_AsString(PyDict_GetItemString(pydesc, "uri_format"));
+    if (pyg_enum_get_value(CHAMPLAIN_TYPE_MAP_PROJECTION, PyDict_GetItemString(pydesc, 
+        "projection"), (gpointer)&desc->projection) != 0)
+        return NULL;
+
+    if (!pyconstructor || !PyCallable_Check(pyconstructor)) {
+        PyErr_SetString(PyExc_TypeError, "constructor parameter must be callable");
+        return NULL;
+    }
+    Py_XINCREF(pyconstructor);  /* Add a reference to new callback */
+    Py_XDECREF(_pycallback); /* Dispose of previous callback */
+    _pycallback = pyconstructor;
+    return PyBool_FromLong(champlain_map_source_factory_register(
+        CHAMPLAIN_MAP_SOURCE_FACTORY(self->obj), desc, champlain_map_source_constructor, 
+        (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);
+
+	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);
+    }
+    return ret;
+}
+%%



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