/* * Copyright (C) 2004-2006 Jimmy Do * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H #include #endif #include "prefs-dialog.h" #include "layout-utils.h" #include "timer-applet.h" #include static void on_show_time_changed (GtkWidget *check_button, PanelApplet *applet) { gboolean value; g_assert (applet); g_object_get (GTK_CHECK_BUTTON (check_button), "active", &value, NULL); panel_applet_gconf_set_bool (applet, SHOW_REMAINING_TIME_KEY, value, NULL); } static void on_play_sound_changed (GtkWidget *check_button, PanelApplet *applet) { gboolean value; g_assert (applet); g_object_get (GTK_CHECK_BUTTON (check_button), "active", &value, NULL); panel_applet_gconf_set_bool (applet, PLAY_NOTIFICATION_SOUND_KEY, value, NULL); } static void on_use_custom_sound_toggled (GtkWidget *check_button, PanelApplet *applet) { gboolean value; g_assert (applet); g_object_get (GTK_CHECK_BUTTON (check_button), "active", &value, NULL); panel_applet_gconf_set_bool (applet, USE_CUST_NOTIFICATION_SOUND_KEY, value, NULL); } static void on_sound_file_chooser_dialog_response (GtkDialog *dialog, gint response, PanelApplet *applet) { g_assert (applet); if (response == GTK_RESPONSE_ACCEPT) { gchar *sound_file_path; sound_file_path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (sound_file_path == NULL) { sound_file_path = g_strdup (""); } g_assert (sound_file_path); panel_applet_gconf_set_string (applet, CUST_NOTIFICATION_SOUND_PATH_KEY, sound_file_path, NULL); g_free (sound_file_path); sound_file_path = NULL; } } static void on_prefs_dialog_response (GtkDialog *dialog, gint response, gpointer user_data) { switch (response) { case GTK_RESPONSE_CLOSE: gtk_widget_hide (GTK_WIDGET (dialog)); break; case GTK_RESPONSE_DELETE_EVENT: g_print ("Prefs dialog delete event\n"); break; default: g_assert_not_reached (); } } GtkWidget * prefs_dialog_new (PanelApplet *applet) { GtkWidget *prefs_dialog; GtkWidget *main_vbox; GtkWidget *check_show_time; GtkWidget *play_sound_group; GtkWidget *custom_sound_group; GtkWidget *check_play_sound; GtkWidget *radio_use_default_sound; GtkWidget *radio_use_custom_sound; GtkWidget *file_chooser_dialog; GtkWidget *sound_file_chooser; prefs_dialog = gtk_dialog_new_with_buttons (_("Timer Preferences"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_object_set (G_OBJECT (prefs_dialog), "has-separator", FALSE, "border-width", 0, NULL); g_assert (applet); g_object_set_data (G_OBJECT (prefs_dialog), "panel-applet", applet); main_vbox = gtk_vbox_new (FALSE, 18); g_object_set (G_OBJECT (main_vbox), "border-width", 12, NULL); gtk_widget_ensure_style (prefs_dialog); g_object_set (G_OBJECT (GTK_DIALOG (prefs_dialog)->vbox), "border-width", 0, NULL); g_object_set (G_OBJECT (GTK_DIALOG (prefs_dialog)->action_area), "border-width", 12, NULL); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prefs_dialog)->vbox), main_vbox, TRUE, TRUE, 0); gtk_widget_show (main_vbox); check_show_time = gtk_check_button_new_with_mnemonic (_("_Show remaining time in panel")); gtk_box_pack_start (GTK_BOX (main_vbox), check_show_time, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (check_show_time), "toggled", G_CALLBACK (on_show_time_changed), applet); g_object_set_data (G_OBJECT (prefs_dialog), "prefs-show-remaining-time", check_show_time); check_play_sound = gtk_check_button_new_with_mnemonic (_("_Play notification sound")); radio_use_default_sound = gtk_radio_button_new_with_mnemonic (NULL, _("Use d_efault sound")); radio_use_custom_sound = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio_use_default_sound), _("Use c_ustom sound")); file_chooser_dialog = gtk_file_chooser_dialog_new (_("Choose a Sound File"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); sound_file_chooser = gtk_file_chooser_button_new_with_dialog (file_chooser_dialog); custom_sound_group = create_group_box (radio_use_custom_sound); group_box_add_row (GTK_WIDGET (custom_sound_group), sound_file_chooser); play_sound_group = create_group_box (check_play_sound); group_box_add_row (GTK_WIDGET (play_sound_group), radio_use_default_sound); group_box_add_row (GTK_WIDGET (play_sound_group), custom_sound_group); gtk_box_pack_start (GTK_BOX (main_vbox), play_sound_group, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (check_play_sound), "toggled", G_CALLBACK (on_play_sound_changed), applet); g_signal_connect (G_OBJECT (radio_use_custom_sound), "toggled", G_CALLBACK (on_use_custom_sound_toggled), applet); g_signal_connect (G_OBJECT (file_chooser_dialog), "response", G_CALLBACK (on_sound_file_chooser_dialog_response), applet); g_object_set_data (G_OBJECT (prefs_dialog), "prefs-play-notification-sound", check_play_sound); g_object_set_data (G_OBJECT (prefs_dialog), "prefs-use-default-sound", radio_use_default_sound); g_object_set_data (G_OBJECT (prefs_dialog), "prefs-use-custom-sound", radio_use_custom_sound); g_object_set_data (G_OBJECT (prefs_dialog), "prefs-sound-file-chooser", sound_file_chooser); prefs_dialog_update (GTK_DIALOG (prefs_dialog)); g_signal_connect (G_OBJECT (prefs_dialog), "response", G_CALLBACK (on_prefs_dialog_response), NULL); g_signal_connect (G_OBJECT (prefs_dialog), "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); gtk_widget_show (check_show_time); gtk_widget_show (check_play_sound); gtk_widget_show (radio_use_default_sound); gtk_widget_show (radio_use_custom_sound); gtk_widget_show (sound_file_chooser); gtk_widget_show (custom_sound_group); gtk_widget_show (play_sound_group); return prefs_dialog; } void prefs_dialog_open (GtkDialog *prefs_dialog) { g_assert (prefs_dialog); gtk_window_present (GTK_WINDOW (prefs_dialog)); } void prefs_dialog_update (GtkDialog *prefs_dialog) { gboolean show_time; gboolean play_sound; gboolean use_custom_sound; gchar *custom_sound_path; PanelApplet *applet; applet = g_object_get_data (G_OBJECT (prefs_dialog), "panel-applet"); g_assert (applet); show_time = panel_applet_gconf_get_bool (applet, SHOW_REMAINING_TIME_KEY, NULL); play_sound = panel_applet_gconf_get_bool (applet, PLAY_NOTIFICATION_SOUND_KEY, NULL); use_custom_sound = panel_applet_gconf_get_bool (applet, USE_CUST_NOTIFICATION_SOUND_KEY, NULL); custom_sound_path = panel_applet_gconf_get_string (applet, CUST_NOTIFICATION_SOUND_PATH_KEY, NULL); if (custom_sound_path == NULL) { custom_sound_path = g_strdup (""); } { GtkWidget *prefs_show_remaining_time; GtkWidget *prefs_play_notification_sound; GtkWidget *prefs_use_default_sound; GtkWidget *prefs_use_custom_sound; GtkWidget *prefs_sound_file_chooser; prefs_show_remaining_time = g_object_get_data (G_OBJECT (prefs_dialog), "prefs-show-remaining-time"); prefs_play_notification_sound = g_object_get_data (G_OBJECT (prefs_dialog), "prefs-play-notification-sound"); prefs_use_default_sound = g_object_get_data (G_OBJECT (prefs_dialog), "prefs-use-default-sound"); prefs_use_custom_sound = g_object_get_data (G_OBJECT (prefs_dialog), "prefs-use-custom-sound"); prefs_sound_file_chooser = g_object_get_data (G_OBJECT (prefs_dialog), "prefs-sound-file-chooser"); g_assert (prefs_show_remaining_time); g_assert (prefs_play_notification_sound); g_assert (prefs_use_default_sound); g_assert (prefs_use_custom_sound); g_assert (prefs_sound_file_chooser); g_object_set (G_OBJECT (prefs_show_remaining_time), "active", show_time, NULL); g_object_set (G_OBJECT (prefs_play_notification_sound), "active", play_sound, NULL); g_object_set (G_OBJECT (prefs_use_default_sound), "sensitive", play_sound, NULL); g_object_set (G_OBJECT (prefs_use_custom_sound), "sensitive", play_sound, NULL); if (use_custom_sound) { g_object_set (G_OBJECT (prefs_use_custom_sound), "active", TRUE, NULL); } else { g_object_set (G_OBJECT (prefs_use_default_sound), "active", TRUE, NULL); } g_object_set (G_OBJECT (prefs_sound_file_chooser), "sensitive", play_sound && use_custom_sound, NULL); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (prefs_sound_file_chooser), custom_sound_path); g_free (custom_sound_path); custom_sound_path = NULL; } }