diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2011-02-10 21:12:13 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2011-02-10 21:12:13 +0000 |
commit | 4728f07b1a8f9c01a1ff52a08925bfaf5e0550b3 (patch) | |
tree | 3ecdde37b48d99eaa794827844c64fe792791c17 | |
parent | 52be2ca7c97c5f28d7a758c118c1a6d55205b7e8 (diff) | |
download | navit-4728f07b1a8f9c01a1ff52a08925bfaf5e0550b3.tar.gz |
Add:Core:Imperial measurements
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4126 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r-- | navit/attr_def.h | 1 | ||||
-rw-r--r-- | navit/navigation.c | 63 | ||||
-rw-r--r-- | navit/navigation.h | 3 | ||||
-rw-r--r-- | navit/navit.c | 8 |
4 files changed, 58 insertions, 17 deletions
diff --git a/navit/attr_def.h b/navit/attr_def.h index 69ee95eaa..2022d5b28 100644 --- a/navit/attr_def.h +++ b/navit/attr_def.h @@ -168,6 +168,7 @@ ATTR(autosave_period) ATTR(tec_type) ATTR(tec_dirtype) ATTR(tec_direction) +ATTR(imperial) ATTR2(0x00027500,type_rel_abs_begin) /* These attributes are int that can either hold relative * * or absolute values. A relative value is indicated by * diff --git a/navit/navigation.c b/navit/navigation.c index 6050b58c9..6e66b5d26 100644 --- a/navit/navigation.c +++ b/navit/navigation.c @@ -398,38 +398,67 @@ vocabulary_last(int vocabulary) static char * get_distance(struct navigation *nav, int dist, enum attr_type type, int is_length) { - int vocabulary=65535; + int imperial=0,vocabulary=65535; struct attr attr; - + if (type == attr_navigation_long) { if (is_length) return g_strdup_printf(_("%d m"), dist); else return g_strdup_printf(_("in %d m"), dist); } + if (navit_get_attr(nav->navit, attr_imperial, &attr, NULL)) + imperial=attr.u.num; if (nav->speech && speech_get_attr(nav->speech, attr_vocabulary_distances, &attr, NULL)) vocabulary=attr.u.num; - if (dist < vocabulary_last(vocabulary)) { - dist=round_for_vocabulary(vocabulary, dist, 1); - if (is_length) - return g_strdup_printf(_("%d meters"), dist); - else - return g_strdup_printf(_("in %d meters"), dist); + if (imperial) { + if (dist*FEET_PER_METER < vocabulary_last(vocabulary)) { + dist=round_for_vocabulary(vocabulary, dist*FEET_PER_METER, 1); + if (is_length) + return g_strdup_printf(_("%d feet"), dist); + else + return g_strdup_printf(_("in %d feet"), dist); + } + } else { + if (dist < vocabulary_last(vocabulary)) { + dist=round_for_vocabulary(vocabulary, dist, 1); + if (is_length) + return g_strdup_printf(_("%d meters"), dist); + else + return g_strdup_printf(_("in %d meters"), dist); + } } - dist=round_for_vocabulary(vocabulary, dist, 1000); + if (imperial) + dist=round_for_vocabulary(vocabulary, dist*FEET_PER_METER*1000/FEET_PER_MILE, 1000); + else + dist=round_for_vocabulary(vocabulary, dist, 1000); if (dist < 5000) { int rem=(dist/100)%10; if (rem) { - if (is_length) - return g_strdup_printf(_("%d.%d kilometers"), dist/1000, rem); - else - return g_strdup_printf(_("in %d.%d kilometers"), dist/1000, rem); + if (imperial) { + if (is_length) + return g_strdup_printf(_("%d.%d miles"), dist/1000, rem); + else + return g_strdup_printf(_("in %d.%d miles"), dist/1000, rem); + } else { + if (is_length) + return g_strdup_printf(_("%d.%d kilometers"), dist/1000, rem); + else + return g_strdup_printf(_("in %d.%d kilometers"), dist/1000, rem); + } } } - if (is_length) - return g_strdup_printf(ngettext("one kilometer","%d kilometers", dist/1000), dist/1000); - else - return g_strdup_printf(ngettext("in one kilometer","in %d kilometers", dist/1000), dist/1000); + if (imperial) { + if (is_length) + return g_strdup_printf(ngettext("one mile","%d miles", dist/1000), dist/1000); + else + return g_strdup_printf(ngettext("in one mile","in %d miles", dist/1000), dist/1000); + } else { + if (is_length) + return g_strdup_printf(ngettext("one kilometer","%d kilometers", dist/1000), dist/1000); + else + return g_strdup_printf(ngettext("in one kilometer","in %d kilometers", dist/1000), dist/1000); + } } diff --git a/navit/navigation.h b/navit/navigation.h index 3d5fd69d7..528678e29 100644 --- a/navit/navigation.h +++ b/navit/navigation.h @@ -20,6 +20,9 @@ #ifndef NAVIT_NAVIGATION_H #define NAVIT_NAVIGATION_H +#define FEET_PER_METER 3.2808399 +#define FEET_PER_MILE 5280 + #ifdef __cplusplus extern "C" { #endif diff --git a/navit/navit.c b/navit/navit.c index d855b1b3b..de342bb86 100644 --- a/navit/navit.c +++ b/navit/navit.c @@ -147,6 +147,7 @@ struct navit { /* 1=No graphics ok */ /* 2=No gui ok */ int border; + int imperial; }; struct gui *main_loop_gui; @@ -2029,6 +2030,10 @@ navit_set_attr_do(struct navit *this_, struct attr *attr, int init) attr_updated=(this_->follow_cursor != !!attr->u.num); this_->follow_cursor=!!attr->u.num; break; + case attr_imperial: + attr_updated=(this_->imperial != attr->u.num); + this_->imperial=attr->u.num; + break; default: return 0; } @@ -2081,6 +2086,9 @@ navit_get_attr(struct navit *this_, enum attr_type type, struct attr *attr, stru attr->u.str[len] = '\0'; break; + case attr_imperial: + attr->u.num=this_->imperial; + break; case attr_bookmark_map: attr->u.map=bookmarks_get_map(this_->bookmarks); break; |