From 88b72a1562c00da25a9e8a3622a82e6452cb42ad Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sat, 14 Nov 2009 13:58:20 +0000 Subject: [PATCH] Update for Gis{World,OpenGL,View,Viewer} refactoring --- src/aweather-gui.c | 84 +++++++++++++++++---------------------------- src/aweather-gui.h | 8 ++--- src/main.c | 4 +-- src/plugins/radar.c | 46 ++++++++++++------------- src/plugins/radar.h | 6 ++-- 5 files changed, 60 insertions(+), 88 deletions(-) diff --git a/src/aweather-gui.c b/src/aweather-gui.c index 18cc7c8..59e2b12 100644 --- a/src/aweather-gui.c +++ b/src/aweather-gui.c @@ -36,7 +36,7 @@ gboolean on_gui_key_press(GtkWidget *widget, GdkEventKey *event, AWeatherGui *se if (event->keyval == GDK_q) gtk_widget_destroy(GTK_WIDGET(self)); else if (event->keyval == GDK_r && event->state & GDK_CONTROL_MASK) - gis_world_refresh(self->world); + gis_viewer_refresh(self->viewer); else if (event->keyval == GDK_Tab || event->keyval == GDK_ISO_Left_Tab) { GtkNotebook *tabs = GTK_NOTEBOOK(aweather_gui_get_widget(self, "main_tabs")); gint num_tabs = gtk_notebook_get_n_pages(tabs); @@ -56,17 +56,17 @@ void on_quit(GtkMenuItem *menu, AWeatherGui *self) void on_zoomin(GtkAction *action, AWeatherGui *self) { - gis_view_zoom(self->view, 3./4); + gis_viewer_zoom(self->viewer, 3./4); } void on_zoomout(GtkAction *action, AWeatherGui *self) { - gis_view_zoom(self->view, 4./3); + gis_viewer_zoom(self->viewer, 4./3); } void on_refresh(GtkAction *action, AWeatherGui *self) { - gis_world_refresh(self->world); + gis_viewer_refresh(self->viewer); } void on_plugin_toggled(GtkCellRendererToggle *cell, gchar *path_str, AWeatherGui *self) @@ -96,7 +96,7 @@ void on_time_changed(GtkTreeView *view, GtkTreePath *path, GtkTreeModel *model = gtk_tree_view_get_model(view); gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, 0, &time, -1); - gis_view_set_time(self->view, time); + gis_viewer_set_time(self->viewer, time); g_free(time); } @@ -107,7 +107,7 @@ void on_site_changed(GtkComboBox *combo, AWeatherGui *self) GtkTreeModel *model = gtk_combo_box_get_model(combo); gtk_combo_box_get_active_iter(combo, &iter); gtk_tree_model_get(model, &iter, 1, &site, -1); - gis_view_set_site(self->view, site); + gis_viewer_set_site(self->viewer, site); g_free(site); } @@ -134,7 +134,7 @@ static gboolean gtk_tree_model_find_string(GtkTreeModel *model, return FALSE; } -static void update_time_widget(GisView *view, const char *time, AWeatherGui *self) +static void update_time_widget(GisViewer *viewer, const char *time, AWeatherGui *self) { g_debug("AWeatherGui: update_time_widget - time=%s", time); GtkTreeView *tview = GTK_TREE_VIEW(aweather_gui_get_widget(self, "main_time")); @@ -151,7 +151,7 @@ static void update_time_widget(GisView *view, const char *time, AWeatherGui *sel } } -static void update_site_widget(GisView *view, char *site, AWeatherGui *self) +static void update_site_widget(GisViewer *viewer, char *site, AWeatherGui *self) { g_debug("AWeatherGui: update_site_widget - site=%s", site); GtkComboBox *combo = GTK_COMBO_BOX(aweather_gui_get_widget(self, "main_site")); @@ -172,7 +172,7 @@ void on_offline(GtkToggleAction *action, AWeatherGui *self) gboolean value = gtk_toggle_action_get_active(action); g_debug("AWeatherGui: on_offline - offline=%d", value); gis_prefs_set_boolean(self->prefs, "gis/offline", value); - gis_world_set_offline(self->world, value); + gis_viewer_set_offline(self->viewer, value); } void on_initial_site_changed(GtkComboBox *combo, AWeatherGui *self) @@ -266,7 +266,7 @@ static void site_setup(AWeatherGui *self) gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), GTK_CELL_RENDERER(renderer), combo_sensitive, NULL, NULL); - g_signal_connect(self->view, "site-changed", + g_signal_connect(self->viewer, "site-changed", G_CALLBACK(update_site_widget), self); } @@ -280,7 +280,7 @@ static void time_setup(AWeatherGui *self) gtk_tree_view_append_column(tview, col); g_object_set(rend, "size-points", 8.0, NULL); - g_signal_connect(self->view, "time-changed", + g_signal_connect(self->viewer, "time-changed", G_CALLBACK(update_time_widget), self); } @@ -309,7 +309,7 @@ static void update_times_gtk(AWeatherGui *self, GList *times) } } - gis_view_set_time(self->view, last_time); + gis_viewer_set_time(self->viewer, last_time); g_regex_unref(regex); g_list_foreach(times, (GFunc)g_free, NULL); @@ -332,10 +332,10 @@ static void update_times_online_cb(char *path, gboolean updated, gpointer _self) update_times_gtk(_self, times); } -static void update_times(AWeatherGui *self, GisView *view, char *site) +static void update_times(AWeatherGui *self, GisViewer *viewer, char *site) { g_debug("AWeatherGui: update_times - site=%s", site); - if (gis_world_get_offline(self->world)) { + if (gis_viewer_get_offline(self->viewer)) { GList *times = NULL; gchar *path = g_build_filename(g_get_user_cache_dir(), "libgis", "nexrd2", "raw", site, NULL); @@ -356,17 +356,17 @@ static void update_times(AWeatherGui *self, GisView *view, char *site) /* update_times_gtk from update_times_online_cb */ } } -static void on_gis_site_changed(GisView *view, char *site, gpointer _self) +static void on_gis_site_changed(GisViewer *viewer, char *site, gpointer _self) { AWeatherGui *self = AWEATHER_GUI(_self); g_debug("AWeatherGui: on_site_changed - Loading wsr88d list for %s", site); - update_times(self, view, site); + update_times(self, viewer, site); } -static void on_gis_refresh(GisWorld *world, gpointer _self) +static void on_gis_refresh(GisViewer *viewer, gpointer _self) { AWeatherGui *self = AWEATHER_GUI(_self); - char *site = gis_view_get_site(self->view); - update_times(self, self->view, site); + char *site = gis_viewer_get_site(self->viewer); + update_times(self, self->viewer, site); } @@ -378,20 +378,10 @@ AWeatherGui *aweather_gui_new() g_debug("AWeatherGui: new"); return g_object_new(AWEATHER_TYPE_GUI, NULL); } -GisWorld *aweather_gui_get_world(AWeatherGui *self) +GisViewer *aweather_gui_get_viewer(AWeatherGui *self) { g_assert(AWEATHER_IS_GUI(self)); - return self->world; -} -GisView *aweather_gui_get_view(AWeatherGui *self) -{ - g_assert(AWEATHER_IS_GUI(self)); - return self->view; -} -GisOpenGL *aweather_gui_get_opengl(AWeatherGui *self) -{ - g_assert(AWEATHER_IS_GUI(self)); - return self->opengl; + return self->viewer; } GtkBuilder *aweather_gui_get_builder(AWeatherGui *self) { @@ -417,7 +407,7 @@ GObject *aweather_gui_get_object(AWeatherGui *self, const gchar *name) void aweather_gui_attach_plugin(AWeatherGui *self, const gchar *name) { GisPlugin *plugin = gis_plugins_load(self->plugins, name, - self->world, self->view, self->opengl, self->prefs); + self->viewer, self->prefs); GtkWidget *body = gis_plugin_get_config(plugin); if (body) { GtkWidget *config = aweather_gui_get_widget(self, "main_tabs"); @@ -425,7 +415,7 @@ void aweather_gui_attach_plugin(AWeatherGui *self, const gchar *name) gtk_notebook_append_page(GTK_NOTEBOOK(config), body, tab); gtk_widget_show_all(config); } - gis_opengl_redraw(self->opengl); + gtk_widget_queue_draw(GTK_WIDGET(self->viewer)); } void aweather_gui_deattach_plugin(AWeatherGui *self, const gchar *name) { @@ -442,7 +432,7 @@ void aweather_gui_deattach_plugin(AWeatherGui *self, const gchar *name) gtk_notebook_remove_page(GTK_NOTEBOOK(config), i); } gis_plugins_unload(self->plugins, name); - gis_opengl_redraw(self->opengl); + gtk_widget_queue_draw(GTK_WIDGET(self->viewer)); } @@ -459,9 +449,7 @@ static void aweather_gui_init(AWeatherGui *self) gchar *defaults = g_build_filename(PKGDATADIR, "defaults.ini", NULL); self->prefs = gis_prefs_new(config, defaults); self->plugins = gis_plugins_new(PLUGINSDIR); - self->world = gis_world_new(); - self->view = gis_view_new(); - self->opengl = gis_opengl_new(self->world, self->view, self->plugins); + self->viewer = gis_opengl_new(self->plugins); g_free(config); g_free(defaults); @@ -473,7 +461,7 @@ static void aweather_gui_init(AWeatherGui *self) gtk_widget_reparent(aweather_gui_get_widget(self, "main_body"), GTK_WIDGET(self)); GtkWidget *paned = aweather_gui_get_widget(self, "main_paned"); gtk_widget_destroy(gtk_paned_get_child1(GTK_PANED(paned))); - gtk_paned_pack1(GTK_PANED(paned), GTK_WIDGET(self->opengl), TRUE, FALSE); + gtk_paned_pack1(GTK_PANED(paned), GTK_WIDGET(self->viewer), TRUE, FALSE); /* Plugins */ GtkTreeIter iter; @@ -499,13 +487,13 @@ static void aweather_gui_init(AWeatherGui *self) gtk_builder_connect_signals(self->builder, self); g_signal_connect(self, "key-press-event", G_CALLBACK(on_gui_key_press), self); - g_signal_connect_swapped(self->world, "offline", + g_signal_connect_swapped(self->viewer, "offline", G_CALLBACK(gtk_toggle_action_set_active), aweather_gui_get_object(self, "offline")); /* deprecated site stuff */ - g_signal_connect(self->view, "site-changed", G_CALLBACK(on_gis_site_changed), self); - g_signal_connect(self->world, "refresh", G_CALLBACK(on_gis_refresh), self); + g_signal_connect(self->viewer, "site-changed", G_CALLBACK(on_gis_site_changed), self); + g_signal_connect(self->viewer, "refresh", G_CALLBACK(on_gis_refresh), self); } static GObject *aweather_gui_constructor(GType gtype, guint n_properties, GObjectConstructParam *properties) @@ -526,17 +514,9 @@ static void aweather_gui_dispose(GObject *_self) g_object_unref(self->builder); self->builder = NULL; } - if (self->world) { - g_object_unref(self->world); - self->world = NULL; - } - if (self->view) { - g_object_unref(self->view); - self->view = NULL; - } - if (self->opengl) { - g_object_unref(self->opengl); - self->opengl = NULL; + if (self->viewer) { + g_object_unref(self->viewer); + self->viewer = NULL; } if (self->plugins) { gis_plugins_free(self->plugins); diff --git a/src/aweather-gui.h b/src/aweather-gui.h index eb28a55..8c59b97 100644 --- a/src/aweather-gui.h +++ b/src/aweather-gui.h @@ -39,9 +39,7 @@ struct _AWeatherGui { /* instance members */ GtkBuilder *builder; - GisWorld *world; - GisView *view; - GisOpenGL *opengl; + GisViewer *viewer; GisPlugins *plugins; GisPrefs *prefs; GtkListStore *gtk_plugins; @@ -58,9 +56,7 @@ GType aweather_gui_get_type(void); /* Methods */ AWeatherGui *aweather_gui_new(); -GisWorld *aweather_gui_get_world(AWeatherGui *gui); -GisOpenGL *aweather_gui_get_opengl(AWeatherGui *gui); -GisView *aweather_gui_get_view(AWeatherGui *gui); +GisViewer *aweather_gui_get_viewer(AWeatherGui *gui); GtkWidget *aweather_gui_get_widget(AWeatherGui *gui, const gchar *name); GObject *aweather_gui_get_object(AWeatherGui *gui, const gchar *name); diff --git a/src/main.c b/src/main.c index 12d14d1..be6ff8b 100644 --- a/src/main.c +++ b/src/main.c @@ -90,14 +90,14 @@ int main(int argc, char *argv[]) site = (opt_site ?: prefs_site ?: site); offline = (opt_offline ?: prefs_offline ?: offline); - gis_world_set_offline(gui->world, offline); + gis_viewer_set_offline(gui->viewer, offline); log_levels = (1 << (debug+1))-1; GObject *action = aweather_gui_get_object(gui, "prefs_general_log"); g_signal_connect(action, "changed", G_CALLBACK(on_log_level_changed), NULL); gtk_widget_show_all(GTK_WIDGET(gui)); - gis_view_set_site(gui->view, site); + gis_viewer_set_site(gui->viewer, site); gtk_main(); return 0; } diff --git a/src/plugins/radar.c b/src/plugins/radar.c index 7500080..1811ec4 100644 --- a/src/plugins/radar.c +++ b/src/plugins/radar.c @@ -1,16 +1,16 @@ /* * Copyright (C) 2009 Andy Spencer - * + * * 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 * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -72,8 +72,8 @@ static void _bscan_sweep(GisPluginRadar *self, Sweep *sweep, colormap_t *colorma /* Load a sweep as the active texture */ static void _load_sweep(GisPluginRadar *self, Sweep *sweep) { - GisOpenGL *opengl = self->opengl; - gis_opengl_begin(opengl); + GisViewer *viewer = self->viewer; + gis_viewer_begin(viewer); self->cur_sweep = sweep; int height, width; guint8 *data; @@ -88,8 +88,8 @@ static void _load_sweep(GisPluginRadar *self, Sweep *sweep) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); g_free(data); - gis_opengl_redraw(opengl); - gis_opengl_end(opengl); + gtk_widget_queue_draw(GTK_WIDGET(viewer)); + gis_viewer_end(viewer); } static void _load_colormap(GisPluginRadar *self, gchar *table) @@ -194,7 +194,7 @@ static void _gis_plugin_radar_grid_set(GRIDCELL *grid, int gi, Ray *ray, int bi) val > 80) val = 0; grid->val[gi] = (float)val; - //g_debug("(%.2f,%.2f,%.2f) - (%.0f,%.0f,%.0f) = %d", + //g_debug("(%.2f,%.2f,%.2f) - (%.0f,%.0f,%.0f) = %d", // angle, tilt, dist, // grid->p[gi].x, // grid->p[gi].y, @@ -256,9 +256,9 @@ static void _load_radar(GisPluginRadar *self, gchar *radar_file) for (guint ri = 0; ri+x < sweep0->h.nrays; ri+=x) { //g_debug("GisPluginRadar: load_radar - ray[%3d-%3d] -- nbins = %d, %d, %d, %d", // ri, ri+x, - // rays0[ri ]->h.nbins, - // rays0[ri+1]->h.nbins, - // rays1[ri ]->h.nbins, + // rays0[ri ]->h.nbins, + // rays0[ri+1]->h.nbins, + // rays1[ri ]->h.nbins, // rays1[ri+1]->h.nbins); for (guint bi = 0; bi+x < rays1[ri]->h.nbins; bi+=x) { @@ -374,7 +374,7 @@ static void _cache_done_cb(char *path, gboolean updated, gpointer _self) argv, // gchar **argv, NULL, // gchar **envp, G_SPAWN_SEARCH_PATH| - G_SPAWN_DO_NOT_REAP_CHILD, + G_SPAWN_DO_NOT_REAP_CHILD, // GSpawnFlags flags, NULL, // GSpawnChildSetupFunc child_setup, NULL, // gpointer user_data, @@ -407,12 +407,12 @@ static void _on_sweep_clicked(GtkRadioButton *button, gpointer _self) _load_sweep (self, g_object_get_data(G_OBJECT(button), "sweep")); } -static void _on_time_changed(GisView *view, const char *time, gpointer _self) +static void _on_time_changed(GisViewer *viewer, const char *time, gpointer _self) { GisPluginRadar *self = GIS_PLUGIN_RADAR(_self); g_debug("GisPluginRadar: on_time_changed - setting time=%s", time); // format: http://mesonet.agron.iastate.edu/data/nexrd2/raw/KABR/KABR_20090510_0323 - char *site = gis_view_get_site(view); + char *site = gis_viewer_get_site(viewer); char *path = g_strdup_printf("nexrd2/raw/%s/%s_%s", site, site, time); /* Set up progress bar */ @@ -433,7 +433,7 @@ static void _on_time_changed(GisView *view, const char *time, gpointer _self) RSL_free_radar(self->cur_radar); self->cur_radar = NULL; self->cur_sweep = NULL; - gis_opengl_redraw(self->opengl); + gtk_widget_queue_draw(GTK_WIDGET(self->viewer)); /* Start loading the new radar */ if (self->soup) { @@ -441,10 +441,10 @@ static void _on_time_changed(GisView *view, const char *time, gpointer _self) self->soup = NULL; } gchar *base = gis_prefs_get_string(self->prefs, "aweather/nexrad_url", NULL); - if (gis_world_get_offline(self->world)) + if (gis_viewer_get_offline(self->viewer)) self->soup = cache_file(base, path, GIS_ONCE, _cache_chunk_cb, _cache_done_cb, self); - else + else self->soup = cache_file(base, path, GIS_UPDATE, _cache_chunk_cb, _cache_done_cb, self); g_free(path); @@ -454,16 +454,14 @@ static void _on_time_changed(GisView *view, const char *time, gpointer _self) /*********** * Methods * ***********/ -GisPluginRadar *gis_plugin_radar_new(GisWorld *world, GisView *view, GisOpenGL *opengl, GisPrefs *prefs) +GisPluginRadar *gis_plugin_radar_new(GisViewer *viewer, GisPrefs *prefs) { /* TODO: move to constructor if possible */ g_debug("GisPluginRadar: new"); GisPluginRadar *self = g_object_new(GIS_TYPE_PLUGIN_RADAR, NULL); - self->world = world; - self->view = view; - self->opengl = opengl; + self->viewer = viewer; self->prefs = prefs; - self->time_changed_id = g_signal_connect(view, "time-changed", + self->time_changed_id = g_signal_connect(viewer, "time-changed", G_CALLBACK(_on_time_changed), self); return self; } @@ -517,7 +515,7 @@ static void gis_plugin_radar_expose(GisPlugin *_self) gdouble lat = (double)h->latd + (double)h->latm/60 + (double)h->lats/(60*60); gdouble lon = (double)h->lond + (double)h->lonm/60 + (double)h->lons/(60*60); gdouble elev = h->height; - gis_opengl_center_position(self->opengl, lat, lon, elev); + gis_viewer_center_position(self->viewer, lat, lon, elev); glDisable(GL_ALPHA_TEST); glDisable(GL_CULL_FACE); @@ -619,7 +617,7 @@ static void gis_plugin_radar_dispose(GObject *gobject) { g_debug("GisPluginRadar: dispose"); GisPluginRadar *self = GIS_PLUGIN_RADAR(gobject); - g_signal_handler_disconnect(self->view, self->time_changed_id); + g_signal_handler_disconnect(self->viewer, self->time_changed_id); /* Drop references */ G_OBJECT_CLASS(gis_plugin_radar_parent_class)->dispose(gobject); } diff --git a/src/plugins/radar.h b/src/plugins/radar.h index 34a2607..1aa9cb3 100644 --- a/src/plugins/radar.h +++ b/src/plugins/radar.h @@ -47,9 +47,7 @@ struct _GisPluginRadar { GObject parent_instance; /* instance members */ - GisWorld *world; - GisView *view; - GisOpenGL *opengl; + GisViewer *viewer; GisPrefs *prefs; GtkWidget *config_body; GtkWidget *progress_bar; @@ -73,7 +71,7 @@ struct _GisPluginRadarClass { GType gis_plugin_radar_get_type(); /* Methods */ -GisPluginRadar *gis_plugin_radar_new(GisWorld *world, GisView *view, GisOpenGL *opengl, GisPrefs *prefs); +GisPluginRadar *gis_plugin_radar_new(GisViewer *viewer, GisPrefs *prefs); /* Misc. RSL helpers */ #define RSL_FOREACH_VOL(radar, volume, count, index) \ -- 2.43.2