X-Git-Url: http://git.maemo.org/git/?p=maemo-recorder;a=blobdiff_plain;f=src%2Fsettings.c;fp=src%2Fsettings.c;h=9659a5551292af2e236f4bac09c48e872dfa2a51;hp=0000000000000000000000000000000000000000;hb=674479b9aa34a3ef8edd8f9bac83661c3e5e200d;hpb=b25bc9a639949e359b7a110e0a3e21d5b03c0325 diff --git a/src/settings.c b/src/settings.c new file mode 100755 index 0000000..9659a55 --- /dev/null +++ b/src/settings.c @@ -0,0 +1,288 @@ +/* + * settings.c + * GConf settings + * + * Copyright (C) 2006 Nokia Corporation + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 + * + */ + +#include +#include +#include +#include +#include +#include + +#include "maemo-recorder.h" +#include "settings.h" + +#define GCONF_PATH "/apps/maemo-recorder/settings" +#define KEY_DEFAULT_DIR GCONF_PATH "/default_dir" +#define KEY_DEFAULT_FILTER GCONF_PATH "/default_filter" + +typedef struct _SettingsPriv SettingsPriv; + +struct _SettingsPriv +{ + GConfClient *gconf; + gchar* default_dir; + gint default_filter; +}; + +SettingsPriv *settings_priv; + +typedef struct _SettingsData SettingsData; + +struct _SettingsData +{ + AppData* appdata; + GtkWidget* label; + GtkWidget* window; + GtkComboBox *format_combobox; +}; + +SettingsData *settings_data; + +static gboolean load_settings(); + +static void set_default() +{ + gchar* str; + + str = g_strdup_printf("/home/user/MyDocs/.sounds"); + gconf_client_set_string( + settings_priv->gconf, + KEY_DEFAULT_DIR, + str, + NULL); + settings_priv->default_dir = str; + + gconf_client_set_int( + settings_priv->gconf, + KEY_DEFAULT_FILTER, + FORMAT_ILBC, + NULL); + settings_priv->default_filter = FORMAT_ILBC; +} + +gint get_default_filter() +{ + load_settings(); + return settings_priv->default_filter; +} + +void set_default_filter( gint filter ) +{ + gconf_client_set_int( + settings_priv->gconf, + KEY_DEFAULT_FILTER, + filter, + NULL); + settings_priv->default_filter = filter; + +} + +gchar* get_default_dir() +{ + load_settings(); + return settings_priv->default_dir; +} + +void set_default_dir(gchar* selected) +{ + gconf_client_set_string( + settings_priv->gconf, + KEY_DEFAULT_DIR, + selected, + NULL); +} + +static void cb_format_changed(gpointer data) +{ + gint active; + + active = gtk_combo_box_get_active(settings_data->format_combobox); + switch (active) + { + case 0: + settings_priv->default_filter = FORMAT_WAV; + break; + case 1: + settings_priv->default_filter = FORMAT_PCMA; + break; + case 2: + settings_priv->default_filter = FORMAT_ILBC; + break; + default: + break; + + } +} + +static void cb_chdir(gpointer data) +{ + GtkWidget* dialog = NULL; + gchar *selected = NULL; + + g_assert(settings_data); + + /* create dialog */ + dialog = GTK_WIDGET(hildon_file_chooser_dialog_new( + GTK_WINDOW(settings_data->window), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)); + + /* show it */ + gtk_widget_show_all(dialog); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) + { + selected = g_strdup_printf("Default dir: %s", + gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); + gtk_label_set_text(GTK_LABEL(settings_data->label), selected); + settings_priv->default_dir = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); + } + + gtk_widget_destroy(dialog); + +} + +static gboolean load_settings() +{ + settings_priv->default_dir = gconf_client_get_string( + settings_priv->gconf, + KEY_DEFAULT_DIR, + NULL); + + settings_priv->default_filter = gconf_client_get_int( + settings_priv->gconf, + KEY_DEFAULT_FILTER, + NULL); + + if ( settings_priv->default_dir && settings_priv->default_filter ) + return TRUE; + else + return FALSE; + +} + +GConfClient *init_settings(gint argc, gchar *argv[]) +{ + GError *err = NULL; + settings_priv = g_new0(SettingsPriv, 1); + settings_data = g_new0(SettingsData, 1); + gconf_init(argc, argv, &err); + if(err) + { + ULOG_ERR("Unable to initialize gconf"); + set_default(); + return NULL; + } + settings_priv->gconf = gconf_client_get_default(); + if(!settings_priv->gconf) + { + ULOG_ERR("Unable to initialize gconf"); + set_default(); + return NULL; + } + + gconf_client_add_dir(settings_priv->gconf, GCONF_PATH, + GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + + if(!load_settings()) + { + ULOG_ERR("Unable to load all settings"); + set_default(); + return settings_priv->gconf; + } + + return settings_priv->gconf; +} + +void edit_settings(GtkWidget* widget, AppData *data) +{ + GtkWidget* btn_chdir; + GtkWidget* label_def_format; + gint res; + gchar* str; + + load_settings(); + + settings_data->appdata = data; + + settings_data->window = gtk_dialog_new_with_buttons("Settings", + GTK_WINDOW(data->mainView), + GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, + "OK", RESP_OK, + "Cancel", RESP_CANCEL, + NULL, NULL); + + settings_data->format_combobox = GTK_COMBO_BOX(gtk_combo_box_new_text()); + + g_signal_connect(G_OBJECT(settings_data->window), + "delete_event", + G_CALLBACK(gtk_widget_destroy), + NULL); + + str = g_strdup_printf("Default dir: %s", get_default_dir()); + settings_data->label = gtk_label_new(str); + label_def_format = gtk_label_new("Default format"); + + btn_chdir = gtk_button_new_with_label("Change dir"); + + g_signal_connect(G_OBJECT(btn_chdir), "clicked", + G_CALLBACK(cb_chdir), + settings_data); + + gtk_widget_set_size_request(btn_chdir, 40, 40); + + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), "WAV"); + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), "PCM A-law"); + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), "iLBC"); + + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(settings_data->window)->vbox), settings_data->label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(settings_data->window)->vbox), btn_chdir, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(settings_data->window)->vbox), label_def_format, FALSE, FALSE, 5); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(settings_data->window)->vbox), GTK_WIDGET(settings_data->format_combobox), FALSE, FALSE, 0); + + if (settings_priv->default_filter == FORMAT_ILBC) + gtk_combo_box_set_active(settings_data->format_combobox, 2); + if (settings_priv->default_filter == FORMAT_WAV) + gtk_combo_box_set_active(settings_data->format_combobox, 0); + if (settings_priv->default_filter == FORMAT_PCMA) + gtk_combo_box_set_active(settings_data->format_combobox, 1); + + + g_signal_connect(G_OBJECT(settings_data->format_combobox), "changed", + G_CALLBACK(cb_format_changed), settings_data); + + gtk_widget_show_all(settings_data->window); + + res = gtk_dialog_run(GTK_DIALOG(settings_data->window)); + + if(res == RESP_OK) + { + set_default_dir(settings_priv->default_dir); + set_default_filter(settings_priv->default_filter); + printf("ok"); + } else { + printf("cancel"); + } + + gtk_widget_destroy(settings_data->window); + +} +