void open_url(GtkWindow *parent, const gchar * url) { #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) url, NULL, ".\\", 0); #else gboolean use_browser = FALSE; if ( a_settings_get_boolean ( "use_env_browser", &use_browser ) ) { const gchar *browser = g_getenv("BROWSER"); if (browser == NULL || browser[0] == '\0') { browser = "firefox"; } if (spawn_command_line_async(browser, url)) { return; } else g_warning("Failed to run: %s on %s", browser, url); } else { GError *error = NULL; gtk_show_uri ( gtk_widget_get_screen (GTK_WIDGET(parent)), url, GDK_CURRENT_TIME, &error ); if ( error ) { a_dialog_error_msg_extra ( parent, _("Could not launch web browser. %s"), error->message ); g_error_free ( error ); } } #endif }
/** * vik_trw_layer_analyse_this: * @window: A window from which the dialog will be derived * @name: The name to be shown * @vl: The #VikLayer passed on into get_tracks_and_layers_cb() * @user_data: Data passed on into get_tracks_and_layers_cb() * @get_tracks_and_layers_cb: The function to call to construct items to be analysed * * Display a dialog with stats across many tracks * * Returns: The dialog that is created to display the analyse information */ GtkWidget* vik_trw_layer_analyse_this ( GtkWindow *window, const gchar *name, VikLayer *vl, gpointer user_data, VikTrwlayerGetTracksAndLayersFunc get_tracks_and_layers_cb, VikTrwlayerAnalyseCloseFunc on_close_cb ) { //VikWindow *vw = VIK_WINDOW(window); GtkWidget *dialog; dialog = gtk_dialog_new_with_buttons ( _("Statistics"), window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL ); GtkWidget *name_l = gtk_label_new ( NULL ); gchar *myname = g_markup_printf_escaped ( "<b>%s</b>", name ); gtk_label_set_markup ( GTK_LABEL(name_l), myname ); g_free ( myname ); GtkWidget *content = gtk_dialog_get_content_area ( GTK_DIALOG(dialog) ); gtk_box_pack_start ( GTK_BOX(content), name_l, FALSE, FALSE, 10); // Get previous value (if any) from the settings gboolean include_invisible; if ( ! a_settings_get_boolean ( VIK_SETTINGS_ANALYSIS_DO_INVISIBLE, &include_invisible ) ) include_invisible = TRUE; analyse_cb_t *acb = g_malloc (sizeof(analyse_cb_t)); acb->vl = vl; acb->user_data = user_data; acb->get_tracks_and_layers_cb = get_tracks_and_layers_cb; acb->on_close_cb = on_close_cb; acb->tracks_and_layers = get_tracks_and_layers_cb ( vl, user_data ); acb->widgets = g_malloc ( sizeof(GtkWidget*) * G_N_ELEMENTS(label_texts) ); acb->extended = vl->type == VIK_LAYER_AGGREGATE; acb->layout = create_layout ( acb->widgets, acb->extended ); gtk_box_pack_start ( GTK_BOX(content), acb->layout, FALSE, FALSE, 0 ); // Analysis seems reasonably quick // unless you have really large numbers of tracks (i.e. many many thousands or a really slow computer) // One day might store stats in the track itself.... val_analyse ( acb->widgets, acb->tracks_and_layers, include_invisible, acb->extended ); GtkWidget *cb = gtk_check_button_new_with_label ( _("Include Invisible Items") ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(cb), include_invisible ); gtk_box_pack_start ( GTK_BOX(content), cb, FALSE, FALSE, 10); acb->check_button = cb; gtk_widget_show_all ( dialog ); g_signal_connect ( G_OBJECT(cb), "toggled", G_CALLBACK(include_invisible_toggled_cb), acb ); g_signal_connect ( G_OBJECT(dialog), "response", G_CALLBACK(analyse_close), acb ); return dialog; }
// Optional way to force basic auth method when OAuth is built in gboolean osm_use_basic_auth ( void ) { #ifdef HAVE_OAUTH_H gboolean basic_auth = FALSE; gboolean setting; if ( a_settings_get_boolean ( VIK_SETTINGS_OSM_BASIC_AUTH, &setting ) ) basic_auth = setting; #else gboolean basic_auth = TRUE; #endif return basic_auth; }
/* This should to be called from main() to make sure thread safe */ void curl_download_init() { curl_global_init(CURL_GLOBAL_ALL); curl_download_user_agent = g_strdup_printf ("%s/%s %s", PACKAGE, VERSION, curl_version()); #ifdef CURL_NO_SSL_VERIFYPEER curl_ssl_verifypeer = 0; #endif gboolean tmp; if ( a_settings_get_boolean ( "curl_ssl_verifypeer", &tmp ) ) curl_ssl_verifypeer = tmp; gchar *str = NULL; if ( a_settings_get_string ( "curl_cainfo", &str ) ) { curl_cainfo = g_strdup ( str ); g_free ( str ); } }
static void datasource_gps_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; GtkTable *box, *data_type_box; w->proto_l = gtk_label_new (_("GPS Protocol:")); w->proto_b = vik_combo_box_text_new (); g_list_foreach (a_babel_device_list, append_element, w->proto_b); if ( last_active < 0 ) { find_entry = -1; wanted_entry = -1; gchar *protocol = NULL; if ( a_settings_get_string ( VIK_SETTINGS_GPS_PROTOCOL, &protocol ) ) { // Use setting if ( protocol ) g_list_foreach (a_babel_device_list, find_protocol, protocol); } else { // Attempt to maintain default to Garmin devices (assumed most popular/numerous device) g_list_foreach (a_babel_device_list, find_protocol, "garmin"); } // If not found set it to the first entry, otherwise use the entry last_active = ( wanted_entry < 0 ) ? 0 : wanted_entry; } gtk_combo_box_set_active (GTK_COMBO_BOX(w->proto_b), last_active); g_object_ref(w->proto_b); w->ser_l = gtk_label_new (_("Serial Port:")); #if GTK_CHECK_VERSION (2, 24, 0) w->ser_b = gtk_combo_box_text_new_with_entry (); #else w->ser_b = gtk_combo_box_entry_new_text (); #endif // Value from the settings is promoted to the top gchar *gps_port = NULL; if ( a_settings_get_string ( VIK_SETTINGS_GPS_PORT, &gps_port ) ) { // Use setting if available if ( gps_port ) { #ifndef WINDOWS if ( !strncmp (gps_port, "/dev/tty", 6) ) { if (g_access (gps_port, R_OK) == 0) { vik_combo_box_text_append (w->ser_b, gps_port); } } else #endif vik_combo_box_text_append (w->ser_b, gps_port); } } // Note avoid appending the port selected from the settings #ifdef WINDOWS if ( gps_port && strcmp (gps_port, "com1") ) vik_combo_box_text_append (w->ser_b, "com1"); #else /* Here just try to see if the device is available which gets passed onto gpsbabel List USB devices first as these will generally only be present if autogenerated by udev or similar User is still able to set their own free text entry */ if ( gps_port && strcmp (gps_port, "/dev/ttyUSB0") ) if (g_access ("/dev/ttyUSB0", R_OK) == 0) vik_combo_box_text_append (w->ser_b, "/dev/ttyUSB0"); if ( gps_port && strcmp (gps_port, "/dev/ttyUSB1") ) if (g_access ("/dev/ttyUSB1", R_OK) == 0) vik_combo_box_text_append (w->ser_b, "/dev/ttyUSB1"); if ( gps_port && strcmp (gps_port, "/dev/ttyS0") ) if (g_access ("/dev/ttyS0", R_OK) == 0) vik_combo_box_text_append (w->ser_b, "/dev/ttyS0"); if ( gps_port && strcmp (gps_port, "/dev/ttyS1") ) if (g_access ("/dev/ttyS1", R_OK) == 0) vik_combo_box_text_append (w->ser_b, "/dev/ttyS1"); #endif if ( gps_port && strcmp (gps_port, "usb:") ) vik_combo_box_text_append (w->ser_b, "usb:"); gtk_combo_box_set_active (GTK_COMBO_BOX(w->ser_b), 0); g_object_ref(w->ser_b); w->off_request_l = gtk_label_new (_("Turn Off After Transfer\n(Garmin/NAViLink Only)")); w->off_request_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gboolean power_off; if ( ! a_settings_get_boolean ( VIK_SETTINGS_GPS_POWER_OFF, &power_off ) ) power_off = FALSE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->off_request_b), power_off); w->get_tracks_l = gtk_label_new (_("Tracks:")); w->get_tracks_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gboolean get_tracks; if ( ! a_settings_get_boolean ( VIK_SETTINGS_GPS_GET_TRACKS, &get_tracks ) ) get_tracks = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_tracks_b), get_tracks); w->get_routes_l = gtk_label_new (_("Routes:")); w->get_routes_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gboolean get_routes; if ( ! a_settings_get_boolean ( VIK_SETTINGS_GPS_GET_ROUTES, &get_routes ) ) get_routes = FALSE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_routes_b), get_routes); w->get_waypoints_l = gtk_label_new (_("Waypoints:")); w->get_waypoints_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gboolean get_waypoints; if ( ! a_settings_get_boolean ( VIK_SETTINGS_GPS_GET_WAYPOINTS, &get_waypoints ) ) get_waypoints = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_waypoints_b), get_waypoints); box = GTK_TABLE(gtk_table_new(2, 4, FALSE)); data_type_box = GTK_TABLE(gtk_table_new(4, 1, FALSE)); gtk_table_attach_defaults(box, GTK_WIDGET(w->proto_l), 0, 1, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(w->proto_b), 1, 2, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(w->ser_l), 0, 1, 1, 2); gtk_table_attach_defaults(box, GTK_WIDGET(w->ser_b), 1, 2, 1, 2); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_tracks_l), 0, 1, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_tracks_b), 1, 2, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_routes_l), 2, 3, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_routes_b), 3, 4, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_waypoints_l), 4, 5, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_waypoints_b), 5, 6, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(data_type_box), 0, 2, 2, 3); gtk_table_attach_defaults(box, GTK_WIDGET(w->off_request_l), 0, 1, 3, 4); gtk_table_attach_defaults(box, GTK_WIDGET(w->off_request_b), 1, 3, 3, 4); gtk_box_pack_start ( GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), GTK_WIDGET(box), FALSE, FALSE, 5 ); gtk_widget_show_all ( dialog ); }