11
#include "converter.h"
12
#include "interface.h"
14
#include "tile_management.h"
17
#include <glib/gprintf.h>
24
#define POI_DB "poi.db"
26
GtkListStore *list_store;
28
gchar *my_strescape (const gchar *source, const gchar *exceptions);
29
gchar *my_strescape_back (const gchar *source, const gchar *exceptions);
39
static GtkWidget *combobox_subcat = NULL;
40
static gboolean new_dialog = TRUE;
44
#define POI_DB_CREATE "CREATE TABLE poi ( \
45
idmd5 TEXT, lat REAL, lon REAL, visibility REAL, cat REAL, subcat REAL, \
46
keywords TEXT, desc TEXT, price_range REAL, extended_open REAL, \
47
creator TEXT, bookmarked REAL, user_rating REAL, rating REAL, user_comment TEXT);"
52
parse_degrees(const char *s)
57
if (3 == sscanf(s, "%f %f %f", °, &min, &sec))
58
return deg + min/60 + sec/3600;
59
else if (3 == sscanf(s, "%f° %f' %f\"", °, &min, &sec))
60
return deg + min/60 + sec/3600;
61
else if (3 == sscanf(s, "%f°%f'%f\"", °, &min, &sec))
62
return deg + min/60 + sec/3600;
64
else if (2 == sscanf(s, "%f %f", °, &min))
66
else if (2 == sscanf(s, "%f° %f'", °, &min))
68
else if (2 == sscanf(s, "%f°%f'", °, &min))
71
else if (1 == sscanf(s, "%f", °))
79
sql_cb__poi_get(void *unused, int colc, char **colv, char **col_names)
81
poi_t *poi = g_new0(poi_t,1);
83
printf("*** %s(): \n",__PRETTY_FUNCTION__);
85
poi->idmd5 = g_strdup(colv[0]);
86
poi->lat_deg = atof(colv[1]);
87
poi->lon_deg = atof(colv[2]);
88
poi->visibility = atoi(colv[3]);
89
poi->category = atoi(colv[4]);
90
poi->subcategory = atoi(colv[5]);
91
poi->keywords = g_strdup(colv[6]);
92
poi->desc = g_strdup(colv[7]);
93
poi->price_range = atoi(colv[8]);
94
poi->extended_open = atoi(colv[9]);
96
poi_list = g_slist_prepend(poi_list, poi);
112
int pixel_x, pixel_y, x, y;
116
GError *error = NULL;
117
static GdkPixbuf *photo_icon = NULL;
120
printf("*** %s(): \n",__PRETTY_FUNCTION__);
123
gc = gdk_gc_new(pixmap);
127
gdk_gc_set_rgb_fg_color(gc, &color);
132
photo_icon = gdk_pixbuf_new_from_file_at_size (
133
PACKAGE_PIXMAPS_DIR "/tangogps-poi.png", 25,25,
141
for(list = poi_list; list != NULL; list = list->next)
143
poi_t *p = list->data;
145
lat = deg2rad(p->lat_deg);
146
lon = deg2rad(p->lon_deg);
150
pixel_x = lon2pixel(global_zoom, lon);
151
pixel_y = lat2pixel(global_zoom, lat);
153
x = pixel_x - global_x;
154
y = pixel_y - global_y;
181
GDK_RGB_DITHER_NONE, 0, 0);
185
gtk_widget_queue_draw_area (
190
printf("POI: %s lat %f - lon %f\n",p->keywords,p->lat_deg, p->lon_deg);
199
create_combobox_list_store(char *list)
201
GtkListStore *list_store;
206
list_store = gtk_list_store_new (N_COLUMNS,
211
array = g_strsplit(list,"|",-1);
217
gtk_list_store_append (list_store, &iter);
218
gtk_list_store_set (list_store, &iter,
219
COLUMN_STRING, array[i],
221
COLUMN_BOOLEAN, FALSE,
234
on_combobox_subcat_changed (GtkComboBox *combobox,
244
printf("*** %s(): \n",__PRETTY_FUNCTION__);
246
gtk_combo_box_get_active_iter(combobox, &iter);
248
gtk_tree_model_get (GTK_TREE_MODEL(list_store), &iter,
249
COLUMN_STRING, &str_data,
250
COLUMN_INT, &int_data,
252
printf("Entry: (%s,%d)\n", str_data, int_data);
256
void set_combobox_subcat(GtkWidget *widget, int choice)
259
GtkCellRenderer *renderer;
261
char *subcat_lists[15];
262
printf("*** %s(): \n",__PRETTY_FUNCTION__);
264
subcat_lists[0] = "---";
265
subcat_lists[1] = "- Please choose -|Hotel|Motel|B&B|Hostel|Camping";
266
subcat_lists[2] = "- Please choose -|Bank / Exchange / ATM|Post Office|Real Estate Agency|Travel Agency|Other";
267
subcat_lists[3] = "- Please choose -|Parking|Gas Station|Repair Shop|Rental|Sharing|Dealer|Radar - Speed Trap|My Car";
268
subcat_lists[4] = "- Please choose -|Cinema|Theatre|Concert Hall|Opera|Casino";
269
subcat_lists[5] = "- Please choose -|Pharmacy|Hospital|Doctor";
270
subcat_lists[6] = "- Please choose -|Cafe|Pub|Lounge Bar|Club|Dancing|Internet Cafe|Wifi Hot Spot";
271
subcat_lists[7] = "- Please choose -|Church|Mosque|Synagoge|Temple|Cemetary";
272
subcat_lists[8] = "- Please choose -|Bus|Metro|Tram|Taxi|Train Station|Bike|Port|Airport";
273
subcat_lists[9] = "- Please choose -|Local Food|European|Asian|American|African|Pizza|Fast Food|Take Away|Barbeque|Italian|Mexican|Indian|Japanese|French";
274
subcat_lists[10] = "- Please choose -|Wifi Hotspot|ATM-Money Dispenser|Post Office/Letter Box|Laundry|Hairdresser|Other";
275
subcat_lists[11] = "- Please choose -|Tourist Info|Monument|Museum|Zoo|Viewpoint|Relief Map|Other";
276
subcat_lists[12] = "- Please choose -|Supermarket|Shopping Center|Clothes|Shoes|Food|Baker|Butcher|DoItYourself|Other";
277
subcat_lists[13] = "- Please choose -|Arena/Stadium|Swimming Pool|Freeclimbing|Ice Skating|Golf|Geo Cache|Other";
278
subcat_lists[14] = "- Please choose -|Friend|Other Cool Place";
280
vbox = lookup_widget(widget, "vbox28");
281
list_store = create_combobox_list_store(subcat_lists[choice]);
284
if((!combobox_subcat || new_dialog ) && choice)
286
combobox_subcat = gtk_combo_box_new_with_model (GTK_TREE_MODEL(list_store));
287
gtk_widget_show (combobox_subcat);
288
gtk_box_pack_start (GTK_BOX (vbox),combobox_subcat, FALSE, TRUE, 0);
289
renderer = gtk_cell_renderer_text_new();
290
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox_subcat), renderer, TRUE);
291
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox_subcat), renderer, "text", 0, NULL);
292
g_signal_connect ((gpointer) combobox_subcat, "changed",
293
G_CALLBACK (on_combobox_subcat_changed),
295
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_subcat), 0);
297
gtk_box_reorder_child(GTK_BOX(vbox),combobox_subcat,4);
302
gtk_combo_box_set_model(GTK_COMBO_BOX(combobox_subcat), GTK_TREE_MODEL(list_store));
303
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_subcat), 0);
311
on_combobox_cat_changed(GtkComboBox *combobox)
314
printf("*** %s(): \n",__PRETTY_FUNCTION__);
317
choice = gtk_combo_box_get_active(combobox);
320
set_combobox_subcat(GTK_WIDGET(combobox),choice);
329
GtkWidget *entry14, *entry15, *combobox2;
331
double lat, lon, lat_deg, lon_deg;
334
printf("*** %s(): \n",__PRETTY_FUNCTION__);
335
dialog = create_window6();
336
gtk_widget_show(dialog);
340
lat = pixel2lat(global_zoom, global_y+mouse_y);
341
lon = pixel2lon(global_zoom, global_x+mouse_x);
342
lat_deg = rad2deg(lat);
343
lon_deg = rad2deg(lon);
344
entry14 = lookup_widget(dialog, "entry14");
345
entry15 = lookup_widget(dialog, "entry15");
347
g_sprintf(buf, "%f", lat_deg);
348
gtk_entry_set_text(GTK_ENTRY(entry14), buf);
349
g_sprintf(buf, "%f", lon_deg);
350
gtk_entry_set_text(GTK_ENTRY(entry15), buf);
353
combobox2 = lookup_widget(dialog, "combobox2");
354
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox2), 0);
361
set_poi(GtkWidget *dialog)
363
GtkComboBox *combo_box;
364
GtkTextView *text_view;
365
GtkTextBuffer *buffer;
366
GtkTextIter start, end;
367
GtkWidget *entry, *radiobutton;
369
const char *keyword_raw;
370
char *desc, *desc_raw, *keyword;
373
int visibility, price_range = 0, extended_open;
374
int category, subcategory;
375
double lat_deg, lon_deg;
379
printf("*** %s(): \n",__PRETTY_FUNCTION__);
381
entry = lookup_widget(dialog, "entry14");
383
lat_deg = parse_degrees(gtk_entry_get_text(GTK_ENTRY(entry)));
384
entry = lookup_widget(dialog, "entry15");
386
lon_deg = parse_degrees(gtk_entry_get_text(GTK_ENTRY(entry)));
387
radiobutton = lookup_widget(dialog, "radiobutton11");
388
visibility = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) ? 1 : 0;
389
combo_box = GTK_COMBO_BOX(lookup_widget(dialog, "combobox2"));
390
category = gtk_combo_box_get_active(combo_box);
391
subcategory = gtk_combo_box_get_active(GTK_COMBO_BOX(combobox_subcat));
392
entry = lookup_widget(dialog, "entry13");
393
keyword_raw = gtk_entry_get_text(GTK_ENTRY(entry));
394
keyword = my_strescape(keyword_raw, NULL);
395
text_view = GTK_TEXT_VIEW(lookup_widget(dialog, "textview1"));
396
buffer = gtk_text_view_get_buffer(text_view);
397
gtk_text_buffer_get_start_iter (buffer, &start);
398
gtk_text_buffer_get_end_iter (buffer, &end);
399
desc_raw = gtk_text_buffer_get_text(buffer, &start, &end, TRUE);
400
desc = my_strescape(desc_raw, NULL);
401
radiobutton = lookup_widget(dialog, "radiobutton8");
402
price_range = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) ? 1 : price_range;
403
radiobutton = lookup_widget(dialog, "radiobutton9");
404
price_range = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) ? 3 : price_range;
405
radiobutton = lookup_widget(dialog, "radiobutton10");
406
price_range = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) ? 5 : price_range;
407
radiobutton = lookup_widget(dialog, "checkbutton10");
408
extended_open = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) ? 1 : 0;
411
rand1 = g_random_double_range (100000000,1000000000);
412
rand2 = g_random_double_range (100000000,1000000000);
415
db = g_strconcat(tangogps_dir, "/", POI_DB, NULL);
417
sql = g_strdup_printf(
419
"(idmd5, lat, lon, visibility, cat, subcat, keywords, desc, price_range, extended_open) "
420
"VALUES ('%.0f%.0f',%f,%f,%d,%d,%d,'%s','%s',%d,%d)",
421
rand1, rand2, lat_deg, lon_deg, visibility, category, subcategory,
422
keyword, desc, price_range, extended_open);
424
printf("SQL: %s\n",sql);
425
printf("size of gdouble: %d",sizeof(double));
427
res = sql_execute(db, sql, NULL);
431
sql_execute(db, POI_DB_CREATE, NULL);
432
sql_execute(db, sql, NULL);
438
gtk_widget_destroy(dialog);
441
global_poi_cat = category;
446
update_poi(GtkWidget *dialog)
449
GtkTextView *text_view;
450
GtkTextBuffer *buffer;
451
GtkTextIter start, end;
452
GtkWidget *entry, *widget;
454
const char *keyword_raw, *idmd5;
455
char *desc, *desc_raw, *keyword;
460
double lat_deg, lon_deg;
464
printf("*** %s(): \n",__PRETTY_FUNCTION__);
467
widget = lookup_widget(dialog, "label126");
468
idmd5 = gtk_label_get_text(GTK_LABEL(widget));
470
entry = lookup_widget(dialog, "entry17");
472
lat_deg = parse_degrees(gtk_entry_get_text(GTK_ENTRY(entry)));
473
entry = lookup_widget(dialog, "entry18");
475
lon_deg = parse_degrees(gtk_entry_get_text(GTK_ENTRY(entry)));
483
entry = lookup_widget(dialog, "entry19");
484
keyword_raw = gtk_entry_get_text(GTK_ENTRY(entry));
485
keyword = my_strescape(keyword_raw, NULL);
486
text_view = GTK_TEXT_VIEW(lookup_widget(dialog, "textview2"));
487
buffer = gtk_text_view_get_buffer(text_view);
488
gtk_text_buffer_get_start_iter (buffer, &start);
489
gtk_text_buffer_get_end_iter (buffer, &end);
490
desc_raw = gtk_text_buffer_get_text(buffer, &start, &end, TRUE);
491
desc = my_strescape(desc_raw, NULL);
494
db = g_strconcat(tangogps_dir, "/", POI_DB, NULL);
498
sql = g_strdup_printf(
510
keyword, desc, idmd5);
513
printf("SQL: %s\n",sql);
515
res = sql_execute(db, sql, NULL);
519
sql_execute(db, POI_DB_CREATE, NULL);
520
sql_execute(db, sql, NULL);
527
gtk_widget_destroy(dialog);
544
printf("*** %s(): \n",__PRETTY_FUNCTION__);
548
db = g_strconcat(tangogps_dir, "/", POI_DB, NULL);
550
sql = g_strdup_printf(
557
printf("SQL: %s\n",sql);
559
res = sql_execute(db, sql, NULL);
579
printf("*** %s(): \n",__PRETTY_FUNCTION__);
581
bbox = get_bbox_deg();
583
db = g_strconcat(tangogps_dir, "/", POI_DB, NULL);
586
if(poi_list) g_slist_free(poi_list);
591
if(global_poi_cat==0)
595
"WHERE lat<%f AND lat>%f AND lon>%f AND lon<%f "
602
else if(global_poi_cat>=1)
607
"WHERE cat=%d AND lat<%f AND lat>%f AND lon>%f AND lon<%f "
621
g_slist_free(poi_list);
624
sql_execute(db, sql, sql_cb__poi_get);
627
global_show_pois = TRUE;
634
GtkWidget *window, *widget;
637
gchar *buffer = NULL, *buffer2 = NULL;
638
gboolean poi_found = FALSE;
639
float lat, lon,lat_deg,lon_deg;
641
waypoint_t *wp = g_new0(waypoint_t, 1);
642
poi_t *p, *this_poi = NULL;
644
window = create_window5();
646
printf("screen x,y: %d %d \n",mouse_x, mouse_y);
647
lat = pixel2lat(global_zoom, global_y+mouse_y);
648
lon = pixel2lon(global_zoom, global_x+mouse_x);
652
lat_deg = rad2deg(lat);
653
lon_deg = rad2deg(lon);
654
printf ("##### Lonitude: %f %f - %f %f \n", lat, lon, lat_deg, lon_deg);
657
if(gpsdata !=NULL && !global_myposition.lat && !global_myposition.lon)
660
acos(sin(deg2rad(gpsdata->fix.latitude)) *
663
cos(deg2rad(gpsdata->fix.latitude)) *
665
cos(lon - deg2rad(gpsdata->fix.longitude)) );
667
else if(global_myposition.lat && global_myposition.lon)
670
acos(sin(deg2rad(global_myposition.lat)) *
673
cos(deg2rad(global_myposition.lat)) *
675
cos(lon - deg2rad(global_myposition.lon)) );
679
printf("*** %s(): \n",__PRETTY_FUNCTION__);
684
label = lookup_widget(window,"label110");
691
for(list = poi_list; list != NULL; list = list->next)
694
printf("\n\nPIXEL POI: %d %d \n\n",p->screen_x,p->screen_y);
696
if(abs(p->screen_x - mouse_x) < 12 &&
697
abs(p->screen_y - mouse_y) < 12 )
701
printf("FOUND POI X: %d %d %s\n",p->screen_x, mouse_x,
702
my_strescape_back(p->keywords,NULL));
705
buffer = g_strdup_printf(
707
my_strescape_back(p->keywords,NULL));
708
buffer2 = g_strdup_printf("%s \n\nDistance: %.3fkm ",
709
my_strescape_back(p->desc,NULL), distance);
710
printf("%s %s \n",buffer, buffer2);
713
wp->lat = deg2rad(p->lat_deg);
714
wp->lon = deg2rad(p->lon_deg);
716
this_poi = list->data;
722
g_sprintf(buffer, "<b>No POI found</b>\n");
724
gtk_label_set_label(GTK_LABEL(label),buffer);
726
label = lookup_widget(window,"label111");
727
gtk_label_set_label(GTK_LABEL(label), buffer2);
729
widget = lookup_widget(window, "button27");
730
g_signal_connect ( (gpointer) widget, "clicked",
731
G_CALLBACK (on_button27_clicked),
734
if (this_poi != NULL)
736
this_poi->widget = window;
738
widget = lookup_widget(window, "button33");
739
g_signal_connect ( (gpointer) widget, "clicked",
740
G_CALLBACK (on_button33_clicked),
741
(gpointer) this_poi);
743
widget = lookup_widget(window, "button34");
744
g_signal_connect ( (gpointer) widget, "clicked",
745
G_CALLBACK (on_button34_clicked),
746
(gpointer) this_poi);
749
gtk_widget_show(window);
755
my_strescape (const gchar *source,
756
const gchar *exceptions)
763
g_return_val_if_fail (source != NULL, NULL);
765
p = (guchar *) source;
767
q = dest = g_malloc (strlen (source) * 4 + 1);
769
memset (excmap, 0, 256);
772
guchar *e = (guchar *) exceptions;
810
my_strescape_back (const gchar *source,
811
const gchar *exceptions)
818
g_return_val_if_fail (source != NULL, NULL);
820
p = (guchar *) source;
822
q = dest = g_malloc (strlen (source) * 4 + 1);
824
memset (excmap, 0, 256);
827
guchar *e = (guchar *) exceptions;