// Otherwise use new value in the edit buffer
edit_wp->timestamp = mytime;
+ // Clear the previous 'Add' image as now a time is set
+ if ( gtk_button_get_image ( GTK_BUTTON(widget) ) )
+ gtk_button_set_image ( GTK_BUTTON(widget), NULL );
+
update_time ( widget, edit_wp->timestamp );
}
}
}
+ timelabel = gtk_label_new ( _("Time:") );
+ timevaluebutton = gtk_button_new();
+ gtk_button_set_relief ( GTK_BUTTON(timevaluebutton), GTK_RELIEF_NONE );
if ( !edit_wp )
edit_wp = vik_waypoint_new ();
+
+ // TODO: Consider if there should be a remove time button...
+
if ( !is_new && wp->has_timestamp ) {
- timelabel = gtk_label_new ( _("Time:") );
- timevaluebutton = gtk_button_new();
- gtk_button_set_relief ( GTK_BUTTON(timevaluebutton), GTK_RELIEF_NONE );
update_time ( timevaluebutton, wp->timestamp );
- g_signal_connect ( G_OBJECT(timevaluebutton), "clicked", G_CALLBACK(time_edit_click), edit_wp );
}
+ else {
+ GtkWidget *img = gtk_image_new_from_stock ( GTK_STOCK_ADD, GTK_ICON_SIZE_MENU );
+ gtk_button_set_image ( GTK_BUTTON(timevaluebutton), img );
+ // Initially use current time or otherwise whatever the last value used was
+ if ( edit_wp->timestamp == 0 ) {
+ time ( &edit_wp->timestamp );
+ }
+ }
+ g_signal_connect ( G_OBJECT(timevaluebutton), "clicked", G_CALLBACK(time_edit_click), edit_wp );
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), latlabel, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), latentry, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), lonlabel, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), lonentry, FALSE, FALSE, 0);
- if ( timelabel ) {
- gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), timelabel, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), timevaluebutton, FALSE, FALSE, 0);
- }
+ gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), timelabel, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), timevaluebutton, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), altlabel, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), altentry, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), commentlabel, FALSE, FALSE, 0);
if ( response == VIK_TRW_LAYER_TPWIN_SPLIT && vtl->current_tpl->next && vtl->current_tpl->prev )
{
trw_layer_split_at_selected_trackpoint ( vtl, vtl->current_tp_track->is_route ? VIK_TRW_LAYER_SUBLAYER_ROUTE : VIK_TRW_LAYER_SUBLAYER_TRACK );
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
}
else if ( response == VIK_TRW_LAYER_TPWIN_DELETE )
{
if ( vtl->current_tpl )
// Reset dialog with the available adjacent trackpoint
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update(VIK_LAYER(vtl));
}
else if ( response == VIK_TRW_LAYER_TPWIN_FORWARD && vtl->current_tpl->next )
{
if ( vtl->current_tp_track )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->next, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->next, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update(VIK_LAYER(vtl)); /* TODO longone: either move or only update if tp is inside drawing window */
}
else if ( response == VIK_TRW_LAYER_TPWIN_BACK && vtl->current_tpl->prev )
{
if ( vtl->current_tp_track )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->prev, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->prev, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update(VIK_LAYER(vtl));
}
else if ( response == VIK_TRW_LAYER_TPWIN_INSERT && vtl->current_tpl->next )
if ( vtl->current_tpl )
if ( vtl->current_tp_track )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
/* set layer name and TP data */
}
if ( vtl->tpwin )
if ( vtl->current_tp_track )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
// NB don't reset the selected trackpoint, thus ensuring it's still in the tpwin
}
}
set_statusbar_msg_info_trkpt ( vtl, tp_params.closest_tp );
if ( vtl->tpwin )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update ( VIK_LAYER(vtl) );
return TRUE;
set_statusbar_msg_info_trkpt ( vtl, tp_params.closest_tp );
if ( vtl->tpwin )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update ( VIK_LAYER(vtl) );
return TRUE;
/* diff dist is diff from orig */
if ( vtl->tpwin )
- vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name );
+ vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name, vtl->current_tp_track->is_route );
vik_layer_emit_update ( VIK_LAYER(vtl) );
return TRUE;
}
}
+static time_t last_edit_time = 0;
+
/**
* tpwin_sync_time_to_tp:
*
{
if ( !tpwin->cur_tp || tpwin->sync_to_tp_block )
return;
- // Currently disable setting the time via this way when the point doesn't have one
- if ( !tpwin->cur_tp->has_timestamp )
- return;
+
+ if ( tpwin->cur_tp->has_timestamp )
+ last_edit_time = tpwin->cur_tp->timestamp;
+ else if ( last_edit_time == 0 )
+ time ( &last_edit_time );
GTimeZone *gtz = g_time_zone_new_local ();
- guint mytime = vik_datetime_edit_dialog ( GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(&tpwin->parent))),
- _("Date/Time Edit"),
- tpwin->cur_tp->timestamp,
- gtz );
+ time_t mytime = vik_datetime_edit_dialog ( GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(&tpwin->parent))),
+ _("Date/Time Edit"),
+ last_edit_time,
+ gtz );
g_time_zone_unref ( gtz );
// Was the dialog cancelled?
// Otherwise use the new value
tpwin->cur_tp->timestamp = mytime;
+ tpwin->cur_tp->has_timestamp = TRUE;
// TODO: consider warning about unsorted times?
+ // Clear the previous 'Add' image as now a time is set
+ if ( gtk_button_get_image ( GTK_BUTTON(tpwin->localtime) ) )
+ gtk_button_set_image ( GTK_BUTTON(tpwin->localtime), NULL );
+
tpwin_update_times ( tpwin, tpwin->cur_tp );
}
gtk_window_set_title ( GTK_WINDOW(tpwin), _("Trackpoint") );
}
-void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, const gchar *track_name )
+/**
+ * vik_trw_layer_tpwin_set_tp:
+ * @tpwin: The Trackpoint Edit Window
+ * @tpl: The #Glist of trackpoints pointing at the current trackpoint
+ * @track_name: The name of the track in which the trackpoint belongs
+ * @is_route: Is the track of the trackpoint actually a route?
+ *
+ * Sets the Trackpoint Edit Window to the values of the current trackpoint given in @tpl.
+ *
+ */
+void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, const gchar *track_name, gboolean is_route )
{
static char tmp_str[64];
static struct LatLon ll;
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->alt), TRUE );
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->ts), tp->has_timestamp );
gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->localtime), tp->has_timestamp );
+ // Enable adding timestamps - but not on routepoints
+ if ( !tp->has_timestamp && !is_route ) {
+ gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->localtime), TRUE );
+ GtkWidget *img = gtk_image_new_from_stock ( GTK_STOCK_ADD, GTK_ICON_SIZE_MENU );
+ gtk_button_set_image ( GTK_BUTTON(tpwin->localtime), img );
+ }
+ else
vik_trw_layer_tpwin_set_track_name ( tpwin, track_name );
VikTrwLayerTpwin *vik_trw_layer_tpwin_new ( GtkWindow *parent );
void vik_trw_layer_tpwin_set_empty ( VikTrwLayerTpwin *tpwin );
void vik_trw_layer_tpwin_disable_join ( VikTrwLayerTpwin *tpwin );
-void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, const gchar *track_name );
+void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, const gchar *track_name, gboolean is_route );
void vik_trw_layer_tpwin_set_track_name ( VikTrwLayerTpwin *tpwin, const gchar *track_name );
G_END_DECLS