8
#include <glib/gstdio.h>
9
#include <glib/gprintf.h>
15
#include <gconf/gconf.h>
21
#include "map_management.h"
22
#include "converter.h"
23
#include "gps_functions.h"
25
#include "callbacks.h"
40
printf("*** %s(): \n",__PRETTY_FUNCTION__);
45
time_sec = (time_t)gpsdata->fix.time;
46
ts = localtime(&time_sec);
49
strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%SZ", ts);
52
sprintf(data, "%f,%f,%.1f,%.1f,%.1f,%.1f,%s\n",
53
gpsdata->fix.latitude,
54
gpsdata->fix.longitude,
55
gpsdata->fix.altitude,
61
if (fp) fprintf(fp,data);
68
time_t time_epoch_sec;
71
gchar *filename = NULL;
75
label76 = GTK_LABEL(lookup_widget(window1, "label76"));
78
time_epoch_sec = time(NULL);
79
tm_struct = localtime(&time_epoch_sec);
84
strftime(buffer, sizeof(buffer), "%Y%m%d_%H%M%S.log", tm_struct);
88
filename = g_strconcat(global_track_dir, buffer,NULL);
90
printf("*** %s(): %s\n",__PRETTY_FUNCTION__,filename);
92
if(fp==NULL && trip_logger_on)
94
fp = fopen(filename,"w");
97
printf("oops: %s \n",strerror(errno));
98
perror("Triplog open failed: ");
99
gtk_label_set_label(label76,"<span foreground='#ff0000'>Error opening logfile</span>");
103
labeltext = g_strconcat("<b><span foreground='#0000ff'>Log: ",buffer,"</span></b>",NULL);
104
gtk_label_set_label(label76,labeltext);
118
label76 = GTK_LABEL(lookup_widget(window1, "label76"));
119
gtk_label_set_label(label76,"");
121
printf("*** %s(): \n",__PRETTY_FUNCTION__);
124
printf("closing FP\n");
128
if(ret) printf("ERROR closing file\n");
136
int pixel_x, pixel_y, x, y, last_x, last_y;
137
static float lat, lon;
138
static float lat_tmp=0, lon_tmp=0;
141
static double trip_time_accumulated = 0;
144
static gboolean trip_counter_got_stopped = FALSE;
148
static GdkGC *gc=NULL, *gc_2=NULL, *gc_3=NULL, *gc_4=NULL, *gc_5=NULL;
152
gc = gdk_gc_new(pixmap);
153
gc_2 = gdk_gc_new(pixmap);
154
gc_3 = gdk_gc_new(pixmap);
155
gc_4 = gdk_gc_new(pixmap);
156
gc_5 = gdk_gc_new(pixmap);
162
gdk_gc_set_rgb_fg_color(gc, &color);
163
gdk_gc_set_line_attributes(gc,
164
5, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
169
gdk_gc_set_rgb_fg_color(gc_2, &color);
171
gdk_gc_set_line_attributes(gc_2,
172
6, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
177
gdk_gc_set_rgb_fg_color(gc_3, &color);
178
gdk_gc_set_line_attributes(gc_3,
179
7, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
185
gdk_gc_set_rgb_fg_color(gc_4, &color);
186
gdk_gc_set_line_attributes(gc_4,
187
7, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
193
gdk_gc_set_rgb_fg_color(gc_5, &color);
194
gdk_gc_set_line_attributes(gc_5,
195
11, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
204
trackpoint_t *tp = g_new0(trackpoint_t,1);
205
static int counter = 0;
208
lat = deg2rad(gpsdata->fix.latitude);
209
lon = deg2rad(gpsdata->fix.longitude);
211
printf("** %s() \n", __PRETTY_FUNCTION__);
215
pixel_x = lon2pixel(global_zoom, lon);
216
pixel_y = lat2pixel(global_zoom, lat);
218
x = pixel_x - global_x;
219
y = pixel_y - global_y;
222
pixel_x = lon2pixel(global_zoom, lon_tmp);
223
pixel_y = lat2pixel(global_zoom, lat_tmp);
225
last_x = pixel_x - global_x;
226
last_y = pixel_y - global_y;
230
if(gpsdata->seen_vaild)
232
int hand_x, hand_y, hand_wp_x, hand_wp_y;
233
double heading_rad, bearing;
235
heading_rad = (gpsdata->fix.track * (1.0 / 180.0)) * M_PI;
237
if(gpsdata->fix.speed>0.3)
239
hand_x = 25 * sinf(heading_rad);
240
hand_y = -25 * cosf(heading_rad);
255
map_drawable->window,
256
map_drawable->style->fg_gc[GTK_WIDGET_STATE (map_drawable)],
258
last_x-29, last_y-29,
259
last_x-29 + mouse_dx, last_y-29 + mouse_dy,
264
if (lat_tmp && lon_tmp)
265
gdk_draw_line(pixmap, gc, last_x, last_y, x, y);
269
gdk_window_process_all_updates();
272
if(mouse_dx == 0 && mouse_dy == 0)
276
map_drawable->window,
280
x-15 + mouse_dx, y-15 + mouse_dy,
285
if(global_wp_on && gpsdata->valid)
288
bearing = get_bearing(lat, lon, global_wp.lat, global_wp.lon);
289
gpsdata->fix.bearing = bearing;
290
printf("BEARING: %f\n", bearing);
291
hand_wp_x = 25 * sinf(bearing);
292
hand_wp_y = -25 * cosf(bearing);
294
gdk_draw_line(map_drawable->window,
298
x + mouse_dx + hand_wp_x,
299
y + mouse_dy + hand_wp_y);
301
gdk_draw_line(map_drawable->window,
305
x + mouse_dx + hand_wp_x,
306
y + mouse_dy + hand_wp_y);
312
gdk_draw_line(map_drawable->window,
316
x + mouse_dx + hand_x,
317
y + mouse_dy + hand_y);
319
gdk_draw_line(map_drawable->window,
323
x + mouse_dx + hand_x,
324
y + mouse_dy + hand_y);
329
if(global_autocenter)
331
if( (x < (global_drawingarea_width /2 - global_drawingarea_width /8) ||
332
x > (global_drawingarea_width /2 + global_drawingarea_width /8) ||
333
y < (global_drawingarea_height /2 - global_drawingarea_height /8) ||
334
y > (global_drawingarea_height /2 + global_drawingarea_height /8) ) &&
337
isnan(gpsdata->fix.latitude) ==0 &&
338
isnan(gpsdata->fix.longitude)==0 &&
339
gpsdata->fix.latitude !=0 &&
340
gpsdata->fix.longitude !=0
343
set_mapcenter(gpsdata->fix.latitude, gpsdata->fix.longitude, global_zoom);
354
if( gpsdata->valid && lat_tmp!=0 && lon_tmp!=0)
356
trip_delta = 6371.0 * acos(sin(lat) * sin(lat_tmp) +
357
cos(lat) * cos(lat_tmp) * cos(lon_tmp-lon) );
358
if(isnan(trip_delta))
362
printf("WTF??? %f %f %f %f %f \n",lat,lon,lat_tmp,lon_tmp,trip_delta);
366
trip_distance += trip_delta;
369
if(trip_distance > 0.005)
377
trackpoint_list = g_slist_append(trackpoint_list, tp);
390
if(gpsdata->valid && gpsdata->fix.speed > trip_maxspeed)
391
trip_maxspeed = gpsdata->fix.speed;
397
trip_time_accumulated = 0;
399
if(trip_counter_got_stopped)
401
printf("counter had been stopped \n");
402
trip_counter_got_stopped = FALSE;
403
trip_time_accumulated = trip_time;
408
if(trip_starttime == 0 && gpsdata->seen_vaild)
410
trip_starttime = gpsdata->fix.time;
415
if(trip_starttime > 0 && gpsdata->seen_vaild)
417
trip_time = gpsdata->fix.time - trip_starttime + trip_time_accumulated;
433
printf("trip counter halted\n");
434
trip_counter_got_stopped = TRUE;
435
lat_tmp = lon_tmp = 0;
442
if(trip_logger_on && gpsdata->valid)
455
printf("no gpsdata for timer\n");
467
GError **error = NULL;
470
repo_list = gconf_client_get_list( global_gconfclient,
475
if (repo_list == NULL)
477
repo_t *repo1 = g_new0(repo_t, 1);
478
repo_t *repo2 = g_new0(repo_t, 1);
479
repo_t *repo3 = g_new0(repo_t, 1);
480
repo_t *repo4 = g_new0(repo_t, 1);
481
repo_t *repo5 = g_new0(repo_t, 1);
484
printf("REPOLIST == NULL\n");
485
repo1->name = g_strdup("OSM");
486
repo1->uri = g_strdup("http://tile.openstreetmap.org/%d/%d/%d.png");
487
repo1->dir = g_strdup_printf("%s/Maps/OSM",global_home_dir);
488
repo1->inverted_zoom = 0;
489
global_repo_list = g_slist_append(global_repo_list, repo1);
491
repo2->name = g_strdup("Topo");
492
repo2->uri = g_strdup("maps-for-free");
493
repo2->dir = g_strdup_printf("%s/Maps/maps4free",global_home_dir);
494
repo2->inverted_zoom = 0;
495
global_repo_list = g_slist_append(global_repo_list, repo2);
497
repo3->name = g_strdup("Aerial");
498
repo3->uri = g_strdup("openaerial");
499
repo3->dir = g_strdup_printf("%s/Maps/openaerial",global_home_dir);
500
repo3->inverted_zoom = 0;
501
global_repo_list = g_slist_append(global_repo_list, repo3);
503
repo4->name = g_strdup("Opencyclemap");
504
repo4->uri = g_strdup("http://a.andy.sandbox.cloudmade.com/tiles/cycle/%d/%d/%d.png");
505
repo4->dir = g_strdup_printf("%s/Maps/opencyclemap",global_home_dir);
506
repo4->inverted_zoom = 0;
507
global_repo_list = g_slist_append(global_repo_list, repo4);
509
repo5->name = g_strdup("Google Sat (testing only)");
510
repo5->uri = g_strdup("http://khm.google.com/kh/v=45&x=%d&y=%d&z=%d");
511
repo5->dir = g_strdup_printf("%s/Maps/googlesat",global_home_dir);
512
repo5->inverted_zoom = 1;
513
global_repo_list = g_slist_append(global_repo_list, repo5);
518
for(list = repo_list; list != NULL; list = list->next)
521
gchar *str = list->data;
522
repo_t *repo = g_new0(repo_t, 1);
524
array = g_strsplit(str,"|",4);
526
repo->name = g_strdup(array[0]);
527
repo->uri = g_strdup(array[1]);
528
repo->dir = g_strdup(array[2]);
529
repo->inverted_zoom = (atoi(g_strdup(array[3])) == 1) ? TRUE : FALSE;
531
global_repo_list = g_slist_append(global_repo_list, repo);
533
printf("GCONF: \n -- name: %s \n -- uri: %s \n -- dir: %s \n",
534
repo->name, repo->uri, repo->dir);
538
return global_repo_list;
547
GSList *gconf_list = NULL;
548
GError **error = NULL;
549
gboolean success = FALSE;
553
for(list = global_repo_list; list != NULL; list = list->next)
556
gchar gconf_str[1024];
561
g_sprintf( gconf_str,
563
repo->name, repo->uri, repo->dir, repo->inverted_zoom);
565
gconf_list = g_slist_append(gconf_list, g_strdup(gconf_str));
567
printf("GCONFSAVE: \n -- name: %s \n -- uri: %s \n -- dir: %s \n -- zoom: %i \n\n %s \n",
568
repo->name, repo->uri, repo->dir, repo->inverted_zoom, gconf_str);
571
success = gconf_client_set_list( global_gconfclient,
577
printf("*** %s(): %i \n",__PRETTY_FUNCTION__, success);
585
repoconfig__populate_dialog()
591
repoconfig__set_current_list_pointer()
596
const gchar *reponame;
598
for(list = global_repo_list; list != NULL; list = list->next)
603
reponame = g_strdup(repo->name);
605
if( g_strrstr(reponame,global_curr_reponame) != NULL &&
606
strlen(reponame) == strlen(global_curr_reponame)
608
global_curr_repo = list;
610
if(!global_curr_repo)
612
printf("\n#\n#\n# ERROR: repository %s is broken \n#\n#\n", global_curr_reponame);
614
printf("Resetting repo_name and exiting now.\n\n");
615
printf("If problem persists after restart, \n");
616
printf("execute in a terminal: gconftool-2 -u /apps/tangogps/repos");
617
system("gconftool-2 -u /apps/tangogps/repo_name");
624
repoconfig__create_dropdown()
630
const gchar *reponame;
632
combobox = lookup_widget(window1, "combobox1");
634
for(list = global_repo_list; list != NULL; list = list->next)
639
reponame = g_strdup(repo->name);
640
gtk_combo_box_append_text (GTK_COMBO_BOX(combobox), g_strdup(repo->name));
642
if( g_strrstr(reponame,global_curr_reponame) != NULL &&
643
strlen(reponame) == strlen(global_curr_reponame)
647
global_curr_repo = list;
652
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), j);
663
global_home_dir = getenv("HOME");
665
global_gconfclient = gconf_client_get_default();
666
global_curr_reponame = gconf_client_get_string(global_gconfclient, GCONF"/repo_name",err);
669
if(global_curr_reponame == NULL)
671
printf("gconf repo_name not set\n");
672
global_curr_reponame = g_strdup("OSM");
674
gconf_get_repolist();
675
repoconfig__set_current_list_pointer();
677
global_x = gconf_client_get_int(
681
global_y = gconf_client_get_int(
685
global_zoom = gconf_client_get_int(
700
if(gconf_client_get_bool(global_gconfclient, GCONF"/started_before", err))
701
global_auto_download = gconf_client_get_bool(
703
GCONF"/auto_download",
707
gconf_client_set_bool(global_gconfclient, GCONF"/started_before", TRUE, err);
708
gconf_client_set_bool(global_gconfclient, GCONF"/auto_download", TRUE, err);
709
global_auto_download = TRUE;
717
gpointer data = NULL;
720
const gchar *nick, *pass;
721
GtkWidget *nick_entry, *pass_entry, *widget;
723
gboolean gconf_fftimer_running;
727
screen_height = gdk_screen_get_height(gdk_screen_get_default());
729
if(screen_height < 640)
731
printf("height: %d \n",screen_height);
732
gtk_window_resize(GTK_WINDOW(window1), 480, screen_height-10);
735
tangogps_dir = g_strconcat(global_home_dir, "/.tangogps", NULL);
736
g_mkdir(tangogps_dir, 0700);
738
repoconfig__create_dropdown();
741
nick_entry = lookup_widget(window1, "entry7");
742
pass_entry = lookup_widget(window1, "entry8");
744
global_gconfclient = gconf_client_get_default();
745
nick = gconf_client_get_string(global_gconfclient, GCONF"/nick",&err);
746
pass = gconf_client_get_string(global_gconfclient, GCONF"/pass",&err);
748
global_speed_unit = gconf_client_get_int(global_gconfclient, GCONF"/speed_unit",&err);
749
global_alt_unit = gconf_client_get_int(global_gconfclient, GCONF"/alt_unit",&err);
750
global_latlon_unit = gconf_client_get_int(global_gconfclient, GCONF"/latlon_unit",&err);
752
switch (global_speed_unit)
755
widget = lookup_widget(window1, "radiobutton15");
756
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
759
widget = lookup_widget(window1, "radiobutton16");
760
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
764
switch (global_alt_unit)
767
widget = lookup_widget(window1, "radiobutton18");
768
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
772
switch (global_latlon_unit)
775
widget = lookup_widget(window1, "radiobutton20");
776
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
779
widget = lookup_widget(window1, "radiobutton21");
780
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
784
gtk_entry_set_text( GTK_ENTRY(nick_entry), nick );
785
gtk_entry_set_text( GTK_ENTRY(pass_entry), pass );
787
widget = lookup_widget(window1, "vscale1");
788
gtk_range_set_value(GTK_RANGE(widget), (double) global_zoom);
790
global_track_dir = gconf_client_get_string(global_gconfclient, GCONF"/track_dir",&err);
791
if(!global_track_dir)
792
global_track_dir = g_strdup_printf("%s/Maps/",global_home_dir);
794
global_myposition.lat = 0;
795
global_myposition.lon = 0;
797
widget = lookup_widget(window1, "checkbutton2");
798
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), global_auto_download);
805
gconf_fftimer_running = gconf_client_get_bool(global_gconfclient, GCONF"/fftimer_running",&err);
808
global_ffupdate_interval_minutes = gconf_client_get_float(global_gconfclient, GCONF"/ffupdate_interval_minutes",&err);
809
global_ffupdate_interval = (int)floor(global_ffupdate_interval_minutes) * 60000;
810
widget = lookup_widget(window1, "entry16");
811
if (global_ffupdate_interval_minutes<10)
812
g_sprintf(buffer, "%.1f", global_ffupdate_interval_minutes);
814
g_sprintf(buffer, "%.0f", global_ffupdate_interval_minutes);
815
gtk_entry_set_text( GTK_ENTRY(widget), buffer );
818
global_ffupdate_auto = gconf_client_get_bool(global_gconfclient, GCONF"/ffupdate_auto",&err);
819
if(global_ffupdate_auto)
821
widget = lookup_widget(window1, "radiobutton13");
822
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),TRUE);
826
if(gconf_fftimer_running)
828
widget = lookup_widget(menu1, "item19");
829
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
833
global_ffcm_public = gconf_client_get_bool(global_gconfclient, GCONF"/ffcm_public",&err);
834
global_ffcm_registered = gconf_client_get_bool(global_gconfclient, GCONF"/ffcm_registered",&err);
835
global_ffcm_friends = gconf_client_get_bool(global_gconfclient, GCONF"/ffcm_friends",&err);
837
widget = lookup_widget(window1, "checkbutton3");
838
if(global_ffcm_public)
840
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
844
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
848
widget = lookup_widget(window1, "checkbutton4");
849
if(global_ffcm_registered)
851
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
855
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
859
widget = lookup_widget(window1, "checkbutton5");
860
if(global_ffcm_friends)
862
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
866
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
872
global_ffcu_public = gconf_client_get_bool(global_gconfclient, GCONF"/ffcu_public",&err);
873
global_ffcu_registered = gconf_client_get_bool(global_gconfclient, GCONF"/ffcu_registered",&err);
874
global_ffcu_friends = gconf_client_get_bool(global_gconfclient, GCONF"/ffcu_friends",&err);
876
widget = lookup_widget(window1, "checkbutton6");
877
if(global_ffcu_public)
879
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
883
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
887
widget = lookup_widget(window1, "checkbutton7");
888
if(global_ffcu_registered)
890
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
894
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
898
widget = lookup_widget(window1, "checkbutton8");
899
if(global_ffcu_friends)
901
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
905
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);
908
widget = lookup_widget(window1, "label117");
910
gtk_label_set_label(GTK_LABEL(widget), "<i>tangoGPS version: " VERSION "\nDeveloper: Marcus Bauer</i>");
913
str = gconf_client_get_string(global_gconfclient, GCONF"/gpsd_host",&err);
914
widget = lookup_widget(window1, "entry3");
915
gtk_entry_set_text(GTK_ENTRY(widget), g_strdup(str));
918
str = gconf_client_get_string(global_gconfclient, GCONF"/gpsd_port",&err);
919
widget = lookup_widget(window1, "entry4");
920
gtk_entry_set_text(GTK_ENTRY(widget), g_strdup(str));
923
if (gconf_client_get_bool(global_gconfclient, GCONF"/tracklog_on", NULL))
924
gtk_button_clicked(GTK_BUTTON(lookup_widget(window1,"button18")));
926
timer = g_timeout_add (1000,cb_gps_timer,data);
928
gtk_window_set_icon_from_file(GTK_WINDOW(window1), PACKAGE_PIXMAPS_DIR "/" PNAME ".png" ,&err);
931
fprintf (stderr, "Failed to load pixbuf file: %s\n", err->message);