]> Pileus Git - grits/blob - src/tile_test.c
d67e14f3b028b96c0adb1b3ffd26563d6bcbbe79
[grits] / src / tile_test.c
1 #include <gtk/gtk.h>
2 #include <gdk/gdkkeysyms.h>
3
4 #include "gis-tile.h"
5 #include "gis-wms.h"
6 #include "gis-util.h"
7
8 struct CacheState {
9         GtkWidget *image;
10         GtkWidget *status;
11         GtkWidget *progress;
12 };
13
14
15 void chunk_callback(gsize cur, gsize total, gpointer _state)
16 {
17         struct CacheState *state = _state;
18         g_message("chunk_callback: %d/%d", cur, total);
19
20         if (state->progress == NULL) {
21                 state->progress = gtk_progress_bar_new();
22                 gtk_box_pack_end(GTK_BOX(state->status), state->progress, FALSE, FALSE, 0);
23                 gtk_widget_show(state->progress);
24         }
25
26         if (cur == total)
27                 gtk_widget_destroy(state->progress);
28         else
29                 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(state->progress), (gdouble)cur/total);
30 }
31
32 gpointer do_bmng_cache(gpointer _image)
33 {
34         GtkImage *image = _image;
35         g_message("Creating bmng tile");
36         GisTile *tile = gis_tile_new(NULL, NORTH, SOUTH, EAST, WEST);
37         tile->children[0][1] = gis_tile_new(tile, NORTH, 0, 0, WEST);
38         tile = tile->children[0][1];
39
40         g_message("Fetching bmng image");
41         GisWms *bmng_wms = gis_wms_new(
42                 "http://www.nasa.network.com/wms", "bmng200406", "image/jpeg",
43                 "bmng_test/", "jpg", 512, 256);
44         const char *path = gis_wms_make_local(bmng_wms, tile);
45
46         g_message("Loading bmng image: [%s]", path);
47         GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, NULL);
48         gdk_threads_enter();
49         gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
50         gdk_threads_leave();
51
52         g_message("Cleaning bmng up");
53         gis_wms_free(bmng_wms);
54         gis_tile_free(tile, NULL, NULL);
55         return NULL;
56 }
57
58 gpointer do_osm_cache(gpointer _image)
59 {
60         GtkImage *image = _image;
61         g_message("Creating osm tile");
62         GisTile *tile = gis_tile_new(NULL, NORTH, SOUTH, EAST, WEST);
63         tile->children[0][1] = gis_tile_new(tile, NORTH, 0, 0, WEST);
64         tile = tile->children[0][1];
65
66         g_message("Fetching osm image");
67         GisWms *osm_wms = gis_wms_new(
68                 "http://labs.metacarta.com/wms/vmap0", "basic", "image/png",
69                 "osm_test/", "png", 512, 256);
70         const char *path = gis_wms_make_local(osm_wms, tile);
71
72         g_message("Loading osm image: [%s]", path);
73         GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, NULL);
74         gdk_threads_enter();
75         gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
76         gdk_threads_leave();
77
78         g_message("Cleaning osm up");
79         gis_wms_free(osm_wms);
80         gis_tile_free(tile, NULL, NULL);
81         return NULL;
82 }
83
84 gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
85 {
86         if (event->keyval == GDK_q)
87                 gtk_main_quit();
88         return TRUE;
89 }
90
91 int main(int argc, char **argv)
92 {
93         g_thread_init(NULL);
94         gdk_threads_init();
95         gtk_init(&argc, &argv);
96
97         GtkWidget *win        = gtk_window_new(GTK_WINDOW_TOPLEVEL);
98         GtkWidget *vbox1      = gtk_vbox_new(FALSE, 0);
99         GtkWidget *vbox2      = gtk_vbox_new(FALSE, 0);
100         GtkWidget *status     = gtk_statusbar_new();
101         GtkWidget *scroll     = gtk_scrolled_window_new(NULL, NULL);
102         GtkWidget *bmng_image = gtk_image_new();
103         GtkWidget *srtm_image = gtk_image_new();
104         GtkWidget *osm_image  = gtk_image_new();
105         gtk_container_add(GTK_CONTAINER(win), vbox1);
106         gtk_box_pack_start(GTK_BOX(vbox1), scroll, TRUE, TRUE, 0);
107         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), vbox2);
108         gtk_box_pack_start(GTK_BOX(vbox2), bmng_image, TRUE, TRUE, 0);
109         gtk_box_pack_start(GTK_BOX(vbox2), srtm_image, TRUE, TRUE, 0);
110         gtk_box_pack_start(GTK_BOX(vbox2), osm_image,  TRUE, TRUE, 0);
111         gtk_box_pack_start(GTK_BOX(vbox1), status, FALSE, FALSE, 0);
112         g_signal_connect(win, "key-press-event", G_CALLBACK(key_press_cb), NULL);
113         g_signal_connect(win, "destroy", gtk_main_quit, NULL);
114         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
115                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
116
117         g_thread_create(do_bmng_cache, bmng_image, FALSE, NULL);
118         g_thread_create(do_osm_cache,  osm_image,  FALSE, NULL);
119
120         gtk_widget_show_all(win);
121         gtk_main();
122
123         return 0;
124 }