- /* TODO: Figure out a better way to do plugins
- * AWeatherPlugin interface for tabs?
- * GisPlugin interface for expose? */
- AWeatherGui *gui = aweather_gui_new();
- GisWorld *world = aweather_gui_get_world(gui);
- GisOpenGL *opengl = aweather_gui_get_opengl(gui);
- gis_world_set_offline(world, opt_offline);
- on_map_id = g_signal_connect(gui, "map-event", G_CALLBACK(on_map), opt_site);
-
- /* Load plugins */
- aweather_gui_register_plugin(gui, AWEATHER_PLUGIN(aweather_example_new(gui)));
- aweather_gui_register_plugin(gui, AWEATHER_PLUGIN(aweather_ridge_new(gui)));
- aweather_gui_register_plugin(gui, AWEATHER_PLUGIN(aweather_radar_new(gui)));
- opengl->plugins = gui->plugins;
+ gdk_threads_enter();
+ /* Pre-load some type for gtkbuilder */
+ GRITS_TYPE_OPENGL;
+ AWEATHER_TYPE_GUI;
+ GtkBuilder *builder = gtk_builder_new();
+ if (!gtk_builder_add_from_file(builder, PKGDATADIR "/main.ui", &error))
+ g_error("Failed to create gtk builder: %s", error->message);
+ AWeatherGui *gui = AWEATHER_GUI(gtk_builder_get_object(builder, "main_window"));
+ g_signal_connect(gui, "destroy", gtk_main_quit, NULL);
+
+ gint prefs_debug = grits_prefs_get_integer(gui->prefs, "aweather/log_level", NULL);
+ gchar *prefs_site = grits_prefs_get_string(gui->prefs, "aweather/initial_site", NULL);
+ gboolean prefs_offline = grits_prefs_get_boolean(gui->prefs, "grits/offline", NULL);
+
+ debug = (opt_debug ?: prefs_debug ?: debug);
+ site = (opt_site ?: prefs_site ?: site);
+ time = (opt_time ?: time);
+ offline = (opt_offline ?: prefs_offline ?: offline);
+
+ set_location_time(gui, site, time);
+ grits_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);