1 /* vim: set sts=4 sw=4 et: */
6 * Copyright (C) 2006 Nokia Corporation
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <glib/gi18n-lib.h>
27 #include <hildon/hildon-caption.h>
31 #include <hildon-fm-2/hildon/hildon-file-chooser-dialog.h>
33 #include "maemo-recorder.h"
36 #define GCONF_PATH "/apps/maemo-recorder/settings"
37 #define KEY_DEFAULT_DIR GCONF_PATH "/default_dir"
38 #define KEY_DEFAULT_FILTER GCONF_PATH "/default_filter"
40 typedef struct _SettingsPriv SettingsPriv;
49 static SettingsPriv *settings_priv;
51 typedef struct _SettingsData SettingsData;
58 GtkWidget *format_combobox;
61 static SettingsData *settings_data;
63 static gboolean load_settings(void);
70 str = g_strdup_printf("/home/user/MyDocs/.sounds");
71 gconf_client_set_string(settings_priv->gconf, KEY_DEFAULT_DIR, str, NULL);
72 g_free(settings_priv->default_dir);
73 settings_priv->default_dir = str;
75 gconf_client_set_int(settings_priv->gconf,
76 KEY_DEFAULT_FILTER, FORMAT_ILBC, NULL);
77 settings_priv->default_filter = FORMAT_ILBC;
84 return settings_priv->default_filter;
88 set_default_filter(gint filter)
90 gconf_client_set_int(settings_priv->gconf,
91 KEY_DEFAULT_FILTER, filter, NULL);
92 settings_priv->default_filter = filter;
100 return settings_priv->default_dir;
104 set_default_dir(gchar * selected)
106 gconf_client_set_string(settings_priv->gconf,
107 KEY_DEFAULT_DIR, selected, NULL);
111 cb_format_changed(gpointer data)
116 gtk_combo_box_get_active(GTK_COMBO_BOX
117 (settings_data->format_combobox));
121 settings_priv->default_filter = FORMAT_WAV;
124 settings_priv->default_filter = FORMAT_PCMA;
127 settings_priv->default_filter = FORMAT_ILBC;
135 cb_chdir(gpointer data)
137 GtkWidget *dialog = NULL;
139 g_assert(settings_data);
143 GTK_WIDGET(hildon_file_chooser_dialog_new
144 (GTK_WINDOW(settings_data->window),
145 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER));
148 gtk_widget_show_all(dialog);
150 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
152 g_free(settings_priv->default_dir);
153 settings_priv->default_dir =
154 g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
155 gtk_label_set_text(GTK_LABEL(settings_data->dir_entry),
156 settings_priv->default_dir);
159 gtk_widget_destroy(dialog);
166 g_free(settings_priv->default_dir);
167 settings_priv->default_dir = gconf_client_get_string(settings_priv->gconf,
171 settings_priv->default_filter = gconf_client_get_int(settings_priv->gconf,
175 if (settings_priv->default_dir && settings_priv->default_filter)
183 settings_init(gint argc, gchar * argv[])
187 settings_priv = g_new0(SettingsPriv, 1);
188 settings_data = g_new0(SettingsData, 1);
190 gconf_init(argc, argv, &err);
194 ULOG_ERR("Unable to initialize gconf");
199 settings_priv->gconf = gconf_client_get_default();
201 if (!settings_priv->gconf)
203 ULOG_ERR("Unable to initialize gconf");
208 gconf_client_add_dir(settings_priv->gconf, GCONF_PATH,
209 GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
211 if (!load_settings())
213 ULOG_ERR("Unable to load all settings");
215 return settings_priv->gconf;
218 return settings_priv->gconf;
222 settings_edit(GtkWidget * widget, AppData * data)
225 GtkWidget *btn_chdir;
226 GtkWidget *alignment;
233 settings_data->appdata = data;
235 settings_data->window = gtk_dialog_new_with_buttons(_("Settings"),
239 GTK_DIALOG_DESTROY_WITH_PARENT
241 GTK_DIALOG_NO_SEPARATOR,
248 g_signal_connect(G_OBJECT(settings_data->window),
249 "delete_event", G_CALLBACK(gtk_widget_destroy), NULL);
251 group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL));
252 vbox = gtk_vbox_new(FALSE, HILDON_MARGIN_DEFAULT);
253 gtk_container_set_border_width(GTK_CONTAINER(vbox),
254 HILDON_MARGIN_DEFAULT);
255 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(settings_data->window)->vbox),
258 /* with the format combo on top and directory thing at the bottom it looks cleaner */
261 settings_data->format_combobox = gtk_combo_box_new_text();
263 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
265 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
267 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
270 switch (settings_priv->default_filter)
273 gtk_combo_box_set_active(GTK_COMBO_BOX
274 (settings_data->format_combobox), 0);
278 gtk_combo_box_set_active(GTK_COMBO_BOX
279 (settings_data->format_combobox), 1);
284 gtk_combo_box_set_active(GTK_COMBO_BOX
285 (settings_data->format_combobox), 2);
289 g_signal_connect(G_OBJECT(settings_data->format_combobox), "changed",
290 G_CALLBACK(cb_format_changed), settings_data);
292 caption = hildon_caption_new(group, _("Default recording format:"),
293 settings_data->format_combobox, NULL,
294 HILDON_CAPTION_OPTIONAL);
296 gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0);
299 /* GtkEntry looks worse because the text get ellipsized */
300 settings_data->dir_entry = gtk_label_new(get_default_dir());
303 gtk_editable_set_editable(GTK_EDITABLE(settings_data->dir_entry), FALSE);
305 gtk_entry_set_text(GTK_ENTRY(settings_data->dir_entry), get_default_dir());
308 /* In maemo world it seems to "folder", not "directory" =( */
309 caption = hildon_caption_new(group, _("Default save folder:"),
310 settings_data->dir_entry, NULL,
311 HILDON_CAPTION_OPTIONAL);
313 gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0);
316 btn_chdir = gtk_button_new_with_label(_("Browse"));
317 alignment = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
319 gtk_container_add(GTK_CONTAINER(alignment), btn_chdir);
320 gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0);
322 g_signal_connect(G_OBJECT(btn_chdir), "clicked",
323 G_CALLBACK(cb_chdir), settings_data);
326 gtk_widget_set_size_request(btn_chdir, 40, 40);
329 gtk_widget_show_all(settings_data->window);
330 res = gtk_dialog_run(GTK_DIALOG(settings_data->window));
332 if (res == GTK_RESPONSE_OK)
334 set_default_dir(settings_priv->default_dir);
335 set_default_filter(settings_priv->default_filter);
340 ULOG_DEBUG("cancel");
343 gtk_widget_destroy(settings_data->window);