X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fgis%2Fwms_test.c;h=3ea977eedb8692a54e150d2887980829df9ee6f9;hp=45476c43a71ff0d0ee6750545d6661f54f801f3a;hb=128608a085fd2a66e8145868c30b05c5c6e1cc3b;hpb=84c4eeaaf6a795b5b4385f2c63031acaefd70730 diff --git a/src/gis/wms_test.c b/src/gis/wms_test.c index 45476c4..3ea977e 100644 --- a/src/gis/wms_test.c +++ b/src/gis/wms_test.c @@ -3,22 +3,34 @@ #include "wms.h" -/*********** - * Testing * - ***********/ -GtkWidget *image = NULL; -GtkWidget *bar = NULL; +struct CacheState { + GtkWidget *image; + GtkWidget *status; + GtkWidget *progress; +}; -void done_callback(WmsCacheNode *node, gpointer user_data) +void done_callback(WmsCacheNode *node, gpointer _state) { + struct CacheState *state = _state; g_message("done_callback: %p->%p", node, node->data); - gtk_image_set_from_pixbuf(GTK_IMAGE(image), node->data); + gtk_image_set_from_pixbuf(GTK_IMAGE(state->image), node->data); } -void chunk_callback(gsize cur, gsize total, gpointer user_data) +void chunk_callback(gsize cur, gsize total, gpointer _state) { + struct CacheState *state = _state; g_message("chunk_callback: %d/%d", cur, total); - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar), (gdouble)cur/total); + + if (state->progress == NULL) { + state->progress = gtk_progress_bar_new(); + gtk_box_pack_end(GTK_BOX(state->status), state->progress, FALSE, FALSE, 0); + gtk_widget_show(state->progress); + } + + if (cur == total) + gtk_widget_destroy(state->progress); + else + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(state->progress), (gdouble)cur/total); } gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data) @@ -33,38 +45,40 @@ int main(int argc, char **argv) gtk_init(&argc, &argv); g_thread_init(NULL); - GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget *box = gtk_vbox_new(FALSE, 0); - GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); - image = gtk_image_new(); - bar = gtk_progress_bar_new(); - gtk_container_add(GTK_CONTAINER(win), box); - gtk_box_pack_start(GTK_BOX(box), scroll, TRUE, TRUE, 0); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), image); - gtk_box_pack_start(GTK_BOX(box), bar, FALSE, FALSE, 0); + GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget *vbox1 = gtk_vbox_new(FALSE, 0); + GtkWidget *vbox2 = gtk_vbox_new(FALSE, 0); + GtkWidget *status = gtk_statusbar_new(); + GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); + GtkWidget *bmng_image = gtk_image_new(); + GtkWidget *srtm_image = gtk_image_new(); + gtk_container_add(GTK_CONTAINER(win), vbox1); + gtk_box_pack_start(GTK_BOX(vbox1), scroll, TRUE, TRUE, 0); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), vbox2); + gtk_box_pack_start(GTK_BOX(vbox2), bmng_image, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox2), srtm_image, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox1), status, FALSE, FALSE, 0); g_signal_connect(win, "key-press-event", G_CALLBACK(key_press_cb), NULL); g_signal_connect(win, "destroy", gtk_main_quit, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gdouble res = 200, lon = -121.76, lat = 46.85; + struct CacheState bmng_state = {bmng_image, status, NULL}; + struct CacheState srtm_state = {srtm_image, status, NULL}; + + gdouble res = 200, lon = -101.76, lat = 46.85; - WmsInfo *info = wms_info_new_for_bmng(bmng_pixbuf_loader, bmng_pixbuf_freeer); - wms_info_cache(info, res, lat, lon, NULL, NULL, NULL); - WmsCacheNode *node = wms_info_fetch(info, res, lat, lon, NULL); - if (node) gtk_image_set_from_pixbuf(GTK_IMAGE(image), node->data); - wms_info_cache(info, res, lat, lon, NULL, done_callback, NULL); - wms_info_cache(info, res, lat, lon, chunk_callback, done_callback, NULL); + WmsInfo *bmng_info = wms_info_new_for_bmng(bmng_pixbuf_loader, bmng_pixbuf_freeer); + wms_info_cache(bmng_info, res, lat, lon, chunk_callback, done_callback, &bmng_state); - //WmsInfo *info = wms_info_new_for_srtm(srtm_pixbuf_loader, srtm_pixbuf_freeer); - //wms_info_cache(info, res, lat, lon, chunk_callback, NULL, NULL); - //WmsCacheNode *node = wms_info_fetch(info, res, lat, lon, NULL); - //if (node) gtk_image_set_from_pixbuf(GTK_IMAGE(image), node->data); + WmsInfo *srtm_info = wms_info_new_for_srtm(srtm_pixbuf_loader, srtm_pixbuf_freeer); + wms_info_cache(srtm_info, res, lat, lon, chunk_callback, done_callback, &srtm_state); gtk_widget_show_all(win); gtk_main(); - wms_info_free(info); + wms_info_free(bmng_info); + wms_info_free(srtm_info); return 0; }