summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--navit/attr.c7
-rw-r--r--navit/navigation.c103
-rw-r--r--navit/navigation.h23
-rw-r--r--navit/osd/core/osd_core.c170
-rw-r--r--navit/xpm/Makefile.am12
-rw-r--r--navit/xpm/status_calculating_bk.svg86
-rw-r--r--navit/xpm/status_calculating_wh.svg86
-rw-r--r--navit/xpm/status_no_destination_bk.svg97
-rw-r--r--navit/xpm/status_no_destination_wh.svg97
-rw-r--r--navit/xpm/status_no_route_bk.svg68
-rw-r--r--navit/xpm/status_no_route_wh.svg69
-rw-r--r--navit/xpm/status_position_wait_bk.svg67
-rw-r--r--navit/xpm/status_position_wait_wh.svg68
-rw-r--r--navit/xpm/status_recalculating_bk.svg86
-rw-r--r--navit/xpm/status_recalculating_wh.svg86
-rw-r--r--navit/xpm/status_routing_bk.svg67
-rw-r--r--navit/xpm/status_routing_wh.svg68
-rw-r--r--navit/xslt/osd_minimum.xslt10
18 files changed, 1252 insertions, 18 deletions
diff --git a/navit/attr.c b/navit/attr.c
index 7b7e1376b..26acdd156 100644
--- a/navit/attr.c
+++ b/navit/attr.c
@@ -35,6 +35,7 @@
#include "coord.h"
#include "transform.h"
#include "color.h"
+#include "navigation.h"
#include "attr.h"
#include "map.h"
#include "config.h"
@@ -354,6 +355,9 @@ flags_to_text(int flags)
* @param map The translation map. This is only needed for string type attributes or group type
* attributes which might contain strings. It can be NULL for other attribute types. If a string
* type attribute is encountered and {@code map} is NULL, the string will be returned unchanged.
+ *
+ * @return The attribute data in human-readable form. The caller is responsible for calling {@code g_free()} on
+ * the result when it is no longer needed.
*/
char *
attr_to_text_ext(struct attr *attr, char *sep, enum attr_format fmt, enum attr_format def_fmt, struct map *map)
@@ -464,6 +468,9 @@ attr_to_text_ext(struct attr *attr, char *sep, enum attr_format fmt, enum attr_f
if (type >= attr_type_item_type_begin && type <= attr_type_item_type_end) {
return g_strdup_printf("0x%ld[%s]",attr->u.num,item_to_name(attr->u.num));
}
+ if (type == attr_nav_status) {
+ return nav_status_to_text(attr->u.num);
+ }
return g_strdup_printf("(no text[%s])", attr_to_name(type));
}
diff --git a/navit/navigation.c b/navit/navigation.c
index a78ce1e1a..ba9b5aaeb 100644
--- a/navit/navigation.c
+++ b/navit/navigation.c
@@ -146,15 +146,6 @@ struct suffix {
};
-enum nav_status {
- status_no_route = -1,
- status_no_destination = 0,
- status_position_wait = 1,
- status_calculating = 2,
- status_recalculating = 3,
- status_routing = 4,
-};
-
enum nav_status_int {
status_none = 0,
status_busy = 1,
@@ -681,6 +672,46 @@ select_announced_destinations(struct navigation_command *current_command)
}
+/**
+ * @brief Converts navigation status to human-readable text.
+ *
+ * @param The status. This must be one of the values for {@code enum nav_status}.
+ *
+ * @return A string which corresponds to the constant value. The caller is responsible for calling
+ * {@code g_free()} when the result is no longer needed.
+ */
+char *nav_status_to_text(int status) {
+ char *ret;
+
+ switch (status) {
+ case status_invalid:
+ ret = g_strdup("status_invalid");
+ break;
+ case status_no_route:
+ ret = g_strdup("status_no_route");
+ break;
+ case status_no_destination:
+ ret = g_strdup("status_no_destination");
+ break;
+ case status_position_wait:
+ ret = g_strdup("status_position_wait");
+ break;
+ case status_calculating:
+ ret = g_strdup("status_calculating");
+ break;
+ case status_recalculating:
+ ret = g_strdup("status_recalculating");
+ break;
+ case status_routing:
+ ret = g_strdup("status_routing");
+ break;
+ default:
+ ret = g_strdup_printf("status_unknown_%d)", status);
+ }
+ return ret;
+}
+
+
int
navigation_get_attr(struct navigation *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
{
@@ -740,13 +771,11 @@ navigation_set_turnaround(struct navigation *this_, int val)
int
navigation_set_attr(struct navigation *this_, struct attr *attr)
{
- int attr_updated=0;
switch (attr->type) {
case attr_speech:
this_->speech=attr->u.speech;
break;
case attr_nav_status:
- attr_updated = (this_->nav_status != attr->u.num);
this_->nav_status = attr->u.num;
break;
default:
@@ -3860,23 +3889,71 @@ navigation_destroy(struct navigation *this_)
g_free(this_);
}
+/**
+ * @brief Registers a new callback function.
+ *
+ * Callback functions are called whenever the attribute for which they are registered changes.
+ * It is possible to register callbacks for {@code attr_any}, which will fire on any change.
+ *
+ * The {@code navigation} object has three callback lists. They differ by the arguments which are
+ * passed to the callback function and are selected based on the attribute type:
+ * <ul>
+ * <li>Callbacks for the {@code navigation_speech} attribute are added to the
+ * {@code callback_speech} list.</li>
+ * <li>Callbacks for the {@code navigation_long} attribute are added to the {@code callback} list.
+ * </li>
+ * <li>Callbacks for any other attribute, including {@code attr_any}, are added to the list stored
+ * in the {@code callback_list} attribute. This functionality is inherited from
+ * {@code navit_object}.</li>
+ * </ul>
+ *
+ * @param this_ The navigation object.
+ * @param type The attribute type
+ * @param cb The callback function
+ *
+ * @return true on success, false on failure
+ */
int
navigation_register_callback(struct navigation *this_, enum attr_type type, struct callback *cb)
{
+ struct attr attr_cbl;
+
if (type == attr_navigation_speech)
callback_list_add(this_->callback_speech, cb);
- else
+ else if (type == attr_navigation_long)
callback_list_add(this_->callback, cb);
+ else {
+ if (navigation_get_attr(this_, attr_callback_list, &attr_cbl, NULL))
+ callback_list_add(attr_cbl.u.callback_list, cb);
+ else
+ return 0;
+ }
return 1;
}
+/**
+ * @brief Unregisters a callback function.
+ *
+ * This function removes a previously registered callback function from the callback list to which
+ * it was added. See the documentation on
+ * {@link navigation_register_callback(struct navigation *, enum attr_type, struct callback *)} for
+ * details on callback lists.
+ *
+ * @param this_ The navigation object.
+ * @param type The attribute type
+ * @param cb The callback function
+ */
void
navigation_unregister_callback(struct navigation *this_, enum attr_type type, struct callback *cb)
{
+ struct attr attr_cbl;
+
if (type == attr_navigation_speech)
callback_list_remove(this_->callback_speech, cb);
- else
+ else if (type == attr_navigation_long)
callback_list_remove(this_->callback, cb);
+ else if (navigation_get_attr(this_, attr_callback_list, &attr_cbl, NULL))
+ callback_list_remove(attr_cbl.u.callback_list, cb);
}
struct map *
diff --git a/navit/navigation.h b/navit/navigation.h
index 45c74025c..28faa015c 100644
--- a/navit/navigation.h
+++ b/navit/navigation.h
@@ -27,6 +27,28 @@
#ifdef __cplusplus
extern "C" {
#endif
+
+
+/**
+ * Values for the {@code nav_status} attribute
+ */
+enum nav_status {
+ status_invalid = -2, /*!< Status is unknown. The {@code nav_status} attribute will never return this
+ value but code that listens to changes to this attribute may use this value
+ as a placeholder until the first actual status has been obtained. */
+ status_no_route = -1, /*!< No route was found */
+ status_no_destination = 0, /*!< No destination set, not routing */
+ status_position_wait = 1, /*!< Destination is set but current position is unknown */
+ status_calculating = 2, /*!< A new route is being calculated and turn instructions are being generated */
+ status_recalculating = 3, /*!< The existing route is being recalculated, along with its turn instructions.
+ Note that as the vehicle follows a route, status will flip between
+ {@code status_routing} and {@code status_recalculating} with every position
+ update. */
+ status_routing = 4, /*!< A route with turn instructions has been calculated and the user is being
+ guided along it */
+};
+
+
/* prototypes */
enum attr_type;
enum item_type;
@@ -36,6 +58,7 @@ struct callback;
struct map;
struct navigation;
struct route;
+char *nav_status_to_text(int status);
int navigation_get_attr(struct navigation *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter);
int navigation_set_attr(struct navigation *this_, struct attr *attr);
struct navigation *navigation_new(struct attr *parent, struct attr **attrs);
diff --git a/navit/osd/core/osd_core.c b/navit/osd/core/osd_core.c
index ab522f97f..56bcd2325 100644
--- a/navit/osd/core/osd_core.c
+++ b/navit/osd/core/osd_core.c
@@ -478,7 +478,7 @@ osd_route_guard_new(struct navit *nav, struct osd_methods *meth,
return (struct osd_priv *) opc;
}
-
+
static int odometers_saved = 0;
static GList* odometer_list = NULL;
@@ -1679,6 +1679,173 @@ osd_image_new(struct navit *nav, struct osd_methods *meth,
return NULL;
}
+
+/**
+ * Internal data for {@code navigation_status} OSD.
+ */
+struct navigation_status {
+ char *icon_src; /**< Source for icon, with a placeholder */
+ int icon_h;
+ int icon_w;
+ int last_status; /**< Last status displayed.
+ Apart from the usual values of {@code nav_status}, -2 is used to
+ indicate we have not yet received a status. */
+};
+
+
+/**
+ * @brief Draws a {@code navigation_status} OSD.
+ *
+ * @param opc The OSD to draw
+ * @param status The status of the navigation engine (the value of the {@code nav_status} attribute)
+ */
+static void osd_navigation_status_draw(struct osd_priv_common *opc, int status) {
+ struct navigation_status *this = (struct navigation_status *)opc->data;
+ struct point p;
+ int do_draw = opc->osd_item.do_draw;
+ struct graphics_image *gr_image;
+ char *image;
+
+ /* When we're routing, the status will flip from 4 (routing) to 3 (recalculating) and back on
+ * every position update. This hack prevents unnecessary (and even undesirable) updates.
+ */
+ int status2 = (status == 3) ? 4 : status;
+
+
+ if ((status2 != this->last_status) && (status2 != status_invalid)) {
+ this->last_status = status2;
+ do_draw = 1;
+ }
+
+ if (do_draw) {
+ osd_fill_with_bgcolor(&opc->osd_item);
+ image = g_strdup_printf(this->icon_src, nav_status_to_text(status2));
+ dbg(lvl_debug, "image=%s\n", image);
+ gr_image =
+ graphics_image_new_scaled(opc->osd_item.gr,
+ image, this->icon_w,
+ this->icon_h);
+ if (!gr_image) {
+ dbg(lvl_error,"failed to load %s in %dx%d\n",image,this->icon_w,this->icon_h);
+ g_free(image);
+ image = graphics_icon_path("unknown.png");
+ gr_image =
+ graphics_image_new_scaled(opc->
+ osd_item.gr,
+ image,
+ this->icon_w,
+ this->
+ icon_h);
+ }
+ dbg(lvl_debug, "gr_image=%p\n", gr_image);
+ if (gr_image) {
+ p.x =
+ (opc->osd_item.w -
+ gr_image->width) / 2;
+ p.y =
+ (opc->osd_item.h -
+ gr_image->height) / 2;
+ graphics_draw_image(opc->osd_item.gr,
+ opc->osd_item.
+ graphic_fg_white, &p,
+ gr_image);
+ graphics_image_free(opc->osd_item.gr,
+ gr_image);
+ }
+ g_free(image);
+ graphics_draw_mode(opc->osd_item.gr, draw_mode_end);
+ }
+}
+
+
+/**
+ * @brief Initializes a new {@code navigation_status} OSD.
+ *
+ * This function is registered as a callback function in {@link osd_navigation_status_new(struct navit *, struct osd_methods *, struct attr **)}.
+ * It is called after graphics initialization has finished and can be used for any initialization
+ * tasks which rely on a functional graphics system.
+ *
+ * @param opc The OSD to initialize
+ * @param navit The navit instance
+ */
+static void osd_navigation_status_init(struct osd_priv_common *opc, struct navit *navit) {
+ struct navigation *nav = NULL;
+ struct attr attr;
+
+ dbg(lvl_debug, "enter, opc=%p\n", opc);
+ osd_set_std_graphic(navit, &opc->osd_item, (struct osd_priv *)opc);
+ if (navit)
+ nav = navit_get_navigation(navit);
+ if (nav) {
+ navigation_register_callback(nav, attr_nav_status, callback_new_attr_1(callback_cast(osd_navigation_status_draw), attr_nav_status, opc));
+ if (navigation_get_attr(nav, attr_nav_status, &attr, NULL))
+ osd_navigation_status_draw(opc, attr.u.num);
+ }
+ else
+ dbg(lvl_error, "navigation instance is NULL, OSD will never update\n");
+ //navit_add_callback(nav, callback_new_attr_1(callback_cast(osd_std_click), attr_button, &opc->osd_item)); // FIXME do we need this?
+}
+
+
+/**
+ * @brief Creates a new {@code navigation_status} OSD.
+ *
+ * This initializes the data structures and registers {@link osd_navigation_status_init(struct osd_priv_common *, struct navit *)}
+ * as a callback.
+ *
+ * Note that this function runs before the graphics system has been initialized. Therefore, code
+ * that requires a functional graphics system must be placed in
+ * {@link osd_navigation_status_init(struct osd_priv_common *, struct navit *)}.
+ *
+ * @param nav The navit instance
+ * @param meth The methods for the new OSD
+ * @param attrs The attributes for the new OSD
+ */
+static struct osd_priv *osd_navigation_status_new(struct navit *nav, struct osd_methods *meth, struct attr **attrs) {
+ struct navigation_status *this = g_new0(struct navigation_status, 1);
+ struct osd_priv_common *opc = g_new0(struct osd_priv_common,1);
+ struct attr *attr;
+
+ opc->data = (void*)this;
+ opc->osd_item.rel_x = 20;
+ opc->osd_item.rel_y = -80;
+ opc->osd_item.rel_w = 70;
+ opc->osd_item.navit = nav;
+ opc->osd_item.rel_h = 70;
+ opc->osd_item.font_size = 200; // FIXME may not be needed
+ opc->osd_item.meth.draw = osd_draw_cast(osd_navigation_status_draw);
+ meth->set_attr = set_std_osd_attr;
+ osd_set_std_attr(attrs, &opc->osd_item, 0);
+
+ this->icon_w = -1;
+ this->icon_h = -1;
+ this->last_status = status_invalid;
+
+ attr = attr_search(attrs, NULL, attr_icon_w);
+ if (attr)
+ this->icon_w = attr->u.num;
+
+ attr = attr_search(attrs, NULL, attr_icon_h);
+ if (attr)
+ this->icon_h = attr->u.num;
+
+ attr = attr_search(attrs, NULL, attr_icon_src);
+ if (attr) {
+ struct file_wordexp *we;
+ char **array;
+ we = file_wordexp_new(attr->u.str);
+ array = file_wordexp_get_array(we);
+ this->icon_src = graphics_icon_path(array[0]);
+ file_wordexp_destroy(we);
+ } else {
+ this->icon_src = graphics_icon_path("%s_wh.svg");
+ }
+
+ navit_add_callback(nav, callback_new_attr_1(callback_cast(osd_navigation_status_init), attr_graphics_ready, opc));
+ return (struct osd_priv *) opc;
+}
+
+
struct nav_next_turn {
char *test_text;
char *icon_src;
@@ -3666,4 +3833,5 @@ plugin_init(void)
plugin_register_osd_type("auxmap", osd_auxmap_new);
plugin_register_osd_type("cmd_interface", osd_cmd_interface_new);
plugin_register_osd_type("route_guard", osd_route_guard_new);
+ plugin_register_osd_type("navigation_status", osd_navigation_status_new);
}
diff --git a/navit/xpm/Makefile.am b/navit/xpm/Makefile.am
index 4ed86efbb..2ba0d3a5c 100644
--- a/navit/xpm/Makefile.am
+++ b/navit/xpm/Makefile.am
@@ -184,6 +184,18 @@ svgs += sikh.svg
svgs += skiing.svg
svgs += sport.svg
svgs += stadium.svg
+svgs += status_calculating_bk.svg
+svgs += status_calculating_wh.svg
+svgs += status_no_destination_bk.svg
+svgs += status_no_destination_wh.svg
+svgs += status_no_route_bk.svg
+svgs += status_no_route_wh.svg
+svgs += status_position_wait_bk.svg
+svgs += status_position_wait_wh.svg
+svgs += status_recalculating_bk.svg
+svgs += status_recalculating_wh.svg
+svgs += status_routing_bk.svg
+svgs += status_routing_wh.svg
svgs += swimming.svg
svgs += taoist.svg
svgs += taxi.svg
diff --git a/navit/xpm/status_calculating_bk.svg b/navit/xpm/status_calculating_bk.svg
new file mode 100644
index 000000000..6617ce8d4
--- /dev/null
+++ b/navit/xpm/status_calculating_bk.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_calculating_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10">
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect4838"
+ is_visible="true"
+ pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
+ copytype="single_stretched"
+ prop_scale="1"
+ scale_y_rel="false"
+ spacing="0"
+ normal_offset="0"
+ tang_offset="0"
+ prop_units="false"
+ vertical_pattern="false"
+ fuse_tolerance="0" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-grids="true"
+ inkscape:snap-others="true"
+ inkscape:snap-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0V0z"
+ fill="none"
+ id="path6" />
+ <path
+ style="fill:#000000;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5.5 0 C 4.669 0 4 0.669 4 1.5 C 4 2.331 4.669 3 5.5 3 L 8 3 L 8 10 C 8 12.385139 9.3458567 14.173982 10.585938 15.414062 L 17.085938 21.914062 C 17.84156 22.669687 18 22.968366 18 24 C 18 24.940922 17.809128 25.362748 17.085938 26.085938 L 14.585938 28.585938 L 10.585938 32.585938 C 9.3458567 33.826017 8 35.61486 8 38 L 8 45 L 5.5 45 C 4.669 45 4 45.669 4 46.5 C 4 47.331 4.669 48 5.5 48 L 42.5 48 C 43.331 48 44 47.331 44 46.5 C 44 45.669 43.331 45 42.5 45 L 40 45 L 40 38 C 40 35.61486 38.654145 33.826017 37.414062 32.585938 L 33.414062 28.585938 L 30.914062 26.085938 C 30.190872 25.362748 30 24.940922 30 24 C 30 22.968366 30.15844 22.669687 30.914062 21.914062 L 37.414062 15.414062 C 38.654145 14.173982 40 12.385139 40 10 L 40 3 L 42.5 3 C 43.331 3 44 2.331 44 1.5 C 44 0.669 43.331 0 42.5 0 L 5.5 0 z M 12 3 L 36 3 L 36 10 C 36 10.460018 35.606946 11.292533 35.080078 12 L 12.919922 12 C 12.393054 11.292534 12 10.460018 12 10 L 12 3 z M 22 24 L 22 38 C 22 40 20 42 18 42 L 12 42 L 12 38 C 12 37.403716 12.654143 36.173983 13.414062 35.414062 L 17.414062 31.414062 L 19.914062 28.914062 C 21.190872 27.637252 22 25.884674 22 24 z M 26 24 C 26 25.884674 26.809128 27.637252 28.085938 28.914062 L 30.585938 31.414062 L 34.585938 35.414062 C 35.345855 36.173983 36 37.403716 36 38 L 36 42 L 30 42 C 28 42 26 40 26 38 L 26 24 z "
+ transform="scale(0.5,0.5)"
+ id="rect4780" />
+</svg>
diff --git a/navit/xpm/status_calculating_wh.svg b/navit/xpm/status_calculating_wh.svg
new file mode 100644
index 000000000..fcdf60960
--- /dev/null
+++ b/navit/xpm/status_calculating_wh.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_calculating_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10">
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect4838"
+ is_visible="true"
+ pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
+ copytype="single_stretched"
+ prop_scale="1"
+ scale_y_rel="false"
+ spacing="0"
+ normal_offset="0"
+ tang_offset="0"
+ prop_units="false"
+ vertical_pattern="false"
+ fuse_tolerance="0" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-grids="true"
+ inkscape:snap-others="true"
+ inkscape:snap-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0V0z"
+ fill="none"
+ id="path6" />
+ <path
+ style="fill:#ffffff;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5.5 0 C 4.669 0 4 0.669 4 1.5 C 4 2.331 4.669 3 5.5 3 L 8 3 L 8 10 C 8 12.385139 9.3458567 14.173982 10.585938 15.414062 L 17.085938 21.914062 C 17.84156 22.669687 18 22.968366 18 24 C 18 24.940922 17.809128 25.362748 17.085938 26.085938 L 14.585938 28.585938 L 10.585938 32.585938 C 9.3458567 33.826017 8 35.61486 8 38 L 8 45 L 5.5 45 C 4.669 45 4 45.669 4 46.5 C 4 47.331 4.669 48 5.5 48 L 42.5 48 C 43.331 48 44 47.331 44 46.5 C 44 45.669 43.331 45 42.5 45 L 40 45 L 40 38 C 40 35.61486 38.654145 33.826017 37.414062 32.585938 L 33.414062 28.585938 L 30.914062 26.085938 C 30.190872 25.362748 30 24.940922 30 24 C 30 22.968366 30.15844 22.669687 30.914062 21.914062 L 37.414062 15.414062 C 38.654145 14.173982 40 12.385139 40 10 L 40 3 L 42.5 3 C 43.331 3 44 2.331 44 1.5 C 44 0.669 43.331 0 42.5 0 L 5.5 0 z M 12 3 L 36 3 L 36 10 C 36 10.460018 35.606946 11.292533 35.080078 12 L 12.919922 12 C 12.393054 11.292534 12 10.460018 12 10 L 12 3 z M 22 24 L 22 38 C 22 40 20 42 18 42 L 12 42 L 12 38 C 12 37.403716 12.654143 36.173983 13.414062 35.414062 L 17.414062 31.414062 L 19.914062 28.914062 C 21.190872 27.637252 22 25.884674 22 24 z M 26 24 C 26 25.884674 26.809128 27.637252 28.085938 28.914062 L 30.585938 31.414062 L 34.585938 35.414062 C 35.345855 36.173983 36 37.403716 36 38 L 36 42 L 30 42 C 28 42 26 40 26 38 L 26 24 z "
+ transform="scale(0.5,0.5)"
+ id="rect4780" />
+</svg>
diff --git a/navit/xpm/status_no_destination_bk.svg b/navit/xpm/status_no_destination_bk.svg
new file mode 100644
index 000000000..271af0075
--- /dev/null
+++ b/navit/xpm/status_no_destination_bk.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="64"
+ height="64"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_no_destination_bk.svg">
+ <metadata
+ id="metadata29">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview27"
+ showgrid="true"
+ inkscape:zoom="11.5625"
+ inkscape:cx="32"
+ inkscape:cy="32"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4178" />
+ </sodipodi:namedview>
+ <defs
+ id="defs11">
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="DistanceIn">
+ <g
+ id="g2300">
+ <path
+ d="M 0,0 L 2,0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
+ id="path2306" />
+ <path
+ d="M 0,0 L 13,4 L 9,0 L 13,-4 L 0,0 z "
+ style="fill:#000000;fill-rule:evenodd;stroke:none"
+ id="path2302" />
+ <path
+ d="M 0,-4 L 0,40"
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
+ id="path2304" />
+ </g>
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="SemiCircleOut">
+ <path
+ d="M -2.5,-0.80913858 C -2.5,1.9508614 -4.74,4.1908614 -7.5,4.1908614 L -7.5,-5.8091386 C -4.74,-5.8091386 -2.5,-3.5691386 -2.5,-0.80913858 z "
+ transform="matrix(0.6,0,0,0.6,4.2752958,0.4580676)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+ id="path8204" />
+ </marker>
+ </defs>
+ <path
+ style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 13.181641 3.0214844 L 18 7.8398438 L 18 6.8867188 L 25 8.0820312 L 25 14.388672 L 32 15.623047 L 32 9.2773438 L 39 10.470703 L 39 16.857422 L 46 18.091797 L 46 11.666016 L 52.5 12.775391 L 52.5 19.238281 L 46 18.091797 L 46 25.091797 L 52.5 26.238281 L 52.5 33.238281 L 46 32.091797 L 46 35.839844 L 53.009766 42.849609 L 55.5 43.289062 L 55.5 10.244141 L 13.181641 3.0214844 z M 46 32.091797 L 46 25.091797 L 39 23.857422 L 39 28.839844 L 41.449219 31.289062 L 46 32.091797 z M 39 23.857422 L 39 16.857422 L 32 15.623047 L 32 21.839844 L 32.951172 22.791016 L 39 23.857422 z M 25 14.388672 L 24.453125 14.292969 L 25 14.839844 L 25 14.388672 z M 7.3867188 4 L 4 7.3867188 L 8.5 11.886719 L 8.5 33.744141 L 8.5 35.001953 L 8.5 62 A 1.50015 1.50015 0 1 0 11.5 62 L 11.5 35.53125 L 36.564453 39.951172 L 56.613281 60 L 60 56.613281 L 44.787109 41.400391 L 41.089844 37.703125 L 39 35.613281 L 33.226562 29.839844 L 32 28.613281 L 25 21.613281 L 24.726562 21.339844 L 18 14.613281 L 16.228516 12.841797 L 8.5 5.1132812 L 7.3867188 4 z M 11.5 14.886719 L 16.503906 19.890625 L 11.5 19.007812 L 11.5 14.886719 z M 18 21.386719 L 25 28.386719 L 25 28.388672 L 25.001953 28.388672 L 32 35.386719 L 32 36.099609 L 25 34.865234 L 25 28.388672 L 18 27.154297 L 18 33.630859 L 11.5 32.484375 L 11.5 26.007812 L 18 27.154297 L 18 21.386719 z "
+ id="rect4126" />
+</svg>
diff --git a/navit/xpm/status_no_destination_wh.svg b/navit/xpm/status_no_destination_wh.svg
new file mode 100644
index 000000000..ecad90f6a
--- /dev/null
+++ b/navit/xpm/status_no_destination_wh.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="64"
+ height="64"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_no_destination_wh.svg">
+ <metadata
+ id="metadata29">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview27"
+ showgrid="true"
+ inkscape:zoom="11.5625"
+ inkscape:cx="32"
+ inkscape:cy="32"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4178" />
+ </sodipodi:namedview>
+ <defs
+ id="defs11">
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="DistanceIn">
+ <g
+ id="g2300">
+ <path
+ d="M 0,0 L 2,0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
+ id="path2306" />
+ <path
+ d="M 0,0 L 13,4 L 9,0 L 13,-4 L 0,0 z "
+ style="fill:#000000;fill-rule:evenodd;stroke:none"
+ id="path2302" />
+ <path
+ d="M 0,-4 L 0,40"
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
+ id="path2304" />
+ </g>
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="SemiCircleOut">
+ <path
+ d="M -2.5,-0.80913858 C -2.5,1.9508614 -4.74,4.1908614 -7.5,4.1908614 L -7.5,-5.8091386 C -4.74,-5.8091386 -2.5,-3.5691386 -2.5,-0.80913858 z "
+ transform="matrix(0.6,0,0,0.6,4.2752958,0.4580676)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+ id="path8204" />
+ </marker>
+ </defs>
+ <path
+ style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;fill:#ffffff"
+ d="M 13.181641 3.0214844 L 18 7.8398438 L 18 6.8867188 L 25 8.0820312 L 25 14.388672 L 32 15.623047 L 32 9.2773438 L 39 10.470703 L 39 16.857422 L 46 18.091797 L 46 11.666016 L 52.5 12.775391 L 52.5 19.238281 L 46 18.091797 L 46 25.091797 L 52.5 26.238281 L 52.5 33.238281 L 46 32.091797 L 46 35.839844 L 53.009766 42.849609 L 55.5 43.289062 L 55.5 10.244141 L 13.181641 3.0214844 z M 46 32.091797 L 46 25.091797 L 39 23.857422 L 39 28.839844 L 41.449219 31.289062 L 46 32.091797 z M 39 23.857422 L 39 16.857422 L 32 15.623047 L 32 21.839844 L 32.951172 22.791016 L 39 23.857422 z M 25 14.388672 L 24.453125 14.292969 L 25 14.839844 L 25 14.388672 z M 7.3867188 4 L 4 7.3867188 L 8.5 11.886719 L 8.5 33.744141 L 8.5 35.001953 L 8.5 62 A 1.50015 1.50015 0 1 0 11.5 62 L 11.5 35.53125 L 36.564453 39.951172 L 56.613281 60 L 60 56.613281 L 44.787109 41.400391 L 41.089844 37.703125 L 39 35.613281 L 33.226562 29.839844 L 32 28.613281 L 25 21.613281 L 24.726562 21.339844 L 18 14.613281 L 16.228516 12.841797 L 8.5 5.1132812 L 7.3867188 4 z M 11.5 14.886719 L 16.503906 19.890625 L 11.5 19.007812 L 11.5 14.886719 z M 18 21.386719 L 25 28.386719 L 25 28.388672 L 25.001953 28.388672 L 32 35.386719 L 32 36.099609 L 25 34.865234 L 25 28.388672 L 18 27.154297 L 18 33.630859 L 11.5 32.484375 L 11.5 26.007812 L 18 27.154297 L 18 21.386719 z "
+ id="rect4126" />
+</svg>
diff --git a/navit/xpm/status_no_route_bk.svg b/navit/xpm/status_no_route_bk.svg
new file mode 100644
index 000000000..6862cfdc2
--- /dev/null
+++ b/navit/xpm/status_no_route_bk.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_no_route_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="21.248534"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path4" />
+ <path
+ d="M 12,0 C 5.376,0 0,5.376 0,12 0,18.624 5.376,24 12,24 18.624,24 24,18.624 24,12 24,5.376 18.624,0 12,0 Z M 21,15 3,15 3,9 21,9 Z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssccccc" />
+</svg>
diff --git a/navit/xpm/status_no_route_wh.svg b/navit/xpm/status_no_route_wh.svg
new file mode 100644
index 000000000..7c7544916
--- /dev/null
+++ b/navit/xpm/status_no_route_wh.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_no_route_wh.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="21.248534"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path4" />
+ <path
+ d="M 12,0 C 5.376,0 0,5.376 0,12 0,18.624 5.376,24 12,24 18.624,24 24,18.624 24,12 24,5.376 18.624,0 12,0 Z M 21,15 3,15 3,9 21,9 Z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssccccc"
+ style="fill:#ffffff" />
+</svg>
diff --git a/navit/xpm/status_position_wait_bk.svg b/navit/xpm/status_position_wait_bk.svg
new file mode 100644
index 000000000..9d1b7ca33
--- /dev/null
+++ b/navit/xpm/status_position_wait_bk.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_position_wait_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="12.765499"
+ inkscape:cx="24"
+ inkscape:cy="23.015625"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M 24 0 C 14.712 0 7.1992187 7.5127812 7.1992188 16.800781 C 7.1992188 29.400781 24 48 24 48 C 24 48 40.800781 29.400781 40.800781 16.800781 C 40.800781 7.5127812 33.288 2.3684758e-15 24 0 z M 24 4 C 31.131238 4 36.800781 9.6695427 36.800781 16.800781 C 36.800781 21.323004 33.110977 28.921035 29.085938 34.886719 C 26.543988 38.654253 25.528858 39.652618 24 41.476562 C 22.471142 39.652618 21.456012 38.654253 18.914062 34.886719 C 14.889022 28.921035 11.199219 21.323004 11.199219 16.800781 C 11.199219 9.6695427 16.868761 4 24 4 z "
+ transform="scale(0.5,0.5)"
+ id="path4" />
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path6" />
+</svg>
diff --git a/navit/xpm/status_position_wait_wh.svg b/navit/xpm/status_position_wait_wh.svg
new file mode 100644
index 000000000..8bce336df
--- /dev/null
+++ b/navit/xpm/status_position_wait_wh.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_position_wait_wh.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="12.765499"
+ inkscape:cx="24"
+ inkscape:cy="23.015625"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M 24 0 C 14.712 0 7.1992187 7.5127812 7.1992188 16.800781 C 7.1992188 29.400781 24 48 24 48 C 24 48 40.800781 29.400781 40.800781 16.800781 C 40.800781 7.5127812 33.288 2.3684758e-15 24 0 z M 24 4 C 31.131238 4 36.800781 9.6695427 36.800781 16.800781 C 36.800781 21.323004 33.110977 28.921035 29.085938 34.886719 C 26.543988 38.654253 25.528858 39.652618 24 41.476562 C 22.471142 39.652618 21.456012 38.654253 18.914062 34.886719 C 14.889022 28.921035 11.199219 21.323004 11.199219 16.800781 C 11.199219 9.6695427 16.868761 4 24 4 z "
+ transform="scale(0.5,0.5)"
+ id="path4"
+ style="fill:#ffffff" />
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path6" />
+</svg>
diff --git a/navit/xpm/status_recalculating_bk.svg b/navit/xpm/status_recalculating_bk.svg
new file mode 100644
index 000000000..937937e2b
--- /dev/null
+++ b/navit/xpm/status_recalculating_bk.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_calculating_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10">
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect4838"
+ is_visible="true"
+ pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
+ copytype="single_stretched"
+ prop_scale="1"
+ scale_y_rel="false"
+ spacing="0"
+ normal_offset="0"
+ tang_offset="0"
+ prop_units="false"
+ vertical_pattern="false"
+ fuse_tolerance="0" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-grids="true"
+ inkscape:snap-others="true"
+ inkscape:snap-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0V0z"
+ fill="none"
+ id="path6" />
+ <path
+ style="fill:#000000;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5.5 0 C 4.669 0 4 0.669 4 1.5 C 4 2.331 4.669 3 5.5 3 L 8 3 L 8 10 C 8 12.385139 9.3458567 14.173982 10.585938 15.414062 L 17.085938 21.914062 C 17.84156 22.669687 18 22.968366 18 24 C 18 24.940922 17.809128 25.362748 17.085938 26.085938 L 14.585938 28.585938 L 10.585938 32.585938 C 9.3458567 33.826017 8 35.61486 8 38 L 8 45 L 5.5 45 C 4.669 45 4 45.669 4 46.5 C 4 47.331 4.669 48 5.5 48 L 42.5 48 C 43.331 48 44 47.331 44 46.5 C 44 45.669 43.331 45 42.5 45 L 40 45 L 40 38 C 40 35.61486 38.654145 33.826017 37.414062 32.585938 L 33.414062 28.585938 L 30.914062 26.085938 C 30.190872 25.362748 30 24.940922 30 24 C 30 22.968366 30.15844 22.669687 30.914062 21.914062 L 37.414062 15.414062 C 38.654145 14.173982 40 12.385139 40 10 L 40 3 L 42.5 3 C 43.331 3 44 2.331 44 1.5 C 44 0.669 43.331 0 42.5 0 L 5.5 0 z M 12 3 L 36 3 L 36 10 C 36 10.460018 35.606946 11.292533 35.080078 12 L 12.919922 12 C 12.393054 11.292534 12 10.460018 12 10 L 12 3 z M 22 24 L 22 38 C 22 40 20 42 18 42 L 12 42 L 12 38 C 12 37.403716 12.654143 36.173983 13.414062 35.414062 L 17.414062 31.414062 L 19.914062 28.914062 C 21.190872 27.637252 22 25.884674 22 24 z M 26 24 C 26 25.884674 26.809128 27.637252 28.085938 28.914062 L 30.585938 31.414062 L 34.585938 35.414062 C 35.345855 36.173983 36 37.403716 36 38 L 36 42 L 30 42 C 28 42 26 40 26 38 L 26 24 z "
+ transform="scale(0.5,0.5)"
+ id="rect4780" />
+</svg>
diff --git a/navit/xpm/status_recalculating_wh.svg b/navit/xpm/status_recalculating_wh.svg
new file mode 100644
index 000000000..728055baa
--- /dev/null
+++ b/navit/xpm/status_recalculating_wh.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_recalculating_wh.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10">
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect4838"
+ is_visible="true"
+ pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
+ copytype="single_stretched"
+ prop_scale="1"
+ scale_y_rel="false"
+ spacing="0"
+ normal_offset="0"
+ tang_offset="0"
+ prop_units="false"
+ vertical_pattern="false"
+ fuse_tolerance="0" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="14.27027"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2"
+ inkscape:snap-grids="true"
+ inkscape:snap-others="true"
+ inkscape:snap-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0V0z"
+ fill="none"
+ id="path6" />
+ <path
+ style="fill:#ffffff;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5.5 0 C 4.669 0 4 0.669 4 1.5 C 4 2.331 4.669 3 5.5 3 L 8 3 L 8 10 C 8 12.385139 9.3458567 14.173982 10.585938 15.414062 L 17.085938 21.914062 C 17.84156 22.669687 18 22.968366 18 24 C 18 24.940922 17.809128 25.362748 17.085938 26.085938 L 14.585938 28.585938 L 10.585938 32.585938 C 9.3458567 33.826017 8 35.61486 8 38 L 8 45 L 5.5 45 C 4.669 45 4 45.669 4 46.5 C 4 47.331 4.669 48 5.5 48 L 42.5 48 C 43.331 48 44 47.331 44 46.5 C 44 45.669 43.331 45 42.5 45 L 40 45 L 40 38 C 40 35.61486 38.654145 33.826017 37.414062 32.585938 L 33.414062 28.585938 L 30.914062 26.085938 C 30.190872 25.362748 30 24.940922 30 24 C 30 22.968366 30.15844 22.669687 30.914062 21.914062 L 37.414062 15.414062 C 38.654145 14.173982 40 12.385139 40 10 L 40 3 L 42.5 3 C 43.331 3 44 2.331 44 1.5 C 44 0.669 43.331 0 42.5 0 L 5.5 0 z M 12 3 L 36 3 L 36 10 C 36 10.460018 35.606946 11.292533 35.080078 12 L 12.919922 12 C 12.393054 11.292534 12 10.460018 12 10 L 12 3 z M 22 24 L 22 38 C 22 40 20 42 18 42 L 12 42 L 12 38 C 12 37.403716 12.654143 36.173983 13.414062 35.414062 L 17.414062 31.414062 L 19.914062 28.914062 C 21.190872 27.637252 22 25.884674 22 24 z M 26 24 C 26 25.884674 26.809128 27.637252 28.085938 28.914062 L 30.585938 31.414062 L 34.585938 35.414062 C 35.345855 36.173983 36 37.403716 36 38 L 36 42 L 30 42 C 28 42 26 40 26 38 L 26 24 z "
+ transform="scale(0.5,0.5)"
+ id="rect4780" />
+</svg>
diff --git a/navit/xpm/status_routing_bk.svg b/navit/xpm/status_routing_bk.svg
new file mode 100644
index 000000000..307b26434
--- /dev/null
+++ b/navit/xpm/status_routing_bk.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_routing_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path4" />
+ <path
+ d="M 12,0 2.9210526,22.140526 3.7805263,23 12,19.368421 20.219474,23 21.078947,22.140526 Z"
+ id="path6"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/navit/xpm/status_routing_wh.svg b/navit/xpm/status_routing_wh.svg
new file mode 100644
index 000000000..32cfecd7b
--- /dev/null
+++ b/navit/xpm/status_routing_wh.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ fill="#000000"
+ height="48"
+ viewBox="0 0 24 24"
+ width="48"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="status_routing_bk.svg">
+ <metadata
+ id="metadata12">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs10" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="948"
+ id="namedview8"
+ showgrid="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:zoom="15.416667"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4140" />
+ </sodipodi:namedview>
+ <path
+ d="M0 0h24v24H0z"
+ fill="none"
+ id="path4" />
+ <path
+ d="M 12,0 2.9210526,22.140526 3.7805263,23 12,19.368421 20.219474,23 21.078947,22.140526 Z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" />
+</svg>
diff --git a/navit/xslt/osd_minimum.xslt b/navit/xslt/osd_minimum.xslt
index 8d39255c5..cda88dc88 100644
--- a/navit/xslt/osd_minimum.xslt
+++ b/navit/xslt/osd_minimum.xslt
@@ -4,13 +4,15 @@
<xsl:param name="NEXT_TURN_SIZE"><xsl:value-of select="round(12*number($OSD_SIZE)+number($ICON_BIG))"/></xsl:param>
<xsl:param name="NEXT_TURN_TEXT_HIGHT"><xsl:value-of select="round(20*number($OSD_SIZE))"/></xsl:param>
- <osd type="compass" enabled="yes" x="{round(-60*number($OSD_SIZE))}" y="{round(-80*number($OSD_SIZE))}" w="{round(60*number($OSD_SIZE))}" h="{round(80*number($OSD_SIZE))}" font_size="{round(200*number($OSD_SIZE))}" osd_configuration="1"/>
+ <osd type="compass" enabled="yes" x="{round(-60*number($OSD_SIZE))}" y="{round(-80*number($OSD_SIZE))}" w="{round(60*number($OSD_SIZE))}" h="{round(80*number($OSD_SIZE))}" font_size="{round(200*number($OSD_SIZE))}" enable_expression="vehicle.position_valid"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="text" label="${{navigation.item.destination_length[named]}}\n${{navigation.item.destination_time[arrival]}}" x="{round(-60*number($OSD_SIZE))}" y="0" w="{round(60*number($OSD_SIZE))}" h="{round(40*number($OSD_SIZE))}" font_size="{round(200*number($OSD_SIZE))}" osd_configuration="1"/>
+ <osd type="text" label="${{navigation.item.destination_length[named]}}\n${{navigation.item.destination_time[arrival]}}" x="{round(-60*number($OSD_SIZE))}" y="0" w="{round(60*number($OSD_SIZE))}" h="{round(40*number($OSD_SIZE))}" font_size="{round(200*number($OSD_SIZE))}" enable_expression="navigation.nav_status>=3"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="navigation_next_turn" x="0" y="{-($NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT)}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_SIZE}" icon_src="%s_wh_{$ICON_BIG}_{$ICON_BIG}.png" osd_configuration="1"/>
+ <osd type="navigation_status" x="0" y="{-($NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT)}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" icon_src="%s_wh_{$ICON_BIG}_{$ICON_BIG}.png" enable_expression="navigation.nav_status==-1 || navigation.nav_status==1 || navigation.nav_status==2"/>
<xsl:text>&#x0A; </xsl:text>
- <osd type="text" label="${{navigation.item[1].length[named]}}" x="0" y="{-$NEXT_TURN_TEXT_HIGHT}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_TEXT_HIGHT}" font_size="{round(200*number($OSD_SIZE))}" osd_configuration="1"/>
+ <osd type="navigation_next_turn" x="0" y="{-($NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT)}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_SIZE}" icon_src="%s_wh_{$ICON_BIG}_{$ICON_BIG}.png" enable_expression="navigation.nav_status>=3"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <osd type="text" label="${{navigation.item[1].length[named]}}" x="0" y="{-$NEXT_TURN_TEXT_HIGHT}" w="{$NEXT_TURN_SIZE+$NEXT_TURN_TEXT_HIGHT}" h="{$NEXT_TURN_TEXT_HIGHT}" font_size="{round(200*number($OSD_SIZE))}" enable_expression="navigation.nav_status>=3"/>
<xsl:text>&#x0A; </xsl:text>
<osd type="button" src="gui_zoom_in_{number($ICON_BIG)}_{number($ICON_BIG)}.png" command="zoom_in()" x="0" y="0" osd_configuration="1"/>
<xsl:text>&#x0A; </xsl:text>