Add:Core:Imperial measurements
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Thu, 10 Feb 2011 21:12:13 +0000 (21:12 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Thu, 10 Feb 2011 21:12:13 +0000 (21:12 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4126 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/attr_def.h
navit/navit/navigation.c
navit/navit/navigation.h
navit/navit/navit.c

index 69ee95e..2022d5b 100644 (file)
@@ -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                *
index 6050b58..6e66b5d 100644 (file)
@@ -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);
+       }
 }
 
 
index 3d5fd69..528678e 100644 (file)
@@ -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
index d855b1b..de342bb 100644 (file)
@@ -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;