]> Pileus Git - grits/blob - src/wms_test.c
Fix misc bugs and bump version to 0.3
[grits] / src / wms_test.c
1 #include <gtk/gtk.h>
2 #include <gdk/gdkkeysyms.h>
3
4 #include "gis-world.h"
5 #include "gis-tile.h"
6 #include "gis-wms.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_cache(gpointer _image)
33 {
34         GtkImage *image = _image;
35         g_message("Creating 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 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 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 up");
53         gis_wms_free(bmng_wms);
54         gis_tile_free(tile, NULL, NULL);
55         return NULL;
56 }
57
58 gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
59 {
60         if (event->keyval == GDK_q)
61                 gtk_main_quit();
62         return TRUE;
63 }
64
65 int main(int argc, char **argv)
66 {
67         g_thread_init(NULL);
68         gdk_threads_init();
69         gtk_init(&argc, &argv);
70
71         GtkWidget *win        = gtk_window_new(GTK_WINDOW_TOPLEVEL);
72         GtkWidget *vbox1      = gtk_vbox_new(FALSE, 0);
73         GtkWidget *vbox2      = gtk_vbox_new(FALSE, 0);
74         GtkWidget *status     = gtk_statusbar_new();
75         GtkWidget *scroll     = gtk_scrolled_window_new(NULL, NULL);
76         GtkWidget *bmng_image = gtk_image_new();
77         GtkWidget *srtm_image = gtk_image_new();
78         gtk_container_add(GTK_CONTAINER(win), vbox1);
79         gtk_box_pack_start(GTK_BOX(vbox1), scroll, TRUE, TRUE, 0);
80         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), vbox2);
81         gtk_box_pack_start(GTK_BOX(vbox2), bmng_image, TRUE, TRUE, 0);
82         gtk_box_pack_start(GTK_BOX(vbox2), srtm_image, TRUE, TRUE, 0);
83         gtk_box_pack_start(GTK_BOX(vbox1), status, FALSE, FALSE, 0);
84         g_signal_connect(win, "key-press-event", G_CALLBACK(key_press_cb), NULL);
85         g_signal_connect(win, "destroy", gtk_main_quit, NULL);
86         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
87                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
88
89         g_thread_create(do_cache, bmng_image, FALSE, NULL);
90
91         gtk_widget_show_all(win);
92         gtk_main();
93
94         return 0;
95 }