2 * This file is part of mapper
4 * Copyright (C) 2007 Kaj-Michael Lang
5 * Copyright (C) 2006-2007 John Costigan.
7 * POI and GPS-Info code originally written by Cezary Jackiewicz.
9 * Default map data provided by http://www.openstreetmap.org/
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
36 #include <glib/gstdio.h>
44 #include "mapper-types.h"
45 #include "ui-common.h"
49 #include "gps-panels.h"
51 #include "gtkcompass.h"
53 static GtkWidget *text_lat;
54 static GtkWidget *text_lon;
55 static GtkWidget *text_speed;
56 static GtkWidget *text_alt;
57 static GtkWidget *text_dop;
58 static GtkWidget *text_time;
60 static void gps_clear_text_fields(void);
67 vbox = gtk_vbox_new(FALSE, 0);
69 text_time = gtk_label_new(NULL);
70 gtk_widget_set_size_request(GTK_WIDGET(text_time), -1, 30);
71 gtk_box_pack_start(GTK_BOX(vbox), text_time, FALSE, TRUE, 0);
73 text_lat = gtk_label_new(NULL);
74 gtk_widget_set_size_request(GTK_WIDGET(text_lat), -1, 30);
75 gtk_box_pack_start(GTK_BOX(vbox), text_lat, FALSE, TRUE, 0);
77 text_lon = gtk_label_new(NULL);
78 gtk_widget_set_size_request(GTK_WIDGET(text_lon), -1, 30);
79 gtk_box_pack_start(GTK_BOX(vbox), text_lon, FALSE, TRUE, 0);
81 text_speed = gtk_label_new(NULL);
82 gtk_widget_set_size_request(GTK_WIDGET(text_speed), -1, 30);
83 gtk_box_pack_start(GTK_BOX(vbox), text_speed, FALSE, TRUE, 0);
85 text_alt = gtk_label_new(NULL);
86 gtk_widget_set_size_request(GTK_WIDGET(text_alt), -1, 30);
87 gtk_box_pack_start(GTK_BOX(vbox), text_alt, FALSE, TRUE, 0);
89 text_dop = gtk_label_new(NULL);
90 gtk_widget_set_size_request(GTK_WIDGET(text_dop), -1, 30);
91 gtk_box_pack_start(GTK_BOX(vbox), text_dop, FALSE, TRUE, 0);
93 _gps_signal=gtk_gps_new(GTK_GPS_MODE_SKY, &_gps->data);
94 gtk_widget_set_size_request(_gps_signal, -1, 100);
95 gtk_box_pack_start(GTK_BOX(vbox), _gps_signal, TRUE, TRUE, 0);
97 _gps_compass = gtk_compass_new(&_gps->data);
98 gtk_widget_set_size_request(_gps_compass, -1, 100);
99 gtk_box_pack_start(GTK_BOX(vbox), _gps_compass, TRUE, TRUE, 0);
101 gps_clear_text_fields();
107 gps_display_data_speed(GtkWidget *widget, gfloat s)
110 gfloat speed = s * UNITS_CONVERT[_units];
114 g_snprintf(buffer, 32, "%.1f mph", speed);
117 g_snprintf(buffer, 32, "%.1f kn", speed);
120 g_snprintf(buffer, 32, "%.1f km/h", speed);
124 gtk_label_set_label(GTK_LABEL(widget), buffer);
128 gps_clear_text_fields(void)
130 gtk_label_set_label(GTK_LABEL(text_lat), " --- ");
131 gtk_label_set_label(GTK_LABEL(text_lon), " --- ");
132 gtk_label_set_label(GTK_LABEL(text_speed), " --- ");
133 gtk_label_set_label(GTK_LABEL(text_alt), " --- ");
134 gtk_label_set_label(GTK_LABEL(text_dop), " --- ");
138 gps_display_data(GpsData *gps)
143 strftime(buffer, 15, "%X", localtime(&gps->time));
144 gtk_label_set_label(GTK_LABEL(text_time), buffer);
146 if (gps->fix==FIX_NOFIX) {
148 gps_clear_text_fields();
153 lat_format(_degformat, gps->lat, buffer);
154 gtk_label_set_label(GTK_LABEL(text_lat), buffer);
157 lon_format(_degformat, gps->lon, buffer);
158 gtk_label_set_label(GTK_LABEL(text_lon), buffer);
161 gps_display_data_speed(text_speed, gps->speed);
167 g_snprintf(buffer, 32, "Alt: %.1f ft", gps->altitude * 3.2808399f);
170 g_snprintf(buffer, 32, "Alt: %.1f m", gps->altitude);
172 gtk_label_set_label(GTK_LABEL(text_alt), buffer);
175 g_snprintf(buffer, 32, "%.1f/%.1f/%.1f", gps->hdop, gps->vdop, gps->pdop);
176 gtk_label_set_label(GTK_LABEL(text_dop), buffer);
180 gps_show_info(GpsData *gps)
182 if (_gps_info && _enable_gps)
183 gtk_widget_show_all(GTK_WIDGET(_gps_widget));
185 gtk_widget_hide_all(GTK_WIDGET(_gps_widget));
190 gps_display_details(GpsData *gps)
194 if (gps->fix==FIX_NOFIX) {
196 gtk_label_set_label(GTK_LABEL(_sdi_lat), " --- ");
197 gtk_label_set_label(GTK_LABEL(_sdi_lon), " --- ");
198 gtk_label_set_label(GTK_LABEL(_sdi_spd), " --- ");
199 gtk_label_set_label(GTK_LABEL(_sdi_alt), " --- ");
200 gtk_label_set_label(GTK_LABEL(_sdi_hea), " --- ");
201 gtk_label_set_label(GTK_LABEL(_sdi_tim), " --:--:-- ");
204 lat_format(_degformat, gps->lat, buffer);
205 gtk_label_set_label(GTK_LABEL(_sdi_lat), buffer);
208 lon_format(_degformat, gps->lon, buffer);
209 gtk_label_set_label(GTK_LABEL(_sdi_lon), buffer);
212 gps_display_data_speed(_sdi_spd, gps->speed);
218 g_snprintf(buffer, 32, "%.1f ft", gps->altitude * 3.2808399f);
221 g_snprintf(buffer, 32, "%.1f m", gps->altitude);
224 gtk_label_set_label(GTK_LABEL(_sdi_alt), buffer);
227 g_snprintf(buffer, 32, "%0.0f° (%0.0f)", gps->heading, fabs(gps->heading-gps->lheading));
228 gtk_label_set_label(GTK_LABEL(_sdi_hea), buffer);
231 strftime(buffer, 15, "%X", localtime(&gps->time));
232 gtk_label_set_label(GTK_LABEL(_sdi_tim), buffer);
236 g_snprintf(buffer, 32, "%d", gps->satinview);
237 gtk_label_set_label(GTK_LABEL(_sdi_vie), buffer);
240 g_snprintf(buffer, 32, "%d", gps->satinuse);
241 gtk_label_set_label(GTK_LABEL(_sdi_use), buffer);
247 g_snprintf(buffer, 32, "%dD fix", gps->fix);
250 g_snprintf(buffer, 32, "nofix");
253 gtk_label_set_label(GTK_LABEL(_sdi_fix), buffer);
255 if (gps->fix ==FIX_NOFIX)
256 g_snprintf(buffer, 32, "none");
258 switch (gps->fixquality) {
260 g_strlcat(buffer,_("SPS"),32);
263 g_strlcat(buffer,_("DGPS"),32);
266 g_strlcat(buffer,_("PPS"),32);
269 g_strlcat(buffer,_("Real Time Kinematic"),32);
272 g_strlcat(buffer,_("Float RTK"),32);
275 g_strlcat(buffer,_("Estimated"),32);
278 g_strlcat(buffer,_("Manual"),32);
281 g_strlcat(buffer,_("Simulation"),32);
284 g_strlcat(buffer,_("none"),32);
288 gtk_label_set_label(GTK_LABEL(_sdi_fqu), buffer);
291 gps_display_data_speed(_sdi_msp, gps->maxspeed);