+static void on_sweep_clicked(GtkRadioButton *button, gpointer _self)
+{
+ AWeatherRadar *self = AWEATHER_RADAR(_self);
+ load_colormap(self, g_object_get_data(G_OBJECT(button), "type" ));
+ load_sweep (self, g_object_get_data(G_OBJECT(button), "sweep"));
+}
+
+static void on_time_changed(AWeatherView *view, const char *time, gpointer _self)
+{
+ AWeatherRadar *self = AWEATHER_RADAR(_self);
+ g_debug("AWeatherRadar: on_time_changed - setting time=%s", time);
+ // format: http://mesonet.agron.iastate.edu/data/nexrd2/raw/KABR/KABR_20090510_0323
+ char *site = aweather_view_get_site(view);
+ char *base = "http://mesonet.agron.iastate.edu/data/";
+ char *path = g_strdup_printf("nexrd2/raw/%s/%s_%s", site, site, time);
+
+ /* Set up progress bar */
+ GtkWidget *child = gtk_bin_get_child(GTK_BIN(self->config_body));
+ if (child) gtk_widget_destroy(child);
+
+ GtkWidget *vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
+ self->progress_bar = gtk_progress_bar_new();
+ self->progress_label = gtk_label_new("Loading radar...");
+ gtk_box_pack_start(GTK_BOX(vbox), self->progress_bar, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), self->progress_label, FALSE, FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(self->config_body), vbox);
+ gtk_widget_show_all(self->config_body);
+
+ /* Clear radar */
+ if (self->cur_radar)
+ RSL_free_radar(self->cur_radar);
+ self->cur_radar = NULL;
+ self->cur_sweep = NULL;
+ aweather_gui_gl_redraw(self->gui);
+
+ /* Start loading the new radar */
+ if (self->soup) {
+ soup_session_abort(self->soup);
+ self->soup = NULL;
+ }
+ if (aweather_view_get_offline(view))
+ self->soup = cache_file(base, path, AWEATHER_ONCE,
+ cache_chunk_cb, cache_done_cb, self);
+ else
+ self->soup = cache_file(base, path, AWEATHER_UPDATE,
+ cache_chunk_cb, cache_done_cb, self);
+ g_free(path);
+}
+
+static void on_site_changed(AWeatherView *view, char *site, gpointer _self)
+{
+ AWeatherRadar *self = AWEATHER_RADAR(_self);
+ g_debug("AWeatherRadar: on_site_changed - Loading wsr88d list for %s", site);
+ char *time = NULL;
+ update_times(self, view, site, &time);
+ aweather_view_set_time(view, time);
+
+ g_free(time);
+}
+
+static void on_refresh(AWeatherView *view, gpointer _self)
+{
+ AWeatherRadar *self = AWEATHER_RADAR(_self);
+ char *site = aweather_view_get_site(view);
+ char *time = NULL;
+ update_times(self, view, site, &time);
+ aweather_view_set_time(view, time);
+ g_free(time);
+}
+
+/***********
+ * Methods *
+ ***********/
+AWeatherRadar *aweather_radar_new(AWeatherGui *gui)
+{
+ g_debug("AWeatherRadar: new");
+ AWeatherRadar *self = g_object_new(AWEATHER_TYPE_RADAR, NULL);
+ self->gui = gui;
+
+ GtkWidget *config = aweather_gui_get_widget(gui, "tabs");
+ AWeatherView *view = aweather_gui_get_view(gui);
+
+ /* Add configuration tab */
+ self->config_body = gtk_alignment_new(0, 0, 1, 1);
+ gtk_container_set_border_width(GTK_CONTAINER(self->config_body), 5);
+ gtk_container_add(GTK_CONTAINER(self->config_body), gtk_label_new("No radar loaded"));
+ gtk_notebook_prepend_page(GTK_NOTEBOOK(config), self->config_body, gtk_label_new("Radar"));
+
+ /* Set up OpenGL Stuff */
+ g_signal_connect(view, "site-changed", G_CALLBACK(on_site_changed), self);
+ g_signal_connect(view, "time-changed", G_CALLBACK(on_time_changed), self);
+ g_signal_connect(view, "refresh", G_CALLBACK(on_refresh), self);
+
+ return self;
+}
+
+static void _aweather_radar_expose(AWeatherPlugin *_self)