12 #include "transform.h"
14 #include "navigation.h"
17 #include "statusbar.h"
19 struct statusbar_priv {
26 struct callback *vehicle_cb;
31 statusbar_destroy(struct statusbar_priv *this)
37 statusbar_gps_update(struct statusbar_priv *this, int sats, int qual, double lng, double lat, double height, double direction, double speed)
41 char *dirs[]={"N","NO","O","SO","S","SW","W","NW","N"};
54 dir_idx=(direction+22.5)/45;
56 sprintf(this->gps_text,"GPS %2d/%1d %02.0f%07.4f%c %03.0f%07.4f%c %4.0fm %3.0f°%-2s %3.0fkm/h", sats, qual, floor(lat), fmod(lat*60,60), lat_c, floor(lng), fmod(lng*60,60), lng_c, height, direction, dir, speed);
57 utf8=g_locale_to_utf8(this->gps_text,-1,NULL,NULL,NULL);
58 gtk_label_set_text(GTK_LABEL(this->gps), utf8);
64 statusbar_route_update(struct statusbar_priv *this, struct navit *nav, struct vehicle *v)
66 struct navigation *navig;
67 struct navigation_list *list;
75 double lng, lat, direction=0, height=0, speed=0;
79 char *dirs[]={"N","NO","O","SO","S","SW","W","NW","N"};
83 navig=navit_get_navigation(nav);
86 list=navigation_list_new(navig);
89 item=navigation_list_get_item(list);
92 if (!item_attr_get(item, attr_destination_length, &attr))
95 if (!item_attr_get(item, attr_destination_time, &attr))
97 eta=time(NULL)+attr.u.num/10;
98 eta_tm=localtime(&eta);
99 navigation_list_destroy(list);
100 sprintf(buffer,"Route %4.0fkm %02d:%02d ETA",route_len/1000, eta_tm->tm_hour, eta_tm->tm_min);
101 if (strcmp(buffer, this->route_text)) {
102 strcpy(this->route_text, buffer);
103 gtk_label_set_text(GTK_LABEL(this->route), this->route_text);
105 if (!vehicle_position_attr_get(v, attr_position_coord_geo, &attr))
107 lng=attr.u.coord_geo->lng;
108 lat=attr.u.coord_geo->lat;
117 if (vehicle_position_attr_get(v, attr_position_direction, &attr))
118 direction=*(attr.u.numd);
119 dir_idx=(direction+22.5)/45;
121 if (vehicle_position_attr_get(v, attr_position_height, &attr))
122 height=*(attr.u.numd);
123 if (vehicle_position_attr_get(v, attr_position_speed, &attr))
124 speed=*(attr.u.numd);
125 if (vehicle_position_attr_get(v, attr_position_sats_used, &attr))
127 if (vehicle_position_attr_get(v, attr_position_qual, &attr))
129 sprintf(this->gps_text,"GPS %2d/%1d %02.0f%07.4f%c %03.0f%07.4f%c %4.0fm %3.0f°%-2s %3.0fkm/h", sats, qual, floor(lat), fmod(lat*60,60), lat_c, floor(lng), fmod(lng*60,60), lng_c, height, direction, dir, speed);
130 utf8=g_locale_to_utf8(this->gps_text,-1,NULL,NULL,NULL);
131 gtk_label_set_text(GTK_LABEL(this->gps), utf8);
135 static struct statusbar_methods methods = {
139 struct statusbar_priv *
140 gui_gtk_statusbar_new(struct gui_priv *gui, struct statusbar_methods *meth)
142 struct statusbar_priv *this=g_new0(struct statusbar_priv, 1);
148 this->hbox=gtk_hbox_new(FALSE, 1);
149 utf8=g_locale_to_utf8("GPS 00/0 0000.0000N 00000.0000E 0000m 000°NO 000km/h",-1,NULL,NULL,NULL);
150 this->gps=gtk_label_new(utf8);
152 gtk_label_set_justify(GTK_LABEL(this->gps), GTK_JUSTIFY_LEFT);
153 this->route=gtk_label_new("Route 0000km 0+00:00 ETA");
154 gtk_label_set_justify(GTK_LABEL(this->route), GTK_JUSTIFY_LEFT);
155 gtk_box_pack_start(GTK_BOX(this->hbox), this->gps, TRUE, TRUE, 2);
156 gtk_box_pack_start(GTK_BOX(this->hbox), gtk_vseparator_new(), TRUE, TRUE, 2);
157 gtk_box_pack_start(GTK_BOX(this->hbox), this->route, TRUE, TRUE, 2);
158 GTK_WIDGET_UNSET_FLAGS (this->hbox, GTK_CAN_FOCUS);
160 gtk_box_pack_end(GTK_BOX(gui->vbox), this->hbox, FALSE, FALSE, 0);
161 gtk_widget_show_all(this->hbox);
162 this->vehicle_cb=callback_new_1(callback_cast(statusbar_route_update), this);
163 navit_add_vehicle_cb(gui->nav, this->vehicle_cb);