summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-02-10 21:12:13 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-02-10 21:12:13 +0000
commit4728f07b1a8f9c01a1ff52a08925bfaf5e0550b3 (patch)
tree3ecdde37b48d99eaa794827844c64fe792791c17
parent52be2ca7c97c5f28d7a758c118c1a6d55205b7e8 (diff)
downloadnavit-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.h1
-rw-r--r--navit/navigation.c63
-rw-r--r--navit/navigation.h3
-rw-r--r--navit/navit.c8
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;