X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=gps-tracker.c;h=680de1073a3a6301de1476584b1e6a40c34b9646;hb=fae20d6979dfe01bad666ac8d1772514a61c8f36;hp=d92a8e6c19dd92a22387d54eb557d283017a58a9;hpb=bada88f917fca5e6c22cb3f4fc7c605049a221af;p=gps-tracker diff --git a/gps-tracker.c b/gps-tracker.c index d92a8e6..680de10 100644 --- a/gps-tracker.c +++ b/gps-tracker.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -17,6 +18,7 @@ typedef struct { gboolean tracking_is_on; FILE *outf_p; gchar *working_dir; + gchar *intermediate_gpx_data_filename; } AppData; static gchar * interface_file_chooser (AppData * appdata, GtkFileChooserAction action) @@ -43,16 +45,45 @@ static gchar * interface_file_chooser (AppData * appdata, GtkFileChooserAction a return filename; } +static void write_gpx_header(FILE *fp) +{ + g_return_if_fail(fp); + fprintf(fp, + "\n" + "\n" + "\n\n" + ); +} + +static void write_gpx_footer(FILE *fp) +{ + g_return_if_fail(fp); + fprintf(fp, "\n\n\n"); +} + static void cb_start_stop (GtkWidget * w, AppData * data) { data->tracking_is_on = !data->tracking_is_on; - if(data->tracking_is_on) { + if(data->tracking_is_on) { /* START pressed */ + data->outf_p = fopen(data->intermediate_gpx_data_filename, "w"); + write_gpx_header(data->outf_p); hildon_banner_show_information(GTK_WIDGET(data->window), NULL, "Tracking started"); gtk_button_set_label (data->start_stop_button, "Stop"); + gtk_widget_set_sensitive(GTK_WIDGET(data->save_button), FALSE); } - else { + else { /* STOP pressed */ + if(data->outf_p) { + write_gpx_footer(data->outf_p); + fclose(data->outf_p); + data->outf_p = NULL; + } gtk_button_set_label (data->start_stop_button, "Start"); hildon_banner_show_information(GTK_WIDGET(data->window), NULL, "Tracking stopped"); + gtk_widget_set_sensitive(GTK_WIDGET(data->save_button), TRUE); } } @@ -62,11 +93,14 @@ static void cb_file_save (GtkWidget * w, AppData * data) filename = interface_file_chooser (data, GTK_FILE_CHOOSER_ACTION_SAVE); if (filename) { - //FILE * f = fopen (filename, "w"); - //fprintf (f, "This file was generated by Hildon File Chooser example."); - //fclose (f); + if(g_file_test(data->intermediate_gpx_data_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) { + g_rename(data->intermediate_gpx_data_filename, filename); g_print ("File saved as %s\n", filename); hildon_banner_show_information(GTK_WIDGET(data->window), NULL, filename); + } + else { + hildon_banner_show_information(GTK_WIDGET(data->window), NULL, "Temp file not found"); + } } g_free(filename); } @@ -145,6 +179,8 @@ on_gps_device_changed (LocationGPSDevice *device, gpointer data) } gtk_label_set_text(info, msg->str); + if(device->status != LOCATION_GPS_DEVICE_STATUS_NO_FIX) + gtk_widget_set_sensitive(GTK_WIDGET(app_data->start_stop_button), TRUE); //gtk_widget_show(GTK_WIDGET(info)); g_string_free(msg, TRUE); } @@ -183,6 +219,7 @@ int main (int argc, char **argv) LocationGPSDevice *device; data->working_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "MyDocs", g_get_home_dir()); + data->intermediate_gpx_data_filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S ".gps-tracker.gpx", data->working_dir); data->program = hildon_program_get_instance (); g_set_application_name("GPS tracker"); @@ -193,9 +230,11 @@ int main (int argc, char **argv) data->btn_hbox = (void*)gtk_hbox_new(TRUE, 0); data->start_stop_button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH)); - data->save_button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH)); gtk_button_set_label (data->start_stop_button, "Start"); + gtk_widget_set_sensitive(GTK_WIDGET(data->start_stop_button), FALSE); + data->save_button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH)); gtk_button_set_label (data->save_button, "Save"); + gtk_widget_set_sensitive(GTK_WIDGET(data->save_button), FALSE); gtk_box_pack_start(GTK_BOX(data->btn_hbox), GTK_WIDGET(data->start_stop_button), FALSE, FALSE, 8); gtk_box_pack_start(GTK_BOX(data->btn_hbox), GTK_WIDGET(data->save_button), FALSE, FALSE, 8); gtk_box_pack_start(GTK_BOX(data->main_vbox), GTK_WIDGET(data->btn_hbox), FALSE, FALSE, 0); @@ -237,9 +276,13 @@ int main (int argc, char **argv) location_gpsd_control_stop (control); + if(data->outf_p) + fclose(data->outf_p); + g_unlink(data->intermediate_gpx_data_filename); g_object_unref (device); g_object_unref (control); g_free(data->working_dir); + g_free(data->intermediate_gpx_data_filename); g_free(data); return 0;