From: Andy Spencer Date: Wed, 7 Sep 2011 06:10:04 +0000 (+0000) Subject: Update command line arguments X-Git-Tag: v0.5.2~7 X-Git-Url: http://pileus.org/git/?p=aweather;a=commitdiff_plain;h=42017a7e834a0ddc97a37f24affc58c3c1b63a3a Update command line arguments Fix bug in debug argument where the debug levels of 0 are ignored because they were assumed to be unset. Implement autoupdate command line flag. Add fullscreen command line flag. Change log levels from 1-7 to 0-5 for clarity. Misc code cleanups to main.c --- diff --git a/data/defaults.ini b/data/defaults.ini index a4fd772..aeafbe6 100644 --- a/data/defaults.ini +++ b/data/defaults.ini @@ -1,7 +1,9 @@ [aweather] nexrad_url=http://mesonet.agron.iastate.edu/data/nexrd2/raw/ -log_level=7 +log_level=2 initial_site= +update_freq=5 +update_enab=false [grits] offline=false @@ -10,4 +12,5 @@ offline=false sat=true map=true env=true +elev=false radar=true diff --git a/data/main.ui.in b/data/main.ui.in index 34fbbe9..4b78ffc 100644 --- a/data/main.ui.in +++ b/data/main.ui.in @@ -829,7 +829,7 @@ The hypothetical commands `show w' and `show c' should show the appropriate part 5 - 8 + 5 1 diff --git a/docs/aweather.ad b/docs/aweather.ad index ae5f181..3e4a50b 100644 --- a/docs/aweather.ad +++ b/docs/aweather.ad @@ -8,7 +8,7 @@ aweather - Advanced weather reporting program SYNOPSIS -------- -*aweather* [*-aho*] [-d 'level'] [-s 'site'] +*aweather* [*-hoaf*] [-d 'level'] [-s 'site'] [-t 'time'] DESCRIPTION ----------- @@ -20,25 +20,35 @@ features for more details. OPTIONS ------- -*-a*, *--auto*:: - Auto update radar (todo) - *-h*, *--help*:: Show usage. *-d*, *--debug*='level':: - Change default log level*, a debug level ranges from 0 to 7. A debug - level of 7 is recommended only for debugging purposes. + Change default log level*, a debug level ranges from 0 to 5. A debug + level of 5 is recommended only for debugging purposes. *-s*, *--site*='site':: Set initial site. The site should be given as a WSR88D site code such as KLSX. +*-t*, *--time*='time':: + Set initial time. The tiem format should be provided in the + *YYYY-MM-DD HH:MM* format. + *-o*, *--offline*:: Run in offline mode, AWeather will not attempt to connect to the internet to download radar files but will show the closest matching cached file. +*-a*, *--autoupdate*:: + Run in autoupdate mode, AWeather will periodically poll data servers + for updated information. + +*-f*, *--fullscreen*:: + Run in fullscreen mode, AWeather start up using the entire screen as he + main display area. Toolbars and side panels are hidden by default and + can be accessed by moving the mouse to the edge of the screen. + KEY BINDINGS ------------ *h*, *j*, *k*, *l*:: diff --git a/src/aweather-gui.c b/src/aweather-gui.c index 6d8e423..e3ef2ab 100644 --- a/src/aweather-gui.c +++ b/src/aweather-gui.c @@ -402,13 +402,6 @@ static void prefs_setup(AWeatherGui *self) gtk_tree_view_append_column(tview, col2); g_signal_connect(rend2, "toggled", G_CALLBACK(on_plugin_toggled), self); gtk_tree_view_set_model(GTK_TREE_VIEW(tview), GTK_TREE_MODEL(self->gtk_plugins)); - - /* Setup auto update enable */ - gboolean auto_update = grits_prefs_get_boolean(self->prefs, "aweather/update_enab", NULL); - GObject *action = aweather_gui_get_object(self, "update"); - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), auto_update); - g_signal_connect_swapped(self->viewer, "refresh", G_CALLBACK(set_update_timeout), self); - set_update_timeout(self); } static void time_setup(AWeatherGui *self) @@ -579,6 +572,8 @@ static void aweather_gui_parser_finished(GtkBuildable *_self, GtkBuilder *builde g_signal_connect_swapped(self->viewer, "offline", G_CALLBACK(gtk_toggle_action_set_active), aweather_gui_get_object(self, "offline")); + g_signal_connect_swapped(self->viewer, "refresh", + G_CALLBACK(set_update_timeout), self); g_signal_connect_swapped(self->viewer, "realize", G_CALLBACK(aweather_gui_load_plugins), self); } diff --git a/src/main.c b/src/main.c index af4c0c2..9c0384d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,16 +1,16 @@ /* * Copyright (C) 2009-2010 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 . */ @@ -28,6 +28,13 @@ static gint log_levels = 0; +static int int2log(int level) { + level = G_LOG_LEVEL_ERROR << level; + level = (level<<1) - 1; + level = level & G_LOG_LEVEL_MASK; + return level; +} + static void log_func(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer udata) { @@ -43,11 +50,10 @@ static void log_func(const gchar *log_domain, GLogLevelFlags log_level, static void on_log_level_changed(GtkSpinButton *spinner, AWeatherGui *self) { g_message("main: log_level_changed"); - gint value = gtk_spin_button_get_value_as_int(spinner); - log_levels = (1 << (value+1))-1; + log_levels = int2log(gtk_spin_button_get_value_as_int(spinner)); } -gboolean set_location_time(AWeatherGui *gui, char *site, char *time) +static void set_location_time(AWeatherGui *gui, char *site, char *time) { /* Set time * Do this before setting setting location @@ -67,9 +73,13 @@ gboolean set_location_time(AWeatherGui *gui, char *site, char *time) break; } } - return FALSE; } +static void set_toggle_action(AWeatherGui *gui, const char *action, gboolean enabled) +{ + GObject *object = aweather_gui_get_object(gui, action); + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(object), enabled); +} /******** * Main * @@ -77,24 +87,28 @@ gboolean set_location_time(AWeatherGui *gui, char *site, char *time) int main(int argc, char *argv[]) { /* Defaults */ - gint debug = 6; - gchar *site = ""; - gchar *time = ""; - gboolean offline = FALSE; + gint debug = 2; // G_LOG_LEVEL_WARNING + gchar *site = ""; + gchar *time = ""; + gboolean autoupdate = FALSE; + gboolean offline = FALSE; + gboolean fullscreen = FALSE; /* Arguments */ - gint opt_debug = 0; - gchar *opt_site = NULL; - gchar *opt_time = NULL; - gboolean opt_auto = FALSE; - gboolean opt_offline = FALSE; + gint opt_debug = -1; + gchar *opt_site = NULL; + gchar *opt_time = NULL; + gboolean opt_offline = FALSE; + gboolean opt_autoupdate = FALSE; + gboolean opt_fullscreen = FALSE; GOptionEntry entries[] = { - //long short flg type location description arg desc - {"debug", 'd', 0, G_OPTION_ARG_INT, &opt_debug, "Change default log level", "[1-7]"}, - {"site", 's', 0, G_OPTION_ARG_STRING, &opt_site, "Set initial site", NULL}, - {"time", 't', 0, G_OPTION_ARG_STRING, &opt_time, "Set initial date/time", NULL}, - {"offline", 'o', 0, G_OPTION_ARG_NONE, &opt_offline, "Run in offline mode", NULL}, - {"auto", 'a', 0, G_OPTION_ARG_NONE, &opt_auto, "Auto update radar (todo)", NULL}, + //long short flg type location description arg desc + {"debug", 'd', 0, G_OPTION_ARG_INT, &opt_debug, "Change default log level", "[0-5]"}, + {"site", 's', 0, G_OPTION_ARG_STRING, &opt_site, "Set initial site", "SITE"}, + {"time", 't', 0, G_OPTION_ARG_STRING, &opt_time, "Set initial date/time", "DATE"}, + {"offline", 'o', 0, G_OPTION_ARG_NONE, &opt_offline, "Run in offline mode", NULL}, + {"autoupdate", 'a', 0, G_OPTION_ARG_NONE, &opt_autoupdate, "Auto update radar", NULL}, + {"fullscreen", 'f', 0, G_OPTION_ARG_NONE, &opt_fullscreen, "Open in fullscreen mode", NULL}, {NULL} }; @@ -108,14 +122,13 @@ int main(int argc, char *argv[]) return -1; } - /* Do some logging here for aweather_gui_new */ - if (opt_debug) log_levels = (1 << (opt_debug+1))-1; - else log_levels = (1 << (6+1))-1; + /* Setup debug level for aweather_gui_new */ g_log_set_handler(NULL, G_LOG_LEVEL_MASK, log_func, NULL); + log_levels = int2log(opt_debug >= 0 ? opt_debug : debug); /* Set up AWeather */ gdk_threads_enter(); - /* Pre-load some type for gtkbuilder */ + /* Pre-load some types for gtkbuilder */ GRITS_TYPE_OPENGL; AWEATHER_TYPE_GUI; GtkBuilder *builder = gtk_builder_new(); @@ -123,24 +136,33 @@ int main(int argc, char *argv[]) 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); + GObject *action = aweather_gui_get_object(gui, "prefs_general_log"); + g_signal_connect(action, "changed", G_CALLBACK(on_log_level_changed), 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); - + /* Finish setting up options */ + GError *err = NULL; + gint prefs_debug = grits_prefs_get_integer(gui->prefs, "aweather/log_level", &err); + 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); + gint prefs_autoupdate = grits_prefs_get_boolean(gui->prefs, "aweather/update_enab", NULL); + + debug = (opt_debug >= 0 ? opt_debug : + err == NULL ? prefs_debug : debug); + site = (opt_site ?: prefs_site ?: site); + time = (opt_time ?: time); + offline = (opt_offline ?: prefs_offline ?: offline); + autoupdate = (opt_autoupdate ?: prefs_autoupdate ?: autoupdate); + fullscreen = (opt_fullscreen ?: fullscreen); + + log_levels = int2log(debug); 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); + set_toggle_action(gui, "update", autoupdate); + set_toggle_action(gui, "fullscreen", fullscreen); + /* Done with init, show gui */ gtk_widget_show_all(GTK_WIDGET(gui)); + set_toggle_action(gui, "fullscreen", fullscreen); // Resest widget hiding gtk_main(); gdk_threads_leave(); gdk_display_close(gdk_display_get_default());