static void trw_layer_free_copied_item ( gint subtype, gpointer item );
static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path );
static gboolean trw_layer_select_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t );
-static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t );
+static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventMotion *event, VikViewport *vvp, tool_ed_t *t );
static gboolean trw_layer_select_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t );
static gboolean trw_layer_show_selected_viewport_menu ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp );
/* End Layer Interface function definitions */
};
static gboolean have_diary_program = FALSE;
-static gboolean have_geojson_export = FALSE;
+static gchar *diary_program = NULL;
+#define VIK_SETTINGS_EXTERNAL_DIARY_PROGRAM "external_diary_program"
+static gboolean have_geojson_export = FALSE;
// NB Only performed once per program run
static void vik_trwlayer_class_init ( VikTrwLayerClass *klass )
{
- if ( g_find_program_in_path( "rednotebook" ) ) {
- gchar *stdout = NULL;
- gchar *stderr = NULL;
+ if ( ! a_settings_get_string ( VIK_SETTINGS_EXTERNAL_DIARY_PROGRAM, &diary_program ) ) {
+#ifdef WINDOWS
+ //diary_program = g_strdup ( "C:\\Program Files\\Rednotebook\\rednotebook.exe" );
+ diary_program = g_strdup ( "C:/Progra~1/Rednotebook/rednotebook.exe" );
+#else
+ diary_program = g_strdup ( "rednotebook" );
+#endif
+ }
+ else {
+ // User specified so assume it works
+ have_diary_program = TRUE;
+ }
+
+ if ( g_find_program_in_path( diary_program ) ) {
+ gchar *mystdout = NULL;
+ gchar *mystderr = NULL;
// Needs RedNotebook 1.7.3+ for support of opening on a specified date
- if ( g_spawn_command_line_sync ( "rednotebook --version", &stdout, &stderr, NULL, NULL ) ) {
+ gchar *cmd = g_strconcat ( diary_program, " --version", NULL ); // "rednotebook --version"
+ if ( g_spawn_command_line_sync ( cmd, &mystdout, &mystderr, NULL, NULL ) ) {
// Annoyingly 1.7.1|2|3 versions of RedNotebook prints the version to stderr!!
- if ( stdout )
- g_debug ("Diary: %s", stdout ); // Should be something like 'RedNotebook 1.4'
- if ( stderr )
- g_warning ("Diary: stderr: %s", stderr );
+ if ( mystdout )
+ g_debug ("Diary: %s", mystdout ); // Should be something like 'RedNotebook 1.4'
+ if ( mystderr )
+ g_warning ("Diary: stderr: %s", mystderr );
gchar **tokens = NULL;
- if ( stdout && g_strcmp0(stdout, "") )
- tokens = g_strsplit(stdout, " ", 0);
- else if ( stderr )
- tokens = g_strsplit(stderr, " ", 0);
+ if ( mystdout && g_strcmp0(mystdout, "") )
+ tokens = g_strsplit(mystdout, " ", 0);
+ else if ( mystderr )
+ tokens = g_strsplit(mystderr, " ", 0);
gint num = 0;
gchar *token = tokens[num];
}
g_strfreev ( tokens );
}
- g_free ( stdout );
- g_free ( stderr );
+ g_free ( mystdout );
+ g_free ( mystderr );
+ g_free ( cmd );
}
if ( g_find_program_in_path ( a_geojson_program_export() ) ) {
{
gchar *statusbar_format_code = NULL;
gboolean need2free = FALSE;
+ VikTrackpoint *trkpt_prev = NULL;
if ( !a_settings_get_string ( VIK_SETTINGS_TRKPT_SELECTED_STATUSBAR_FORMAT, &statusbar_format_code ) ) {
// Otherwise use default
statusbar_format_code = g_strdup ( "KEATDN" );
need2free = TRUE;
}
+ else {
+ // Format code may want to show speed - so may need previous trkpt to work it out
+ trkpt_prev = vik_track_get_tp_prev ( vtl->current_tp_track, trkpt );
+ }
- gchar *msg = vu_trackpoint_formatted_message ( statusbar_format_code, trkpt, NULL, vtl->current_tp_track );
+ gchar *msg = vu_trackpoint_formatted_message ( statusbar_format_code, trkpt, trkpt_prev, vtl->current_tp_track, NAN );
vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, msg );
g_free ( msg );
}
/**
- * Open a diary at the specified date
+ * Open a program at the specified date
+ * Mainly for RedNotebook - http://rednotebook.sourceforge.net/
+ * But could work with any program that accepts a command line of --date=<date>
+ * FUTURE: Allow configuring of command line options + date format
*/
static void trw_layer_diary_open ( VikTrwLayer *vtl, const gchar *date_str )
{
GError *err = NULL;
- gchar *cmd = g_strdup_printf ( "%s%s", "rednotebook --date=", date_str );
+ gchar *cmd = g_strdup_printf ( "%s %s%s", diary_program, "--date=", date_str );
if ( ! g_spawn_command_line_async ( cmd, &err ) ) {
- a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Could not launch %s to open file."), "rednotebook" );
+ a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Could not launch %s to open file."), diary_program );
g_error_free ( err );
}
g_free ( cmd );
static void marker_end_move ( tool_ed_t *t );
//
-static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t* t )
+static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventMotion *event, VikViewport *vvp, tool_ed_t* t )
{
if ( t->holding ) {
VikCoord new_coord;
{
if ( t->holding && event->button == 1 )
{
+ // Prevent accidental (small) shifts when specific movement has not been requested
+ // (as the click release has occurred within the click object detection area)
+ if ( !t->moving )
+ return FALSE;
+
VikCoord new_coord;
vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord );
vik_viewport_sync(t->vvp);
t->oldx = x;
t->oldy = y;
+ t->moving = FALSE;
}
static void marker_moveto ( tool_ed_t *t, gint x, gint y )
vik_viewport_draw_rectangle ( vvp, t->gc, FALSE, x-3, y-3, 6, 6 );
t->oldx = x;
t->oldy = y;
+ t->moving = TRUE;
if (tool_sync_done) {
g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, tool_sync, vvp, NULL);
vik_viewport_draw_rectangle ( t->vvp, t->gc, FALSE, t->oldx-3, t->oldy-3, 6, 6 );
g_object_unref ( t->gc );
t->holding = FALSE;
+ t->moving = FALSE;
}
/*** Edit waypoint ****/