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-defines.h>
28 #include <hildon/hildon-caption.h>
32 #include <hildon-fm-2/hildon/hildon-file-chooser-dialog.h>
34 #include "maemo-recorder.h"
37 #define GCONF_PATH "/apps/maemo-recorder/settings"
38 #define KEY_DEFAULT_DIR GCONF_PATH "/default_dir"
39 #define KEY_DEFAULT_FILTER GCONF_PATH "/default_filter"
41 #define DEFAULT_SAVE_DIR "/home/user/MyDocs/.sounds"
43 typedef struct _SettingsPriv SettingsPriv;
52 static SettingsPriv *settings_priv;
54 typedef struct _SettingsData SettingsData;
61 GtkWidget *format_combobox;
64 static SettingsData *settings_data;
66 static gboolean load_settings(void);
73 str = g_strdup_printf(DEFAULT_SAVE_DIR);
74 gconf_client_set_string(settings_priv->gconf, KEY_DEFAULT_DIR, str, NULL);
75 g_free(settings_priv->default_dir);
76 settings_priv->default_dir = str;
78 gconf_client_set_int(settings_priv->gconf,
79 KEY_DEFAULT_FILTER, FORMAT_WAV, NULL);
80 settings_priv->default_filter = FORMAT_WAV;
87 return settings_priv->default_filter;
91 set_default_filter(gint filter)
93 gconf_client_set_int(settings_priv->gconf,
94 KEY_DEFAULT_FILTER, filter, NULL);
95 settings_priv->default_filter = filter;
103 return settings_priv->default_dir;
107 set_default_dir(gchar * selected)
109 gconf_client_set_string(settings_priv->gconf,
110 KEY_DEFAULT_DIR, selected, NULL);
114 cb_format_changed(gpointer data)
119 gtk_combo_box_get_active(GTK_COMBO_BOX
120 (settings_data->format_combobox));
124 settings_priv->default_filter = FORMAT_WAV;
127 settings_priv->default_filter = FORMAT_PCMA;
130 settings_priv->default_filter = FORMAT_ILBC;
138 cb_chdir(gpointer data)
140 GtkWidget *dialog = NULL;
142 g_assert(settings_data);
146 GTK_WIDGET(hildon_file_chooser_dialog_new
147 (GTK_WINDOW(settings_data->window),
148 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER));
151 gtk_widget_show_all(dialog);
153 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
155 g_free(settings_priv->default_dir);
156 settings_priv->default_dir =
157 g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
158 gtk_label_set_text(GTK_LABEL(settings_data->dir_entry),
159 settings_priv->default_dir);
162 gtk_widget_destroy(dialog);
169 g_free(settings_priv->default_dir);
170 settings_priv->default_dir = gconf_client_get_string(settings_priv->gconf,
174 settings_priv->default_filter = gconf_client_get_int(settings_priv->gconf,
178 if (settings_priv->default_dir && settings_priv->default_filter)
186 settings_init(gint argc, gchar * argv[])
190 settings_priv = g_new0(SettingsPriv, 1);
191 settings_data = g_new0(SettingsData, 1);
193 gconf_init(argc, argv, &err);
197 ULOG_ERR("Unable to initialize gconf");
202 settings_priv->gconf = gconf_client_get_default();
204 if (!settings_priv->gconf)
206 ULOG_ERR("Unable to initialize gconf");
211 gconf_client_add_dir(settings_priv->gconf, GCONF_PATH,
212 GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
214 if (!load_settings())
216 ULOG_ERR("Unable to load all settings");
218 return settings_priv->gconf;
221 return settings_priv->gconf;
225 settings_edit(GtkWidget * widget, AppData * data)
228 GtkWidget *btn_chdir;
229 GtkWidget *alignment;
236 settings_data->appdata = data;
238 settings_data->window = gtk_dialog_new_with_buttons(_("Settings"),
242 GTK_DIALOG_DESTROY_WITH_PARENT
244 GTK_DIALOG_NO_SEPARATOR,
251 g_signal_connect(G_OBJECT(settings_data->window),
252 "delete_event", G_CALLBACK(gtk_widget_destroy), NULL);
254 group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL));
255 vbox = gtk_vbox_new(FALSE, HILDON_MARGIN_DEFAULT);
256 gtk_container_set_border_width(GTK_CONTAINER(vbox),
257 HILDON_MARGIN_DEFAULT);
258 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(settings_data->window)->vbox),
261 /* with the format combo on top and directory thing at the bottom it looks cleaner */
264 settings_data->format_combobox = gtk_combo_box_new_text();
266 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
268 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
270 gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox),
273 switch (settings_priv->default_filter)
276 gtk_combo_box_set_active(GTK_COMBO_BOX
277 (settings_data->format_combobox), 0);
281 gtk_combo_box_set_active(GTK_COMBO_BOX
282 (settings_data->format_combobox), 1);
287 gtk_combo_box_set_active(GTK_COMBO_BOX
288 (settings_data->format_combobox), 2);
292 g_signal_connect(G_OBJECT(settings_data->format_combobox), "changed",
293 G_CALLBACK(cb_format_changed), settings_data);
295 caption = hildon_caption_new(group, _("Default recording format:"),
296 settings_data->format_combobox, NULL,
297 HILDON_CAPTION_OPTIONAL);
299 gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0);
302 /* GtkEntry looks worse because the text get ellipsized */
303 settings_data->dir_entry = gtk_label_new(get_default_dir());
306 gtk_editable_set_editable(GTK_EDITABLE(settings_data->dir_entry), FALSE);
308 gtk_entry_set_text(GTK_ENTRY(settings_data->dir_entry), get_default_dir());
311 /* In maemo world it seems to "folder", not "directory" =( */
312 caption = hildon_caption_new(group, _("Default save folder:"),
313 settings_data->dir_entry, NULL,
314 HILDON_CAPTION_OPTIONAL);
316 gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0);
319 btn_chdir = gtk_button_new_with_label(_("Browse"));
320 alignment = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
322 gtk_container_add(GTK_CONTAINER(alignment), btn_chdir);
323 gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0);
325 g_signal_connect(G_OBJECT(btn_chdir), "clicked",
326 G_CALLBACK(cb_chdir), settings_data);
329 gtk_widget_set_size_request(btn_chdir, 40, 40);
332 gtk_widget_show_all(settings_data->window);
333 res = gtk_dialog_run(GTK_DIALOG(settings_data->window));
335 if (res == GTK_RESPONSE_OK)
337 set_default_dir(settings_priv->default_dir);
338 set_default_filter(settings_priv->default_filter);
343 ULOG_DEBUG("cancel");
346 gtk_widget_destroy(settings_data->window);