#include "level2.h"
#include "../aweather-location.h"
+#include "../compat.h"
+
static void aweather_bin_set_child(GtkBin *bin, GtkWidget *new)
{
GtkWidget *old = gtk_bin_get_child(bin);
g_warning("RadarSite: update_end - %s", 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 *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
GtkWidget *msg = gtk_label_new(site->message);
GtkWidget *btn = gtk_link_button_new_with_label(uri, "View Radar Status");
+ gtk_box_set_homogeneous(GTK_BOX(box), TRUE);
gtk_box_pack_start(GTK_BOX(box), msg, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), btn, TRUE, TRUE, 0);
aweather_bin_set_child(GTK_BIN(site->config), box);
/* Remove old volume */
g_debug("RadarSite: update - remove - %s", site->city->code);
- if (site->level2) {
- grits_viewer_remove(site->viewer, GRITS_OBJECT(site->level2));
- site->level2 = NULL;
- }
+ grits_object_destroy_pointer(&site->level2);
/* Fork loading right away so updating the
* list of times doesn't take too long */
gtk_widget_destroy(site->config);
/* Remove radar */
- if (site->level2) {
- grits_viewer_remove(site->viewer, GRITS_OBJECT(site->level2));
- site->level2 = NULL;
- }
+ grits_object_destroy_pointer(&site->level2);
site->status = STATUS_UNLOADED;
}
radar_site_unload(site);
}
+static gboolean on_marker_clicked(GritsObject *marker, GdkEvent *event, RadarSite *site)
+{
+ GritsViewer *viewer = site->viewer;
+ GritsPoint center = marker->center;
+ grits_viewer_set_location(viewer, center.lat, center.lon, EARTH_R/35);
+ grits_viewer_set_rotation(viewer, 0, 0, 0);
+ /* Recursivly set notebook tabs */
+ GtkWidget *widget, *parent;
+ for (widget = site->config; widget; widget = parent) {
+ parent = gtk_widget_get_parent(widget);
+ if (GTK_IS_NOTEBOOK(parent)) {
+ gint i = gtk_notebook_page_num(GTK_NOTEBOOK(parent), widget);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(parent), i);
+ }
+ }
+ return TRUE;
+}
+
RadarSite *radar_site_new(city_t *city, GtkWidget *pconfig,
GritsViewer *viewer, GritsPrefs *prefs, GritsHttp *http)
{
GRITS_OBJECT(site->marker)->lod = EARTH_R*0.75*site->city->lod;
grits_viewer_add(site->viewer, GRITS_OBJECT(site->marker),
GRITS_LEVEL_HUD, FALSE);
+ g_signal_connect(site->marker, "clicked",
+ G_CALLBACK(on_marker_clicked), site);
+ grits_object_set_cursor(GRITS_OBJECT(site->marker), GDK_HAND2);
/* Connect signals */
site->location_id = g_signal_connect(viewer, "location-changed",
void radar_site_free(RadarSite *site)
{
radar_site_unload(site);
- grits_viewer_remove(site->viewer, GRITS_OBJECT(site->marker));
+ grits_object_destroy_pointer(&site->marker);
if (site->location_id)
g_signal_handler_disconnect(site->viewer, site->location_id);
grits_http_free(site->http);
if (conus->idle_source)
g_source_remove(conus->idle_source);
- for (int i = 0; i < 2; i++) {
- GritsTile *tile = conus->tile[i];
- grits_viewer_remove(conus->viewer, GRITS_OBJECT(tile));
- g_object_unref(tile);
- }
+ for (int i = 0; i < 2; i++)
+ grits_object_destroy_pointer(&conus->tile[i]);
g_object_unref(conus->viewer);
g_free(conus);
}
static void _update_hidden(GtkNotebook *notebook,
- GtkNotebookPage *page, guint page_num, gpointer viewer)
+ gpointer _, guint page_num, gpointer viewer)
{
g_debug("GritsPluginRadar: _update_hidden - 0..%d = %d",
gtk_notebook_get_n_pages(notebook), page_num);
GritsViewer *viewer = self->viewer;
self->viewer = NULL;
g_signal_handler_disconnect(self->config, self->tab_id);
- grits_viewer_remove(viewer, GRITS_OBJECT(self->hud));
+ grits_object_destroy_pointer(&self->hud);
radar_conus_free(self->conus);
g_hash_table_destroy(self->sites);
g_object_unref(self->config);
- g_object_unref(self->hud);
g_object_unref(self->prefs);
g_object_unref(viewer);
}