#include "dialog.h"
#include "globals.h"
-#define SET_BUTTON_SENSITIVE(tpwin,num,sens) gtk_widget_set_sensitive ( GTK_WIDGET(g_list_nth_data((tpwin->buttons),(num))), (sens));
-
struct _VikTrwLayerTpwin {
GtkDialog parent;
GtkSpinButton *lat, *lon, *alt;
GtkLabel *track_name, *ts, *localtime, *diff_dist, *diff_time, *diff_speed, *hdop, *vdop, *pdop, *sat;
- GList *buttons;
+ // Previously these buttons were in a glist, however I think the ordering behaviour is implicit
+ // thus control manually to ensure operating on the correct button
+ GtkWidget *button_close;
+ GtkWidget *button_delete;
+ GtkWidget *button_insert;
+ GtkWidget *button_split;
+ GtkWidget *button_back;
+ GtkWidget *button_forward;
VikTrackpoint *cur_tp;
- gboolean cur_tp_is_endpoint; /* for join */
-
gboolean sync_to_tp_block;
};
tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt );
break;
case VIK_UNITS_HEIGHT_FEET:
- tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ) / 3.2808399;
+ tpwin->cur_tp->altitude = VIK_FEET_TO_METERS(gtk_spin_button_get_value ( tpwin->alt ));
break;
default:
tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt );
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,
- _("Join With Last"), VIK_TRW_LAYER_TPWIN_JOIN,
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, sizeof(left_label_texts) / sizeof(left_label_texts[0]) );
g_signal_connect_swapped ( G_OBJECT(tpwin->alt), "value-changed", G_CALLBACK(tpwin_sync_alt_to_tp), tpwin );
- right_vbox = gtk_vbox_new( TRUE, 3 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->track_name), FALSE, TRUE, 0 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lat), FALSE, TRUE, 0 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lon), FALSE, TRUE, 0 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->alt), FALSE, TRUE, 0 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->ts), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->localtime), FALSE, TRUE, 5 );
+ right_vbox = gtk_vbox_new ( FALSE, 3 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->track_name), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lat), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lon), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->alt), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->ts), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->localtime), FALSE, FALSE, 5 );
/* diff info */
diff_left_vbox = a_dialog_create_label_vbox ( right_label_texts, sizeof(right_label_texts) / sizeof(right_label_texts[0]) );
tpwin->pdop = GTK_LABEL(gtk_label_new(NULL));
tpwin->sat = GTK_LABEL(gtk_label_new(NULL));
- diff_right_vbox = gtk_vbox_new ( TRUE, 3 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_dist), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_time), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_speed), FALSE, TRUE, 5 );
+ diff_right_vbox = gtk_vbox_new ( FALSE, 3 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_dist), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_time), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_speed), FALSE, FALSE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->vdop), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->hdop), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->pdop), FALSE, TRUE, 5 );
- gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->sat), FALSE, TRUE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->vdop), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->hdop), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->pdop), FALSE, FALSE, 5 );
+ gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->sat), FALSE, FALSE, 5 );
- main_hbox = gtk_hbox_new( TRUE, 0 );
+ main_hbox = gtk_hbox_new( FALSE, 0 );
gtk_box_pack_start ( GTK_BOX(main_hbox), left_vbox, TRUE, TRUE, 0 );
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_widget_set_sensitive ( GTK_WIDGET(tpwin->lon), FALSE );
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->alt), FALSE );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_SPLIT, FALSE );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_DELETE, FALSE );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_FORWARD, FALSE );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_BACK, FALSE );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_JOIN, FALSE );
+ // Only keep close button enabled
+ gtk_widget_set_sensitive ( tpwin->button_insert, FALSE );
+ gtk_widget_set_sensitive ( tpwin->button_split, FALSE );
+ gtk_widget_set_sensitive ( tpwin->button_delete, FALSE );
+ gtk_widget_set_sensitive ( tpwin->button_back, FALSE );
+ gtk_widget_set_sensitive ( tpwin->button_forward, FALSE );
+
gtk_label_set_text ( tpwin->diff_dist, NULL );
gtk_label_set_text ( tpwin->diff_time, NULL );
gtk_label_set_text ( tpwin->diff_speed, NULL );
gtk_label_set_text ( tpwin->hdop, NULL );
gtk_label_set_text ( tpwin->pdop, NULL );
gtk_label_set_text ( tpwin->sat, NULL );
- tpwin->cur_tp = NULL;
-}
-
-void vik_trw_layer_tpwin_disable_join ( VikTrwLayerTpwin *tpwin )
-{
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_JOIN, FALSE );
}
void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *track_name )
static struct LatLon ll;
VikTrackpoint *tp = VIK_TRACKPOINT(tpl->data);
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_DELETE, TRUE );
+ /* Only can insert if not at the end (otherwise use extend track) */
+ gtk_widget_set_sensitive ( tpwin->button_insert, (gboolean) GPOINTER_TO_INT (tpl->next) );
+ gtk_widget_set_sensitive ( tpwin->button_delete, TRUE );
/* We can only split up a track if it's not an endpoint. Makes sense to me. */
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_SPLIT, tpl->next && tpl->prev );
+ gtk_widget_set_sensitive ( tpwin->button_split, tpl->next && tpl->prev );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_FORWARD, (gboolean) GPOINTER_TO_INT (tpl->next) );
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_BACK, (gboolean) GPOINTER_TO_INT (tpl->prev) );
-
- /* we can only join tracks if there was a last tp, the last tp was an endpoint, _AND_ this tp is an endpoint */
- SET_BUTTON_SENSITIVE ( tpwin, VIK_TRW_LAYER_TPWIN_JOIN, tpwin->cur_tp && tpwin->cur_tp_is_endpoint && (!(tpl->next && tpl->prev)) );
+ gtk_widget_set_sensitive ( tpwin->button_forward, (gboolean) GPOINTER_TO_INT (tpl->next) );
+ gtk_widget_set_sensitive ( tpwin->button_back, (gboolean) GPOINTER_TO_INT (tpl->prev) );
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lat), TRUE );
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lon), TRUE );
+ gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->alt), TRUE );
gtk_label_set_text ( tpwin->track_name, track_name );
gtk_spin_button_set_value ( tpwin->alt, tp->altitude );
break;
case VIK_UNITS_HEIGHT_FEET:
- gtk_spin_button_set_value ( tpwin->alt, tp->altitude*3.2808399 );
+ gtk_spin_button_set_value ( tpwin->alt, VIK_METERS_TO_FEET(tp->altitude) );
break;
default:
gtk_spin_button_set_value ( tpwin->alt, tp->altitude );
vik_units_speed_t speed_units = a_vik_get_units_speed ();
switch (speed_units) {
case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR:
- g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f km/h", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp)) * 3.6 );
+ g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f km/h", VIK_MPS_TO_KPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) );
break;
case VIK_UNITS_SPEED_MILES_PER_HOUR:
- g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f mph", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp)) * 2.23693629 );
+ g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f mph", VIK_MPS_TO_MPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) );
break;
case VIK_UNITS_SPEED_METRES_PER_SECOND:
g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m/s", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / ABS(tp->timestamp - tpwin->cur_tp->timestamp) );
break;
+ case VIK_UNITS_SPEED_KNOTS:
+ g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f knots", VIK_MPS_TO_KNOTS(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) );
+ break;
default:
g_snprintf ( tmp_str, sizeof(tmp_str), "--" );
g_critical("Houston, we've had a problem. speed=%d", speed_units);
g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->vdop );
break;
case VIK_UNITS_HEIGHT_FEET:
- g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f feet", tp->vdop*3.2808399 );
+ g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f feet", VIK_METERS_TO_FEET(tp->vdop) );
break;
default:
g_snprintf ( tmp_str, sizeof(tmp_str), "--" );
gtk_label_set_text ( tpwin->sat, tmp_str );
tpwin->cur_tp = tp;
- tpwin->cur_tp_is_endpoint = ! (tpl->next && tpl->prev);
}
void vik_trw_layer_tpwin_set_track_name ( VikTrwLayerTpwin *tpwin, const gchar *track_name )