X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fplugin-radar.c;h=1d4706e5f070b32e925a1ea029eaa78859761d75;hp=07161c56af8b762f031b6389db114fd122162fc0;hb=5e979044ddae3f2e9d31f480dd103bfb0fa7103b;hpb=40b17f742041c317915326c6f5ea6d92397c7363 diff --git a/src/plugin-radar.c b/src/plugin-radar.c index 07161c5..1d4706e 100644 --- a/src/plugin-radar.c +++ b/src/plugin-radar.c @@ -29,25 +29,47 @@ /**************** * GObject code * ****************/ +/* Plugin init */ static void aweather_radar_plugin_init(AWeatherPluginInterface *iface); static void _aweather_radar_expose(AWeatherPlugin *_radar); G_DEFINE_TYPE_WITH_CODE(AWeatherRadar, aweather_radar, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(AWEATHER_TYPE_PLUGIN, aweather_radar_plugin_init)); -static void aweather_radar_class_init(AWeatherRadarClass *klass) -{ - GObjectClass *object_class = (GObjectClass*)klass; -} static void aweather_radar_plugin_init(AWeatherPluginInterface *iface) { + g_debug("AWeatherRadar: plugin_init"); /* Add methods to the interface */ iface->expose = _aweather_radar_expose; } +/* Class/Object init */ static void aweather_radar_init(AWeatherRadar *radar) { + g_debug("AWeatherRadar: class_init"); /* Set defaults */ radar->gui = NULL; } +static void aweather_radar_dispose(GObject *gobject) +{ + g_debug("AWeatherRadar: dispose"); + AWeatherRadar *self = AWEATHER_RADAR(gobject); + /* Drop references */ + G_OBJECT_CLASS(aweather_radar_parent_class)->dispose(gobject); +} +static void aweather_radar_finalize(GObject *gobject) +{ + g_debug("AWeatherRadar: finalize"); + AWeatherRadar *self = AWEATHER_RADAR(gobject); + /* Free data */ + G_OBJECT_CLASS(aweather_radar_parent_class)->finalize(gobject); + +} +static void aweather_radar_class_init(AWeatherRadarClass *klass) +{ + g_debug("AWeatherRadar: class_init"); + GObjectClass *gobject_class = (GObjectClass*)klass; + gobject_class->dispose = aweather_radar_dispose; + gobject_class->finalize = aweather_radar_finalize; +} /************************** * Data loading functions * @@ -197,12 +219,8 @@ static void load_radar(AWeatherRadar *self, gchar *radar_file) char *dir = g_path_get_dirname(radar_file); char *site = g_path_get_basename(dir); g_free(dir); - RSL_read_these_sweeps("all", NULL); - if (self->cur_radar) { - g_debug("AWeatherRadar: load_radar - Freeing old radar"); - RSL_free_radar(self->cur_radar); - } g_debug("AWeatherRadar: load_radar - Loading new radar"); + RSL_read_these_sweeps("all", NULL); Radar *radar = self->cur_radar = RSL_wsr88d_to_radar(radar_file, site); if (radar == NULL) { g_warning("fail to load radar: path=%s, site=%s", radar_file, site); @@ -279,15 +297,15 @@ typedef struct { gchar *radar_file; } decompressed_t; -static void decompressed_cb(GPid pid, gint status, gpointer _self) +static void decompressed_cb(GPid pid, gint status, gpointer _udata) { - decompressed_t *udata = _self; + decompressed_t *udata = _udata; if (status != 0) { g_warning("wsr88ddec exited with status %d", status); return; } - // TODO: pass cur_file as params? load_radar(udata->self, udata->radar_file); + g_spawn_close_pid(pid); g_free(udata->radar_file); g_free(udata); } @@ -346,10 +364,20 @@ static void on_time_changed(AWeatherView *view, char *time, gpointer _self) char *base = "http://mesonet.agron.iastate.edu/data/"; char *path = g_strdup_printf("nexrd2/raw/K%s/K%s_%s", site, site, time); + /* Clear out children */ + GtkWidget *child = gtk_bin_get_child(GTK_BIN(self->config_body)); + if (child) + gtk_widget_destroy(child); + gtk_container_add(GTK_CONTAINER(self->config_body), + gtk_label_new("Loading radar...")); + gtk_widget_show_all(self->config_body); + if (self->cur_radar) + RSL_free_radar(self->cur_radar); self->cur_radar = NULL; - self->cur_sweep = NULL; // Clear radar + self->cur_sweep = NULL; aweather_gui_gl_redraw(self->gui); + /* Start loading the new radar */ cache_file(base, path, AWEATHER_AUTOMATIC, cached_cb, self); g_free(path); } @@ -365,7 +393,7 @@ static void on_site_changed(AWeatherView *view, char *site, gpointer _self) g_free(time); } -static void on_refresh(AWeatherView *view, gpointer user_data, gpointer _self) +static void on_refresh(AWeatherView *view, gpointer _self) { AWeatherRadar *self = AWEATHER_RADAR(_self); char *site = aweather_view_get_site(view);