From 674479b9aa34a3ef8edd8f9bac83661c3e5e200d Mon Sep 17 00:00:00 2001 From: mjn Date: Mon, 4 Sep 2006 07:54:36 +0000 Subject: [PATCH] added default dir&format settings git-svn-id: svn+ssh://garage/svnroot/maemo-recorder/trunk@5 2441f5eb-5316-0410-9386-a49b32a51a4a --- configure.ac | 4 + debian/changelog | 7 ++ src/Makefile.am | 2 +- src/maemo-recorder-file.c | 7 +- src/maemo-recorder-file.h | 10 +- src/maemo-recorder-ui.c | 81 ++++++++----- src/maemo-recorder.c | 3 +- src/maemo-recorder.h | 2 + src/settings.c | 288 +++++++++++++++++++++++++++++++++++++++++++++ src/settings.h | 41 +++++++ 10 files changed, 406 insertions(+), 39 deletions(-) create mode 100755 src/settings.c create mode 100755 src/settings.h diff --git a/configure.ac b/configure.ac index 169262f..1826992 100644 --- a/configure.ac +++ b/configure.ac @@ -42,6 +42,10 @@ PKG_CHECK_MODULES(OSSO, libosso >= 0.8.4) AC_SUBST(OSSO_LIBS) AC_SUBST(OSSO_CFLAGS) +PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.6) +AC_SUBST(GCONF_CFLAGS) +AC_SUBST(GCONF_LIBS) + PKG_CHECK_MODULES(HILDON_LGPL, hildon-libs) AC_SUBST(HILDON_LGPL_LIBS) AC_SUBST(HILDON_LGPL_CFLAGS) diff --git a/debian/changelog b/debian/changelog index 1c4cb33..9bc91df 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +maemo-recorder (0.0.17) unstable; urgency=low + + * add settings + * increase mp3playback blocksize + + -- Marko Nykanen Sun, 3 Sep 2006 12:21:06 +0300 + maemo-recorder (0.0.16) unstable; urgency=low * wav record/playback support added diff --git a/src/Makefile.am b/src/Makefile.am index 1785a4e..edf150e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,6 +2,6 @@ bin_PROGRAMS = maemo_recorder -maemo_recorder_SOURCES = maemo-recorder.c maemo-recorder-ui.c maemo-recorder-file.c maemo-recorder-au.c +maemo_recorder_SOURCES = maemo-recorder.c maemo-recorder-ui.c maemo-recorder-file.c maemo-recorder-au.c settings.c maemo_recorder_CFLAGS = $(GTK_CFLAGS) $(OSSO_CFLAGS) $(HILDON_LGPL_CFLAGS) $(GSTREAMER_CFLAGS) $(HILDON_FM_CFLAGS) $(GNOME_VFS_CFLAGS) maemo_recorder_LDADD = $(GTK_LIBS) $(OSSO_LIBS) $(HILDON_LGPL_LIBS) $(GSTREAMER_LIBS) $(HILDON_FM_LIBS) $(GNOME_VFS_LIBS) diff --git a/src/maemo-recorder-file.c b/src/maemo-recorder-file.c index d813fda..eaa8238 100644 --- a/src/maemo-recorder-file.c +++ b/src/maemo-recorder-file.c @@ -29,6 +29,7 @@ #include "maemo-recorder.h" #include "maemo-recorder-file.h" #include "maemo-recorder-au.h" +#include "settings.h" static gboolean moveFile(const gchar *src, const gchar *dst); @@ -306,14 +307,14 @@ gboolean openFile(const gchar *filename, AudioFormat *format, gchar **tmpfile) switch (fmt) { case FORMAT_PCMA: - text_uri = g_strdup_printf("file://%s", DEFAULT_TMP_PCMA_FILE); + text_uri = g_strdup_printf("file://%s/%s", get_default_dir(), DEFAULT_TMP_PCMA_FILE); break; case FORMAT_PCMU: - text_uri = g_strdup_printf("file://%s", DEFAULT_TMP_PCMU_FILE); + text_uri = g_strdup_printf("file://%s/%s", get_default_dir(), DEFAULT_TMP_PCMU_FILE); break; case FORMAT_PCM: default: - text_uri = g_strdup_printf("file://%s", DEFAULT_TMP_FILE); + text_uri = g_strdup_printf("file://%s/%s", get_default_dir(), DEFAULT_TMP_FILE); break; } diff --git a/src/maemo-recorder-file.h b/src/maemo-recorder-file.h index a641835..2f4d324 100644 --- a/src/maemo-recorder-file.h +++ b/src/maemo-recorder-file.h @@ -36,11 +36,11 @@ #define EXTENSION_SND ".snd" #define EXTENSION_WAV ".wav" -#define DEFAULT_TMP_PCMA_FILE "/home/user/MyDocs/.sounds/mrec.pcma" -#define DEFAULT_TMP_PCMU_FILE "/home/user/MyDocs/.sounds/mrec.pcmu" -#define DEFAULT_TMP_FILE "/home/user/MyDocs/.sounds/mrec.raw" -#define DEFAULT_TMP_WAV_FILE "/home/user/MyDocs/.sounds/mrec.wav" -#define DEFAULT_TMP_ILBC_FILE "/home/user/MyDocs/.sounds/mrec.ilbc" +#define DEFAULT_TMP_PCMA_FILE "mrec.pcma" +#define DEFAULT_TMP_PCMU_FILE "mrec.pcmu" +#define DEFAULT_TMP_FILE "mrec.raw" +#define DEFAULT_TMP_WAV_FILE "mrec.wav" +#define DEFAULT_TMP_ILBC_FILE "mrec.ilbc" /* gboolean doSave(const gchar *tmpfile, const gchar *target, AudioFormat format); diff --git a/src/maemo-recorder-ui.c b/src/maemo-recorder-ui.c index f22a194..a06e086 100644 --- a/src/maemo-recorder-ui.c +++ b/src/maemo-recorder-ui.c @@ -37,7 +37,7 @@ #include "maemo-recorder.h" #include "maemo-recorder-ui.h" #include "maemo-recorder-file.h" - +#include "settings.h" #define DEFAULT_REC_BLOCKSIZE "160" @@ -171,17 +171,16 @@ static gboolean createPipeline(AppData *app, PipeLineType type) { case PIPELINE_PLAY_MP3: ULOG_INFO("mp3 playback - queue"); - src = gst_element_factory_make ("filesrc", "source"); + src = gst_element_factory_make ("gnomevfssrc", "source"); queue = gst_element_factory_make ("queue", "queue"); sink = gst_element_factory_make ("dspmp3sink", "sink"); g_object_set(G_OBJECT (queue), - "max-size-buffers", 8192, "min-threshold-bytes", 131072, - "min-threshold-buffers", 2048, NULL ); g_object_set(G_OBJECT(src), "location", app->openFileName, + "blocksize", 65536, NULL); break; @@ -1080,6 +1079,11 @@ static void cbSave(GtkWidget* widget, AppData *data) } #endif +static void cbSettings(GtkWidget* widget, AppData *data) +{ + edit_settings( widget, data ); +} + static void cbSaveAs(GtkWidget* widget, AppData *data) { GtkWidget* dialog = NULL; @@ -1102,6 +1106,9 @@ static void cbSaveAs(GtkWidget* widget, AppData *data) GTK_WINDOW(data->mainView), GTK_FILE_CHOOSER_ACTION_SAVE)); + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), + get_default_dir() ); + /* show it */ gtk_widget_show_all(dialog); @@ -1187,29 +1194,29 @@ static void cbRec(GtkWidget* widget, AppData *data) switch (data->filter) { case FORMAT_PCM: - data->saveFileName = g_strdup(DEFAULT_TMP_FILE); - data->openFileName = g_strdup(DEFAULT_TMP_FILE); - break; + data->saveFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_FILE); + data->openFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_FILE); + break; - case FORMAT_PCMA: - data->saveFileName = g_strdup(DEFAULT_TMP_PCMA_FILE); - data->openFileName = g_strdup(DEFAULT_TMP_PCMA_FILE); - break; - - case FORMAT_PCMU: - data->saveFileName = g_strdup(DEFAULT_TMP_PCMU_FILE); - data->openFileName = g_strdup(DEFAULT_TMP_PCMU_FILE); - break; + case FORMAT_PCMA: + data->saveFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_PCMA_FILE); + data->openFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_PCMA_FILE); + break; + + case FORMAT_PCMU: + data->saveFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_PCMU_FILE); + data->openFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_PCMU_FILE); + break; - case FORMAT_WAV: - data->saveFileName = g_strdup(DEFAULT_TMP_WAV_FILE); - data->openFileName = g_strdup(DEFAULT_TMP_WAV_FILE); - break; + case FORMAT_WAV: + data->saveFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_WAV_FILE); + data->openFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_WAV_FILE); + break; - case FORMAT_ILBC: - default: - data->saveFileName = g_strdup(DEFAULT_TMP_ILBC_FILE); - data->openFileName = g_strdup(DEFAULT_TMP_ILBC_FILE); + case FORMAT_ILBC: + default: + data->saveFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_ILBC_FILE); + data->openFileName = g_strdup_printf("%s/%s", get_default_dir(), DEFAULT_TMP_ILBC_FILE); break; } @@ -1512,7 +1519,7 @@ static void createMenu( AppData *data ) GtkWidget *item_pcmu; GtkWidget *item_ilbc; GtkWidget *item_pcm; - + GtkWidget *item_settings; /* GtkWidget *item_radio_type1; */ @@ -1532,6 +1539,7 @@ static void createMenu( AppData *data ) item_file_open = gtk_menu_item_new_with_label(_("Open...")); item_file_save_as = gtk_menu_item_new_with_label(_("Save as...")); item_others = gtk_menu_item_new_with_label (_("Recording format")); + item_settings = gtk_menu_item_new_with_label (_("Settings")); item_pcma = gtk_radio_menu_item_new_with_label( group, "PCM A-law"); @@ -1542,10 +1550,20 @@ static void createMenu( AppData *data ) item_pcm = gtk_radio_menu_item_new_with_label_from_widget( GTK_RADIO_MENU_ITEM(item_pcma), "WAV"); - /* default is iLBC */ - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_ilbc), TRUE); - data->filter = FORMAT_ILBC; - + data->filter = get_default_filter(); + + if (data->filter == FORMAT_ILBC) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_ilbc), TRUE); + else if (data->filter == FORMAT_WAV) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_pcm), TRUE); + else if (data->filter == FORMAT_PCMA) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_pcma), TRUE); + else + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item_ilbc), TRUE); + data->filter = FORMAT_ILBC; + } + data->radio_pcma = item_pcma; data->radio_ilbc = item_ilbc; data->radio_pcm = item_pcm; @@ -1564,6 +1582,8 @@ static void createMenu( AppData *data ) gtk_menu_append( menu_others, item_pcma ); gtk_menu_append( menu_others, item_ilbc); + gtk_menu_append( main_menu, item_settings ); + gtk_menu_append( main_menu, item_close ); /* Add others submenu to the "Others" item */ @@ -1577,6 +1597,9 @@ static void createMenu( AppData *data ) GTK_SIGNAL_FUNC (cbOpen), data); g_signal_connect( G_OBJECT( item_file_save_as), "activate", GTK_SIGNAL_FUNC (cbSaveAs), data); + g_signal_connect( G_OBJECT( item_settings ), "activate", + GTK_SIGNAL_FUNC (cbSettings), data); + g_signal_connect( G_OBJECT( item_close ), "activate", GTK_SIGNAL_FUNC (cbItemClose), data); diff --git a/src/maemo-recorder.c b/src/maemo-recorder.c index 84e5696..fd6ea9e 100644 --- a/src/maemo-recorder.c +++ b/src/maemo-recorder.c @@ -32,7 +32,7 @@ #include "maemo-recorder.h" #include "maemo-recorder-ui.h" - +#include "settings.h" static gboolean createData(AppData **data); static gboolean destroyData(AppData *data); @@ -118,6 +118,7 @@ main(int argc, char *argv[]) /* initialise gtk */ gtk_init(&argc, &argv); + appData->gconf_client = init_settings(argc, argv); maemo_recorder_ui_new(appData); diff --git a/src/maemo-recorder.h b/src/maemo-recorder.h index 7f8ade9..3e00441 100644 --- a/src/maemo-recorder.h +++ b/src/maemo-recorder.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -126,6 +127,7 @@ typedef struct _AppDataStr gint playPipelineType; osso_context_t *osso; + GConfClient *gconf_client; gchar * openFileName; gchar * saveFileName; 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); + +} + diff --git a/src/settings.h b/src/settings.h new file mode 100755 index 0000000..026175c --- /dev/null +++ b/src/settings.h @@ -0,0 +1,41 @@ +/* + * settings.h + * 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 + * + */ + +#ifndef _SETTINGS_H +#define _SETTINGS_H + +#include +#define RESP_OK 1 +#define RESP_CANCEL 2 + +void edit_settings(GtkWidget* widget, AppData *data); + +gint get_default_filter(); +void set_default_filter( gint filter ); + +gchar* get_default_dir(); +void set_default_dir(gchar* selected); + +GConfClient *init_settings(gint argc, gchar *argv[]); + +#endif // _SETTINGS_H + -- 1.7.9.5