]> Pileus Git - grits/blob - src/gis/wms_test.c
Fix compiling plugins
[grits] / src / gis / wms_test.c
1 #include <gtk/gtk.h>
2 #include <gdk/gdkkeysyms.h>
3
4 #include "wms.h"
5
6 struct CacheState {
7         GtkWidget *image;
8         GtkWidget *status;
9         GtkWidget *progress;
10 };
11
12 void done_callback(WmsCacheNode *node, gpointer _state)
13 {
14         struct CacheState *state = _state;
15         g_message("done_callback: %p->%p", node, node->data);
16         gtk_image_set_from_pixbuf(GTK_IMAGE(state->image), node->data);
17 }
18
19 void chunk_callback(gsize cur, gsize total, gpointer _state)
20 {
21         struct CacheState *state = _state;
22         g_message("chunk_callback: %d/%d", cur, total);
23
24         if (state->progress == NULL) {
25                 state->progress = gtk_progress_bar_new();
26                 gtk_box_pack_end(GTK_BOX(state->status), state->progress, FALSE, FALSE, 0);
27                 gtk_widget_show(state->progress);
28         }
29
30         if (cur == total)
31                 gtk_widget_destroy(state->progress);
32         else
33                 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(state->progress), (gdouble)cur/total);
34 }
35
36 gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
37 {
38         if (event->keyval == GDK_q)
39                 gtk_main_quit();
40         return TRUE;
41 }
42
43 int main(int argc, char **argv)
44 {
45         gtk_init(&argc, &argv);
46         g_thread_init(NULL);
47
48         GtkWidget *win        = gtk_window_new(GTK_WINDOW_TOPLEVEL);
49         GtkWidget *vbox1      = gtk_vbox_new(FALSE, 0);
50         GtkWidget *vbox2      = gtk_vbox_new(FALSE, 0);
51         GtkWidget *status     = gtk_statusbar_new();
52         GtkWidget *scroll     = gtk_scrolled_window_new(NULL, NULL);
53         GtkWidget *bmng_image = gtk_image_new();
54         GtkWidget *srtm_image = gtk_image_new();
55         gtk_container_add(GTK_CONTAINER(win), vbox1);
56         gtk_box_pack_start(GTK_BOX(vbox1), scroll, TRUE, TRUE, 0);
57         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), vbox2);
58         gtk_box_pack_start(GTK_BOX(vbox2), bmng_image, TRUE, TRUE, 0);
59         gtk_box_pack_start(GTK_BOX(vbox2), srtm_image, TRUE, TRUE, 0);
60         gtk_box_pack_start(GTK_BOX(vbox1), status, FALSE, FALSE, 0);
61         g_signal_connect(win, "key-press-event", G_CALLBACK(key_press_cb), NULL);
62         g_signal_connect(win, "destroy", gtk_main_quit, NULL);
63         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
64                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
65
66         struct CacheState bmng_state = {bmng_image, status, NULL};
67         struct CacheState srtm_state = {srtm_image, status, NULL};
68
69         gdouble res = 200, lon = -101.76, lat = 46.85;
70
71         WmsInfo *bmng_info = wms_info_new_for_bmng(bmng_pixbuf_loader, bmng_pixbuf_freeer);
72         wms_info_fetch_cache(bmng_info, NULL, res, lat, lon, chunk_callback, done_callback, &bmng_state);
73
74         WmsInfo *srtm_info = wms_info_new_for_srtm(srtm_pixbuf_loader, srtm_pixbuf_freeer);
75         wms_info_fetch_cache(srtm_info, NULL, res, lat, lon, chunk_callback, done_callback, &srtm_state);
76
77         gtk_widget_show_all(win);
78         gtk_main();
79
80         wms_info_free(bmng_info);
81         wms_info_free(srtm_info);
82
83         return 0;
84 }