27 |
|
|
28 |
#include <math.h> |
#include <math.h> |
29 |
|
|
30 |
|
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) |
31 |
|
#include <hildon/hildon-note.h> |
32 |
|
#include <hildon/hildon-entry.h> |
33 |
|
#include <hildon/hildon-check-button.h> |
34 |
|
#endif |
35 |
|
|
36 |
#if !defined(LIBXML_TREE_ENABLED) || !defined(LIBXML_OUTPUT_ENABLED) |
#if !defined(LIBXML_TREE_ENABLED) || !defined(LIBXML_OUTPUT_ENABLED) |
37 |
#error "libxml doesn't support required tree or output" |
#error "libxml doesn't support required tree or output" |
38 |
#endif |
#endif |
48 |
|
|
49 |
#define TAG_STATE GTK_STATE_PRELIGHT |
#define TAG_STATE GTK_STATE_PRELIGHT |
50 |
|
|
51 |
|
static GtkWidget *check_button_new_with_label(char *label) { |
52 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
53 |
|
return gtk_check_button_new_with_label(label); |
54 |
|
#else |
55 |
|
GtkWidget *cbut = |
56 |
|
hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH); |
57 |
|
gtk_button_set_label(GTK_BUTTON(cbut), label); |
58 |
|
return cbut; |
59 |
|
#endif |
60 |
|
} |
61 |
|
|
62 |
|
static void check_button_set_active(GtkWidget *button, gboolean active) { |
63 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
64 |
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); |
65 |
|
#else |
66 |
|
hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active); |
67 |
|
#endif |
68 |
|
} |
69 |
|
|
70 |
|
static gboolean check_button_get_active(GtkWidget *button) { |
71 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
72 |
|
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); |
73 |
|
#else |
74 |
|
return hildon_check_button_get_active(HILDON_CHECK_BUTTON(button)); |
75 |
|
#endif |
76 |
|
} |
77 |
|
|
78 |
static notes_t *notes_load(appdata_t *appdata, cache_t *cache) { |
static notes_t *notes_load(appdata_t *appdata, cache_t *cache) { |
79 |
notes_t *notes = NULL; |
notes_t *notes = NULL; |
80 |
xmlDoc *doc = NULL; |
xmlDoc *doc = NULL; |
198 |
char *text, pos_t pos, |
char *text, pos_t pos, |
199 |
gboolean override, gboolean found, |
gboolean override, gboolean found, |
200 |
time_t ftime, gboolean logged) { |
time_t ftime, gboolean logged) { |
201 |
|
|
202 |
|
g_assert(context); |
203 |
|
g_assert(context->cache); |
204 |
|
|
205 |
|
printf("write\n"); |
206 |
|
|
207 |
/* build local path */ |
/* build local path */ |
208 |
int path_len = strlen(context->appdata->image_path) + |
int path_len = strlen(context->appdata->image_path) + |
209 |
2 * strlen(context->cache->id) + 6; |
2 * strlen(context->cache->id) + 6; |
210 |
|
printf("plen = %d\n", path_len); |
211 |
|
|
212 |
char *path = malloc(path_len); |
char *path = malloc(path_len); |
213 |
snprintf(path, path_len, "%s%s/%s.gpx", |
snprintf(path, path_len, "%s%s/%s.gpx", |
214 |
context->appdata->image_path, |
context->appdata->image_path, |
220 |
return -1; |
return -1; |
221 |
} |
} |
222 |
|
|
223 |
|
printf("still al\n"); |
224 |
|
|
225 |
LIBXML_TEST_VERSION; |
LIBXML_TEST_VERSION; |
226 |
|
|
227 |
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); |
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); |
293 |
&start, &end, FALSE); |
&start, &end, FALSE); |
294 |
|
|
295 |
pos_t pos; |
pos_t pos; |
296 |
pos.lat = lat_get(context->notes.latw); |
pos.lat = lat_entry_get(context->notes.latw); |
297 |
pos.lon = lon_get(context->notes.lonw); |
pos.lon = lon_entry_get(context->notes.lonw); |
298 |
|
|
299 |
gboolean override = |
gboolean override = |
300 |
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(context->notes.overridew)); |
check_button_get_active(context->notes.overridew); |
301 |
gboolean found = |
gboolean found = |
302 |
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(context->notes.foundw)); |
check_button_get_active(context->notes.foundw); |
303 |
gboolean logged = |
gboolean logged = |
304 |
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(context->notes.loggedw)); |
check_button_get_active(context->notes.loggedw); |
305 |
|
|
306 |
/* required accuracy is 1/60000 degree */ |
if(pos_differ(&pos, &context->cache->pos)) |
307 |
if(((int)(pos.lat * 60000 + .5) != |
printf("position is modified\n"); |
|
(int)(context->cache->pos.lat * 60000 + .5)) || |
|
|
((int)(pos.lon * 60000 + .5) != |
|
|
(int)(context->cache->pos.lon * 60000 + .5))) |
|
|
printf("position is modified %f != %f / %f != %f\n", |
|
|
pos.lat * 60000 + .5, context->cache->pos.lat * 60000 + .5, |
|
|
pos.lon * 60000 + .5, context->cache->pos.lon * 60000 + .5); |
|
308 |
if(override || found) |
if(override || found) |
309 |
printf("flags are set\n"); |
printf("flags are set\n"); |
310 |
if(strlen(text)) |
if(strlen(text)) |
311 |
printf("text is present\n"); |
printf("text is present\n"); |
312 |
|
|
313 |
/* check if the notes are empty */ |
/* check if the notes are empty */ |
314 |
if(((int)(pos.lat * 60000 + .5) == |
if(!pos_differ(&pos, &context->cache->pos) && |
|
(int)(context->cache->pos.lat * 60000 + .5)) && |
|
|
((int)(pos.lon * 60000 + .5) == |
|
|
(int)(context->cache->pos.lon * 60000 + .5)) && |
|
315 |
!override && !found && !logged && (strlen(text) == 0)) { |
!override && !found && !logged && (strlen(text) == 0)) { |
316 |
printf("notes are in default state, removing them if present\n"); |
printf("notes are in default state, removing them if present\n"); |
317 |
|
|
364 |
/* we have to do two things here: */ |
/* we have to do two things here: */ |
365 |
/* - update the notes.xml file on disk */ |
/* - update the notes.xml file on disk */ |
366 |
/* - update the notes entry in the loaded gpx tree */ |
/* - update the notes entry in the loaded gpx tree */ |
367 |
|
|
368 |
/* update file on disk */ |
/* update file on disk */ |
369 |
notes_write_file(context, text, pos, override, found, |
notes_write_file(context, text, pos, override, found, |
370 |
context->notes.ftime, logged); |
context->notes.ftime, logged); |
371 |
|
|
372 |
/* search for matching caches and replace note there */ |
/* search for matching caches and replace note there */ |
373 |
notes_t *note = NULL; |
notes_t *note = NULL; |
374 |
gpx_t *gpx = context->appdata->gpx; |
gpx_t *gpx = context->appdata->gpx; |
459 |
static void ftime_update(GtkWidget *widget, cache_context_t *context, |
static void ftime_update(GtkWidget *widget, cache_context_t *context, |
460 |
gboolean update) { |
gboolean update) { |
461 |
/* check if it has been selected */ |
/* check if it has been selected */ |
462 |
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { |
if(check_button_get_active(widget)) { |
463 |
printf("set active\n"); |
printf("set active\n"); |
464 |
|
|
465 |
if(update) |
if(update) |
491 |
printf("was foundw\n"); |
printf("was foundw\n"); |
492 |
|
|
493 |
/* about to remove "found" flag -> ask for confirmation */ |
/* about to remove "found" flag -> ask for confirmation */ |
494 |
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { |
if(!check_button_get_active(widget)) { |
495 |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
496 |
GtkWidget *dialog = gtk_message_dialog_new( |
GtkWidget *dialog = gtk_message_dialog_new( |
497 |
GTK_WINDOW(context->appdata->window), |
GTK_WINDOW(context->appdata->window), |
527 |
printf("was loggedw\n"); |
printf("was loggedw\n"); |
528 |
|
|
529 |
/* about to remove "found" flag -> ask for confirmation */ |
/* about to remove "found" flag -> ask for confirmation */ |
530 |
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { |
if(!check_button_get_active(widget)) { |
531 |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
532 |
GtkWidget *dialog = gtk_message_dialog_new( |
GtkWidget *dialog = gtk_message_dialog_new( |
533 |
GTK_WINDOW(context->appdata->window), |
GTK_WINDOW(context->appdata->window), |
617 |
/* -------------- custom coordinate ---------------- */ |
/* -------------- custom coordinate ---------------- */ |
618 |
|
|
619 |
GtkWidget *table = gtk_table_new(2, 4, FALSE); |
GtkWidget *table = gtk_table_new(2, 4, FALSE); |
620 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
621 |
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 16); |
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 16); |
622 |
gtk_table_set_col_spacing(GTK_TABLE(table), 2, 16); |
gtk_table_set_col_spacing(GTK_TABLE(table), 2, 16); |
623 |
|
#endif |
624 |
|
|
625 |
gtk_table_attach_defaults(GTK_TABLE(table), |
gtk_table_attach_defaults(GTK_TABLE(table), |
626 |
gtk_label_new(_("New coordinate:")), 0, 1, 0, 1); |
gtk_label_new(_("New coordinate:")), 0, 1, 0, 1); |
627 |
context->notes.overridew = gtk_check_button_new_with_label(_("Override")); |
context->notes.overridew = check_button_new_with_label(_("Override")); |
628 |
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(context->notes.overridew), |
check_button_set_active(context->notes.overridew, |
629 |
cache->notes && cache->notes->override); |
cache->notes && cache->notes->override); |
630 |
gtk_table_attach_defaults(GTK_TABLE(table), |
gtk_table_attach_defaults(GTK_TABLE(table), |
631 |
context->notes.overridew, 0, 1, 1, 2); |
context->notes.overridew, 0, 1, 1, 2); |
632 |
|
|
633 |
GtkWidget *hbox = gtk_hbox_new(FALSE, 2); |
GtkWidget *hbox = gtk_hbox_new(FALSE, 2); |
634 |
|
|
635 |
context->notes.foundw = gtk_check_button_new_with_label(_("Found")); |
context->notes.foundw = check_button_new_with_label(_("Found")); |
636 |
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(context->notes.foundw), |
check_button_set_active(context->notes.foundw, |
637 |
cache->notes && cache->notes->found); |
cache->notes && cache->notes->found); |
638 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->notes.foundw); |
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->notes.foundw); |
639 |
|
|
640 |
context->notes.loggedw = gtk_check_button_new_with_label(_("Logged")); |
context->notes.loggedw = check_button_new_with_label(_("Logged")); |
641 |
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(context->notes.loggedw), |
check_button_set_active(context->notes.loggedw, |
642 |
cache->notes && cache->notes->logged); |
cache->notes && cache->notes->logged); |
643 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->notes.loggedw); |
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->notes.loggedw); |
644 |
|
|
645 |
gtk_table_attach_defaults(GTK_TABLE(table), hbox, 3, 4, 0, 1); |
gtk_table_attach_defaults(GTK_TABLE(table), hbox, 3, 4, 0, 1); |
651 |
gtk_widget_set_sensitive(context->notes.foundw, FALSE); |
gtk_widget_set_sensitive(context->notes.foundw, FALSE); |
652 |
|
|
653 |
context->notes.datew = gtk_label_new(""); |
context->notes.datew = gtk_label_new(""); |
654 |
gtk_misc_set_alignment(GTK_MISC(context->notes.datew), 0.0f, 0.5f); |
gtk_misc_set_alignment(GTK_MISC(context->notes.datew), 0.5f, 0.5f); |
655 |
gtk_table_attach_defaults(GTK_TABLE(table), |
gtk_table_attach_defaults(GTK_TABLE(table), |
656 |
context->notes.datew, 3, 4, 1, 2); |
context->notes.datew, 3, 4, 1, 2); |
657 |
ftime_update(context->notes.foundw, context, FALSE); |
ftime_update(context->notes.foundw, context, FALSE); |
660 |
if(cache->notes) pos = cache->notes->pos; |
if(cache->notes) pos = cache->notes->pos; |
661 |
|
|
662 |
gtk_table_attach_defaults(GTK_TABLE(table), |
gtk_table_attach_defaults(GTK_TABLE(table), |
663 |
context->notes.latw = lat_entry_new(pos.lat), 2, 3, 0, 1); |
context->notes.latw = lat_entry_new(pos.lat), 2, 3, 0, 1); |
664 |
g_signal_connect(G_OBJECT(context->notes.latw), "focus-out-event", |
g_signal_connect(G_OBJECT(context->notes.latw), "focus-out-event", |
665 |
G_CALLBACK(focus_out), context); |
G_CALLBACK(focus_out), context); |
666 |
|
|
667 |
gtk_table_attach_defaults(GTK_TABLE(table), |
gtk_table_attach_defaults(GTK_TABLE(table), |
668 |
context->notes.lonw = lon_entry_new(pos.lon), 2, 3, 1, 2); |
context->notes.lonw = lon_entry_new(pos.lon), 2, 3, 1, 2); |
669 |
g_signal_connect(G_OBJECT(context->notes.lonw), "focus-out-event", |
g_signal_connect(G_OBJECT(context->notes.lonw), "focus-out-event", |
670 |
G_CALLBACK(focus_out), context); |
G_CALLBACK(focus_out), context); |
671 |
|
|
672 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
673 |
hbox = gtk_hbox_new(FALSE, 0); |
hbox = gtk_hbox_new(FALSE, 0); |
674 |
gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0); |
675 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
676 |
|
#else |
677 |
|
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); |
678 |
|
#endif |
679 |
|
|
680 |
#ifndef USE_PANNABLE_AREA |
#ifndef USE_PANNABLE_AREA |
681 |
GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); |
GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); |
697 |
hildon_text_view_set_buffer(HILDON_TEXT_VIEW(view), context->notes.buffer); |
hildon_text_view_set_buffer(HILDON_TEXT_VIEW(view), context->notes.buffer); |
698 |
#endif |
#endif |
699 |
|
|
700 |
|
/* if the cache has been marked found in the logs already, there's */ |
701 |
|
/* no need/use to be able to change all this */ |
702 |
|
if(cache->found) { |
703 |
|
gtk_widget_set_sensitive(table, FALSE); |
704 |
|
gtk_widget_set_sensitive(view, FALSE); |
705 |
|
} |
706 |
|
|
707 |
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD); |
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD); |
708 |
gtk_text_view_set_editable(GTK_TEXT_VIEW(view), TRUE); |
gtk_text_view_set_editable(GTK_TEXT_VIEW(view), TRUE); |
709 |
gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 2 ); |
gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 2 ); |
762 |
|
|
763 |
pos_t notes_get_pos(cache_context_t *context) { |
pos_t notes_get_pos(cache_context_t *context) { |
764 |
pos_t pos = context->cache->pos; |
pos_t pos = context->cache->pos; |
765 |
if(gtk_toggle_button_get_active( |
if(check_button_get_active(context->notes.overridew)) { |
766 |
GTK_TOGGLE_BUTTON(context->notes.overridew))) { |
pos.lat = lat_entry_get(context->notes.latw); |
767 |
pos.lat = lat_get(context->notes.latw); |
pos.lon = lon_entry_get(context->notes.lonw); |
|
pos.lon = lon_get(context->notes.lonw); |
|
768 |
} |
} |
769 |
return pos; |
return pos; |
770 |
} |
} |
771 |
|
|
772 |
gboolean notes_get_override(cache_context_t *context) { |
gboolean notes_get_override(cache_context_t *context) { |
773 |
/* get override value */ |
/* get override value */ |
774 |
return gtk_toggle_button_get_active( |
return check_button_get_active(context->notes.overridew); |
|
GTK_TOGGLE_BUTTON(context->notes.overridew)); |
|
|
|
|
775 |
} |
} |
776 |
|
|
777 |
typedef struct { |
typedef struct { |
924 |
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE,0); |
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE,0); |
925 |
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
926 |
GtkWidget *button = gtk_button_new_with_label(_("Browse")); |
GtkWidget *button = gtk_button_new_with_label(_("Browse")); |
927 |
|
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
928 |
|
hildon_gtk_widget_set_theme_size(button, |
929 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
930 |
|
#endif |
931 |
gtk_signal_connect(GTK_OBJECT(button), "clicked", |
gtk_signal_connect(GTK_OBJECT(button), "clicked", |
932 |
GTK_SIGNAL_FUNC(on_browse), (gpointer)&context); |
GTK_SIGNAL_FUNC(on_browse), (gpointer)&context); |
933 |
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE,0); |
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE,0); |