]> Pileus Git - aweather/blobdiff - src/plugins/radar.c
Add radar status link button
[aweather] / src / plugins / radar.c
index d9b322ffbefe9804bd8338c6861f1239f5739e04..cc2e1c4988b2d47de65d977a39d154a33abbc5e8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2011 Andy Spencer <andy753421@gmail.com>
+ * Copyright (C) 2009-2012 Andy Spencer <andy753421@gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -120,8 +120,15 @@ gboolean _site_update_end(gpointer _site)
        RadarSite *site = _site;
        if (site->message) {
                g_warning("RadarSite: update_end - %s", site->message);
-               _gtk_bin_set_child(GTK_BIN(site->config),
-                               gtk_label_new(site->message));
+               const char *fmt = "http://forecast.weather.gov/product.php?site=NWS&product=FTM&format=TXT&issuedby=%s";
+               char       *uri = g_strdup_printf(fmt, site->city->code+1);
+               GtkWidget  *box = gtk_vbox_new(TRUE, 0);
+               GtkWidget  *msg = gtk_label_new(site->message);
+               GtkWidget  *btn = gtk_link_button_new_with_label(uri, "View Radar Status");
+               gtk_box_pack_start(GTK_BOX(box), msg, TRUE, TRUE, 0);
+               gtk_box_pack_start(GTK_BOX(box), btn, TRUE, TRUE, 0);
+               _gtk_bin_set_child(GTK_BIN(site->config), box);
+               g_free(uri);
        } else {
                _gtk_bin_set_child(GTK_BIN(site->config),
                                aweather_level2_get_config(site->level2));
@@ -392,10 +399,10 @@ static void _conus_update_end_copy(GritsTile *tile, guchar *pixels)
        tile->coords.w = 1.0/ CONUS_HEIGHT;
        tile->coords.s = tile->coords.n +  CONUS_HEIGHT   / 2048.0;
        tile->coords.e = tile->coords.w + (CONUS_WIDTH/2) / 2048.0;
-       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        glFlush();
        g_free(clear);
 }
@@ -777,9 +784,13 @@ static void grits_plugin_radar_dispose(GObject *gobject)
 {
        g_debug("GritsPluginRadar: dispose");
        GritsPluginRadar *self = GRITS_PLUGIN_RADAR(gobject);
-       g_signal_handler_disconnect(self->config, self->tab_id);
-       grits_viewer_remove(self->viewer, GRITS_OBJECT(self->hud));
-       radar_conus_free(self->conus);
+       if (self->viewer) {
+               GritsViewer *viewer = self->viewer;
+               self->viewer = NULL;
+               g_signal_handler_disconnect(self->config, self->tab_id);
+               grits_viewer_remove(viewer, GRITS_OBJECT(self->hud));
+               radar_conus_free(self->conus);
+       }
        /* Drop references */
        G_OBJECT_CLASS(grits_plugin_radar_parent_class)->dispose(gobject);
 }