/** * create_layout: * * Returns a widget to hold the stats information in a table grid layout */ static GtkWidget *create_layout ( GtkWidget *content[], gboolean extended ) { int cnt = 0; for ( cnt = 0; cnt < G_N_ELEMENTS(label_texts); cnt++ ) content[cnt] = ui_label_new_selectable ( NULL ); if ( !extended ) cnt = cnt - 1; return create_table (cnt, label_texts, content, extended ); }
/** * Creates a dialog with list of text * Mostly useful for longer messages that have several lines of information. */ void a_dialog_list ( GtkWindow *parent, const gchar *title, GArray *array, gint padding ) { GtkWidget *dialog = gtk_dialog_new_with_buttons ( title, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); GtkBox *vbox = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); GtkWidget *label; for ( int i = 0; i < array->len; i++ ) { label = ui_label_new_selectable (NULL); gtk_label_set_markup ( GTK_LABEL(label), g_array_index(array,gchar*,i) ); gtk_box_pack_start ( GTK_BOX(vbox), label, FALSE, TRUE, padding ); } gtk_widget_show_all ( dialog ); gtk_dialog_run ( GTK_DIALOG(dialog) ); gtk_widget_destroy ( dialog ); }
VikTrwLayerTpwin *vik_trw_layer_tpwin_new ( GtkWindow *parent ) { static gchar *left_label_texts[] = { N_("<b>Name:</b>"), N_("<b>Latitude:</b>"), N_("<b>Longitude:</b>"), N_("<b>Altitude:</b>"), N_("<b>Course:</b>"), N_("<b>Timestamp:</b>"), N_("<b>Time:</b>") }; static gchar *right_label_texts[] = { N_("<b>Distance Difference:</b>"), N_("<b>Time Difference:</b>"), N_("<b>\"Speed\" Between:</b>"), N_("<b>Speed:</b>"), N_("<b>VDOP:</b>"), N_("<b>HDOP:</b>"), N_("<b>PDOP:</b>"), N_("<b>SAT/FIX:</b>") }; VikTrwLayerTpwin *tpwin = VIK_TRW_LAYER_TPWIN ( g_object_new ( VIK_TRW_LAYER_TPWIN_TYPE, NULL ) ); GtkWidget *main_hbox, *left_vbox, *right_vbox; GtkWidget *diff_left_vbox, *diff_right_vbox; gtk_window_set_transient_for ( GTK_WINDOW(tpwin), parent ); gtk_window_set_title ( GTK_WINDOW(tpwin), _("Trackpoint") ); tpwin->button_close = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_CLOSE, VIK_TRW_LAYER_TPWIN_CLOSE); tpwin->button_insert = gtk_dialog_add_button ( GTK_DIALOG(tpwin), _("_Insert After"), VIK_TRW_LAYER_TPWIN_INSERT); tpwin->button_delete = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_DELETE, VIK_TRW_LAYER_TPWIN_DELETE); tpwin->button_split = gtk_dialog_add_button ( GTK_DIALOG(tpwin), _("Split Here"), VIK_TRW_LAYER_TPWIN_SPLIT); tpwin->button_back = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_GO_BACK, VIK_TRW_LAYER_TPWIN_BACK); tpwin->button_forward = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_GO_FORWARD, VIK_TRW_LAYER_TPWIN_FORWARD); /* gtk_dialog_add_buttons ( GTK_DIALOG(tpwin), GTK_STOCK_CLOSE, VIK_TRW_LAYER_TPWIN_CLOSE, _("_Insert After"), VIK_TRW_LAYER_TPWIN_INSERT, GTK_STOCK_DELETE, VIK_TRW_LAYER_TPWIN_DELETE, _("Split Here"), VIK_TRW_LAYER_TPWIN_SPLIT, GTK_STOCK_GO_BACK, VIK_TRW_LAYER_TPWIN_BACK, GTK_STOCK_GO_FORWARD, VIK_TRW_LAYER_TPWIN_FORWARD, NULL ); tpwin->buttons = gtk_container_get_children(GTK_CONTAINER(GTK_DIALOG(tpwin)->action_area)); */ /* main track info */ left_vbox = a_dialog_create_label_vbox ( left_label_texts, G_N_ELEMENTS(left_label_texts), 1, 3 ); tpwin->trkpt_name = gtk_entry_new(); g_signal_connect_swapped ( G_OBJECT(tpwin->trkpt_name), "focus-out-event", G_CALLBACK(tpwin_set_name), tpwin ); tpwin->course = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->time = gtk_button_new(); gtk_button_set_relief ( GTK_BUTTON(tpwin->time), GTK_RELIEF_NONE ); g_signal_connect ( G_OBJECT(tpwin->time), "button-release-event", G_CALLBACK(tpwin_sync_time_to_tp), tpwin ); tpwin->lat = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -90, 90, 0.00005, 0.01, 0 )), 0.00005, 6)); tpwin->lon = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -180, 180, 0.00005, 0.01, 0 )), 0.00005, 6)); g_signal_connect_swapped ( G_OBJECT(tpwin->lat), "value-changed", G_CALLBACK(tpwin_sync_ll_to_tp), tpwin ); g_signal_connect_swapped ( G_OBJECT(tpwin->lon), "value-changed", G_CALLBACK(tpwin_sync_ll_to_tp), tpwin ); tpwin->alt = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -1000, 25000, 10, 100, 0 )), 10, 2)); g_signal_connect_swapped ( G_OBJECT(tpwin->alt), "value-changed", G_CALLBACK(tpwin_sync_alt_to_tp), tpwin ); tpwin->ts = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(0,2147483647,1)); //pow(2,31)-1 limit input to ~2038 for now g_signal_connect_swapped ( G_OBJECT(tpwin->ts), "value-changed", G_CALLBACK(tpwin_sync_ts_to_tp), tpwin ); gtk_spin_button_set_digits ( tpwin->ts, 0 ); right_vbox = gtk_vbox_new ( TRUE, 1 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->trkpt_name), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lat), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lon), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->alt), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->course), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->ts), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->time), FALSE, FALSE, 3 ); /* diff info */ diff_left_vbox = a_dialog_create_label_vbox ( right_label_texts, G_N_ELEMENTS(right_label_texts), 1, 3 ); tpwin->diff_dist = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->diff_time = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->diff_speed = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->speed = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->vdop = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->hdop = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->pdop = GTK_LABEL(ui_label_new_selectable(NULL)); tpwin->sat = GTK_LABEL(ui_label_new_selectable(NULL)); diff_right_vbox = gtk_vbox_new ( TRUE, 1 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_dist), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_time), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_speed), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->speed), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->vdop), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->hdop), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->pdop), FALSE, FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->sat), FALSE, FALSE, 3 ); main_hbox = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), left_vbox, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(main_hbox), right_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), diff_left_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), diff_right_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(tpwin))), main_hbox, FALSE, FALSE, 0 ); tpwin->cur_tp = NULL; GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(tpwin), VIK_TRW_LAYER_TPWIN_CLOSE ); #endif if ( response_w ) gtk_widget_grab_focus ( response_w ); return tpwin; }