summaryrefslogtreecommitdiff
path: root/navit/osd
diff options
context:
space:
mode:
authortegzed <tegzed@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-10-23 12:06:53 +0000
committertegzed <tegzed@ffa7fe5e-494d-0410-b361-a75ebd5db220>2011-10-23 12:06:53 +0000
commitf8e8b3b6a5b2ca9287a59cc7b7f65a9ac3da1e1a (patch)
treef51374d937e2a5f1541efe3f337b149b3e8b3e50 /navit/osd
parentecbfe4058314b074c216d4bab0eb2931c5d8b810 (diff)
downloadnavit-svn-f8e8b3b6a5b2ca9287a59cc7b7f65a9ac3da1e1a.tar.gz
add:osd/core:-added support to display max speed in odometer
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4842 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/osd')
-rw-r--r--navit/osd/core/osd_core.c48
1 files changed, 34 insertions, 14 deletions
diff --git a/navit/osd/core/osd_core.c b/navit/osd/core/osd_core.c
index 8c31bd1d..ae99a273 100644
--- a/navit/osd/core/osd_core.c
+++ b/navit/osd/core/osd_core.c
@@ -511,6 +511,7 @@ struct odometer {
double last_update_time; //time of last position update
struct coord last_coord;
double last_speed;
+ double max_speed;
double acceleration;
};
@@ -558,7 +559,7 @@ str_replace(char*output, char*input, char*pattern, char*replacement)
*/
static char *osd_odometer_to_string(struct odometer *this_)
{
- return g_strdup_printf("odometer %s %lf %lf %d\n",this_->name,this_->sum_dist,this_->time_all,this_->bActive);
+ return g_strdup_printf("odometer %s %lf %lf %d %lf\n",this_->name,this_->sum_dist,this_->time_all,this_->bActive,this_->max_speed);
}
/*
@@ -571,6 +572,7 @@ static void osd_odometer_from_string(struct odometer *this_, char*str)
char* sum_dist_str;
char* sum_time_str;
char* active_str;
+ char* max_spd_str;
tok = strtok(str, " ");
if( !tok || strcmp("odometer",tok)) {
return;
@@ -597,14 +599,25 @@ static void osd_odometer_from_string(struct odometer *this_, char*str)
g_free(sum_time_str);
return;
}
+ max_spd_str = g_strdup(strtok(NULL, " "));
+ if(!max_spd_str) {
+ g_free(name_str);
+ g_free(sum_dist_str);
+ g_free(sum_time_str);
+ g_free(active_str);
+ return;
+ }
+
this_->name = name_str;
this_->sum_dist = atof(sum_dist_str);
this_->sum_time = atof(sum_time_str);
this_->bActive = atoi(active_str);
+ this_->max_speed = atof(max_spd_str);
this_->last_coord.x = -1;
g_free(active_str);
g_free(sum_dist_str);
g_free(sum_time_str);
+ g_free(max_spd_str);
}
static void draw_multiline_osd_text(char *buffer,struct osd_item *osd_item, struct graphics_gc *curr_color)
@@ -645,6 +658,7 @@ static void osd_odometer_draw(struct osd_priv_common *opc, struct navit *nav, st
char *dist_buffer=0;
char *spd_buffer=0;
+ char *max_spd_buffer=0;
char *time_buffer = 0;
char *acc_buffer = 0;
struct attr position_attr,vehicle_attr,imperial_attr,speed_attr;
@@ -700,6 +714,7 @@ static void osd_odometer_draw(struct osd_priv_common *opc, struct navit *nav, st
}
this->time_all = curr_time-this->last_click_time+this->sum_time;
spd = 3.6*(double)this->sum_dist/(double)this->time_all;
+ this->max_speed = (spd<=this->max_speed) ? this->max_speed : spd;
if(dt != 0) {
if (curr_coord.x!=this->last_coord.x || curr_coord.y!=this->last_coord.y) {
if(vehicle_get_attr(curr_vehicle, attr_position_speed,&speed_attr, NULL)) {
@@ -718,6 +733,7 @@ static void osd_odometer_draw(struct osd_priv_common *opc, struct navit *nav, st
dist_buffer = format_distance(this->sum_dist,"",imperial);
spd_buffer = format_speed(spd,"","value",imperial);
+ max_spd_buffer = format_speed(this->max_speed,"","value",imperial);
acc_buffer = g_strdup_printf("%.3f m/s2",this->acceleration);
remainder = (int)this->time_all;
days = remainder / (24*60*60);
@@ -737,10 +753,11 @@ static void osd_odometer_draw(struct osd_priv_common *opc, struct navit *nav, st
buffer [0] = 0;
buffer2[0] = 0;
if(this->text) {
- str_replace(buffer2,this->text,"${avg_spd}",spd_buffer);
- str_replace(buffer,buffer2,"${distance}",dist_buffer);
- str_replace(buffer2,buffer,"${time}",time_buffer);
- str_replace(buffer,buffer2,"${acceleration}",acc_buffer);
+ str_replace(buffer,this->text,"${avg_spd}",spd_buffer);
+ str_replace(buffer2,buffer,"${distance}",dist_buffer);
+ str_replace(buffer,buffer2,"${time}",time_buffer);
+ str_replace(buffer2,buffer,"${acceleration}",acc_buffer);
+ str_replace(buffer,buffer2,"${max_spd}",max_spd_buffer);
}
g_free(time_buffer);
@@ -749,6 +766,7 @@ static void osd_odometer_draw(struct osd_priv_common *opc, struct navit *nav, st
g_free(dist_buffer);
g_free(spd_buffer);
+ g_free(max_spd_buffer);
g_free(acc_buffer);
graphics_draw_mode(opc->osd_item.gr, draw_mode_end);
}
@@ -760,12 +778,13 @@ osd_odometer_reset(struct osd_priv_common *opc)
struct odometer *this = (struct odometer *)opc->data;
if(!this->bDisableReset) {
- this->bActive = 0;
- this->sum_dist = 0;
- this->sum_time = 0;
+ this->bActive = 0;
+ this->sum_dist = 0;
+ this->sum_time = 0;
+ this->max_speed = 0;
this->last_start_time = 0;
- this->last_coord.x = -1;
- this->last_coord.y = -1;
+ this->last_coord.x = -1;
+ this->last_coord.y = -1;
}
}
@@ -899,11 +918,12 @@ osd_odometer_new(struct navit *nav, struct osd_methods *meth,
opc->osd_item.meth.draw = osd_draw_cast(osd_odometer_draw);
meth->set_attr = (void (*)(struct osd_priv *osd, struct attr* attr))set_std_osd_attr;
- this->bActive = 0; //do not count on init
- this->sum_dist = 0;
+ this->bActive = 0; //do not count on init
+ this->sum_dist = 0;
+ this->max_speed = 0;
this->last_click_time = time(0);
- this->last_coord.x = -1;
- this->last_coord.y = -1;
+ this->last_coord.x = -1;
+ this->last_coord.y = -1;
attr = attr_search(attrs, NULL, attr_label);
//FIXME find some way to free text!!!!