From 277dd5989a679059be6d2b33e1b2788871f8e55d Mon Sep 17 00:00:00 2001 From: martin-s Date: Sun, 25 Oct 2009 18:23:25 +0000 Subject: [PATCH] Add:binding_dbus:Add support for setting map attributes git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@2691 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/navit/binding/dbus/binding_dbus.c | 46 +++++++++++++++++++++++++++++++++ navit/navit/map/filter/filter.c | 22 ++++++++++++++-- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/navit/navit/binding/dbus/binding_dbus.c b/navit/navit/binding/dbus/binding_dbus.c index 3f7c59d..73c8cee 100644 --- a/navit/navit/binding/dbus/binding_dbus.c +++ b/navit/navit/binding/dbus/binding_dbus.c @@ -35,6 +35,8 @@ #include "command.h" #include "graphics.h" #include "vehicle.h" +#include "map.h" +#include "mapset.h" #include "util.h" @@ -87,6 +89,8 @@ resolve_object(const char *opath, char *type) char *def_navit="/default_navit"; char *def_graphics="/default_graphics"; char *def_vehicle="/default_vehicle"; + char *def_mapset="/default_mapset"; + char *def_map="/default_map"; struct attr attr; if (strncmp(opath, object_path, strlen(object_path))) { @@ -120,6 +124,21 @@ resolve_object(const char *opath, char *type) } return NULL; } + if (!strncmp(oprefix,def_mapset,strlen(def_mapset))) { + oprefix+=strlen(def_mapset); + if (navit_get_attr(navit, attr_mapset, &attr, NULL)) { + if (!oprefix[0]) { + return attr.u.mapset; + } + if (!strncmp(oprefix,def_map,strlen(def_map))) { + if (mapset_get_attr(attr.u.mapset, attr_map, &attr, NULL)) { + return attr.u.map; + } + return NULL; + } + } + return NULL; + } } return NULL; } @@ -629,6 +648,13 @@ decode_attr(DBusMessage *message, struct attr *attr) } return 0; } + if(attr->type > attr_type_string_begin && attr->type < attr_type_string_end) { + if (dbus_message_iter_get_arg_type(&iterattr) == DBUS_TYPE_STRING) { + dbus_message_iter_get_basic(&iterattr, &attr->u.str); + return 1; + } + return 0; + } if(attr->type > attr_type_double_begin && attr->type < attr_type_double_end) { if (dbus_message_iter_get_arg_type(&iterattr) == DBUS_TYPE_DOUBLE) { attr->u.numd=g_new(typeof(*attr->u.numd),1); @@ -729,6 +755,25 @@ request_vehicle_set_attr(DBusConnection *connection, DBusMessage *message) } static DBusHandlerResult +request_map_set_attr(DBusConnection *connection, DBusMessage *message) +{ + struct map *map; + struct attr attr; + int ret; + + map = object_get_from_message(message, "map"); + if (! map) + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + if (decode_attr(message, &attr)) { + ret=map_set_attr(map, &attr); + destroy_attr(&attr); + if (ret) + return empty_reply(connection, message); + } + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult request_navit_set_position(DBusConnection *connection, DBusMessage *message) { struct pcoord pc; @@ -867,6 +912,7 @@ struct dbus_method { {".graphics","get_data", "s", "type", "ay", "data", request_graphics_get_data}, {".graphics","set_attr", "sv", "attribute,value", "", "", request_graphics_set_attr}, {".vehicle","set_attr", "sv", "attribute,value", "", "", request_vehicle_set_attr}, + {".map","set_attr", "sv", "attribute,value", "", "", request_map_set_attr}, #if 0 {".navit", "toggle_announcer", "", "", "", "", request_navit_toggle_announcer}, {".navit", "toggle_announcer", "i", "", "", "", request_navit_toggle_announcer}, diff --git a/navit/navit/map/filter/filter.c b/navit/navit/map/filter/filter.c index 6bb3431..5b82b9c 100644 --- a/navit/navit/map/filter/filter.c +++ b/navit/navit/map/filter/filter.c @@ -80,6 +80,8 @@ filter_type(struct map_priv *m, enum item_type type) } if (old) { new=filter->new; + if (!new) + return type; while (new) { struct filter_entry *entry=new->data; count+=entry->last-entry->first+1; @@ -97,7 +99,7 @@ filter_type(struct map_priv *m, enum item_type type) } filters=g_list_next(filters); } - return type_none; + return type; } static void @@ -281,6 +283,19 @@ map_filter_destroy(struct map_priv *m) g_free(m); } +static int +map_filter_set_attr(struct map_priv *m, struct attr *attr) +{ + switch (attr->type) { + case attr_filter: + parse_filters(m,attr->u.str); + return 1; + default: + return 0; + } +} + + static struct map_methods map_methods_filter = { projection_mg, "utf-8", @@ -291,7 +306,10 @@ static struct map_methods map_methods_filter = { map_filter_rect_get_item_byid, map_filter_search_new, map_filter_search_destroy, - map_filter_search_get_item + map_filter_search_get_item, + NULL, + NULL, + map_filter_set_attr, }; -- 2.7.4