]> err.no Git - mapper/commitdiff
Add click on POI info dialog using gtkhtml for nice output
authorKaj-Michael Lang <milang@tal.org>
Sat, 3 Nov 2007 17:03:08 +0000 (19:03 +0200)
committerKaj-Michael Lang <milang@tal.org>
Sat, 3 Nov 2007 17:03:08 +0000 (19:03 +0200)
src/map.c
src/poi-gui.c
src/poi-gui.h

index 2024f301a8c0bed43b043c1a76b3c3c190a306ca..dfd22c1f5fd56eb2df927e116147ad2ccb202463 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -1192,6 +1192,8 @@ case 1:
        unit2latlon(ux, uy, lat, lon);
        if (map_poi_find_at_latlon(lat, lon, &poi_id)==TRUE) {
                g_printf("POI: %d\n", poi_id);
+               if (poi_info_dialog(poi_id)==FALSE)
+                       g_printerr("Huh? Failed to display info dialog\n");
        } else {
                map_drag_start(event->x, event->y);
        }
index 790d9152a21545a1d55a8ad502cf08cd3fbb9655..dddaa85be60025a294916404d39163f2a57be397 100644 (file)
@@ -16,6 +16,7 @@
 #include <fcntl.h>
 #include <libintl.h>
 #include <locale.h>
+#include <gtkhtml/gtkhtml.h>
 
 #include "utils.h"
 #include "poi.h"
@@ -675,6 +676,59 @@ if (poi_category_list())
 return TRUE;
 }
 
+gboolean
+poi_info_dialog(guint poi_id)
+{
+GtkWidget *dialog;
+GtkWidget *info;
+GtkWidget *sw;
+poi_info *p;
+gchar *phtml;
+
+p=poi_get_by_id(poi_id);
+if (!p)
+       return FALSE;
+
+phtml=g_strdup_printf(
+       "<html><body>"
+       "<b>%s</b><br>"
+       "<div><i>Lat: </i>%f<br><i>Lon: </i>%f</id></div>"
+       "<div><i>%s</i><br>%s</div>"
+       "<div><i>URL:</i>%s<br><i>Postal Code:</i>%s</div>"
+       "</body></html>",
+       strlen(p->label)>0 ? p->label : "Unnamed POI",
+       p->lat, p->lon,
+       p->cat_desc ? p->cat_desc : "",
+       p->desc ? p->desc : "",
+       p->url ? p->url : "",
+       p->postal_code ? p->postal_code : "");
+
+dialog=gtk_dialog_new_with_buttons(_("POI"),
+                       GTK_WINDOW(_window),
+                       GTK_DIALOG_MODAL,
+                       GTK_STOCK_OK,
+                       GTK_RESPONSE_ACCEPT,
+                       NULL);
+
+info=gtk_html_new();
+gtk_html_set_editable(GTK_HTML(info), FALSE);
+sw=gtk_scrolled_window_new(NULL, NULL);
+gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+gtk_container_add(GTK_CONTAINER(sw), info);
+gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), sw, TRUE, TRUE, 0);
+
+gtk_html_load_from_string(info, phtml, -1);
+
+gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 250);
+gtk_widget_show_all(dialog);
+gtk_dialog_run(dialog);
+gtk_widget_destroy(dialog);
+
+g_free(phtml);
+poi_free(p);
+
+return TRUE;
+}
 /**
  * poi_edit_dialog
  *
index b4d59873d03e9af4215cb5249907a2266403c672..9afe6f00ab9c48ecd3c6ac7908e9bd3ec262c801 100644 (file)
@@ -33,6 +33,8 @@ gboolean poi_edit_dialog(POIAction action, poi_info *poi);
 gboolean poi_search_dialog(GtkListStore *store, poi_info *poi, gdouble lat, gdouble lon);
 gboolean poi_quick_dialog(gdouble lat, gdouble lon);
 
+gboolean poi_info_dialog(guint poi_id);
+
 gboolean poi_category_dialog(guint cat_id);
 gboolean poi_category_list();