From: jait Date: Fri, 8 Sep 2006 15:04:22 +0000 (+0000) Subject: reworked settings: made it look more like other maemo dialogs, made some things stati... X-Git-Tag: 0.3.0~18 X-Git-Url: http://git.maemo.org/git/?p=maemo-recorder;a=commitdiff_plain;h=ef8d8d8149bced531b27603ee806dbf816c00bdd reworked settings: made it look more like other maemo dialogs, made some things static, fixed names and formatting etc.. git-svn-id: svn+ssh://garage/svnroot/maemo-recorder/trunk@6 2441f5eb-5316-0410-9386-a49b32a51a4a --- diff --git a/src/maemo-recorder-au.c b/src/maemo-recorder-au.c index a58915d..42777be 100644 --- a/src/maemo-recorder-au.c +++ b/src/maemo-recorder-au.c @@ -1,4 +1,4 @@ -/* vim: set ts=4 sw=4 et: */ +/* vim: set sts=4 sw=4 et: */ /* * maemo-recorder-au.c * Support for reading and writing AU/SND files diff --git a/src/maemo-recorder-ui.c b/src/maemo-recorder-ui.c index a06e086..9980aa8 100644 --- a/src/maemo-recorder-ui.c +++ b/src/maemo-recorder-ui.c @@ -1,4 +1,4 @@ -/* vim: set ts=4 sw=4 et: */ +/* vim: set sts=4 sw=4 et: */ /* * maemo-recorder-ui.c * @@ -312,7 +312,8 @@ static gboolean createPipeline(AppData *app, PipeLineType type) ULOG_ERR("gst_element_link failed for src, filter and sink!"); return FALSE; } - break; + break; + case FORMAT_WAV: gst_bin_add_many(GST_BIN(pipeline), src, parse, sink, NULL); if (!gst_element_link_many (src, parse, sink, NULL)) @@ -347,6 +348,7 @@ static gboolean createPipeline(AppData *app, PipeLineType type) } break; + case FORMAT_WAV: gst_bin_add_many(GST_BIN(pipeline), src, parse, NULL); if (!gst_element_link_many (src, parse, NULL)) @@ -357,7 +359,6 @@ static gboolean createPipeline(AppData *app, PipeLineType type) app->playPipeline = pipeline; g_signal_connect(parse, "pad_added", G_CALLBACK(new_pad_cb), app); - break; default: @@ -425,6 +426,7 @@ static gboolean destroyPipeline(AppData *data, PipeLineType type) data->recPipeline = NULL; */ break; + default: pipeline = data->playPipeline; /* @@ -504,11 +506,11 @@ static void pipelineStateChanged (GstElement *element, break; case GST_STATE_READY: - /* hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, "Ready..."); */ - ULOG_INFO("%s() - Ready", G_STRFUNC); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), + /* hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, "Ready..."); */ + ULOG_INFO("%s() - Ready", G_STRFUNC); + gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), RECORDER_MSG_READY); - break; + break; case GST_STATE_PAUSED: { @@ -576,6 +578,7 @@ static gboolean cbBus(GstBus *bus, g_free (debug); break; } + case GST_MESSAGE_ERROR: { GError *err; @@ -588,6 +591,7 @@ static gboolean cbBus(GstBus *bus, /* break; */ /* flow through to eos */ } + case GST_MESSAGE_EOS: { ULOG_INFO("%s() - eos", G_STRFUNC); @@ -613,6 +617,7 @@ static gboolean cbBus(GstBus *bus, } break; } + case GST_MESSAGE_STATE_CHANGED: { GstState old; @@ -1081,7 +1086,7 @@ static void cbSave(GtkWidget* widget, AppData *data) static void cbSettings(GtkWidget* widget, AppData *data) { - edit_settings( widget, data ); + settings_edit( widget, data ); } static void cbSaveAs(GtkWidget* widget, AppData *data) @@ -1542,13 +1547,13 @@ static void createMenu( AppData *data ) item_settings = gtk_menu_item_new_with_label (_("Settings")); item_pcma = gtk_radio_menu_item_new_with_label( - group, "PCM A-law"); + group, FORMAT_NAME_PCMA); item_ilbc = gtk_radio_menu_item_new_with_label_from_widget( - GTK_RADIO_MENU_ITEM(item_pcma), "iLBC"); + GTK_RADIO_MENU_ITEM(item_pcma), FORMAT_NAME_ILBC); item_pcmu = gtk_radio_menu_item_new_with_label_from_widget( - GTK_RADIO_MENU_ITEM(item_pcma), "PCM u-law"); + GTK_RADIO_MENU_ITEM(item_pcma), FORMAT_NAME_PCMU); item_pcm = gtk_radio_menu_item_new_with_label_from_widget( - GTK_RADIO_MENU_ITEM(item_pcma), "WAV"); + GTK_RADIO_MENU_ITEM(item_pcma), FORMAT_NAME_WAV); data->filter = get_default_filter(); diff --git a/src/maemo-recorder.c b/src/maemo-recorder.c index fd6ea9e..3117799 100644 --- a/src/maemo-recorder.c +++ b/src/maemo-recorder.c @@ -118,7 +118,8 @@ main(int argc, char *argv[]) /* initialise gtk */ gtk_init(&argc, &argv); - appData->gconf_client = init_settings(argc, argv); + + appData->gconf_client = settings_init(argc, argv); maemo_recorder_ui_new(appData); diff --git a/src/maemo-recorder.h b/src/maemo-recorder.h index 3e00441..d878a4e 100644 --- a/src/maemo-recorder.h +++ b/src/maemo-recorder.h @@ -78,6 +78,11 @@ typedef enum FORMAT_WAV } AudioFormat; +#define FORMAT_NAME_WAV "WAV" +#define FORMAT_NAME_PCMA "PCM A-law" +#define FORMAT_NAME_PCMU "PCM u-law" +#define FORMAT_NAME_ILBC "iLBC" + /* TODO: this kind of struct might be more handy when passing around audioformat info */ #if 0 struct _AudioFormatSpec diff --git a/src/settings.c b/src/settings.c index 9659a55..87bf2d5 100755 --- a/src/settings.c +++ b/src/settings.c @@ -1,3 +1,4 @@ +/* vim: set sts=4 sw=4 et: */ /* * settings.c * GConf settings @@ -21,6 +22,8 @@ */ #include +#include +#include #include #include #include @@ -30,259 +33,310 @@ #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" +#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; + GConfClient *gconf; + gchar *default_dir; + gint default_filter; }; -SettingsPriv *settings_priv; +static SettingsPriv *settings_priv; typedef struct _SettingsData SettingsData; struct _SettingsData { - AppData* appdata; - GtkWidget* label; - GtkWidget* window; - GtkComboBox *format_combobox; + AppData *appdata; + GtkWidget *dir_entry; + GtkWidget *window; + GtkWidget *format_combobox; }; -SettingsData *settings_data; +static SettingsData *settings_data; -static gboolean load_settings(); +static gboolean load_settings(void); -static void set_default() +static void +reset_defaults() { - gchar* str; + gchar *str; str = g_strdup_printf("/home/user/MyDocs/.sounds"); - gconf_client_set_string( - settings_priv->gconf, - KEY_DEFAULT_DIR, - str, - NULL); + gconf_client_set_string(settings_priv->gconf, KEY_DEFAULT_DIR, str, NULL); + g_free(settings_priv->default_dir); settings_priv->default_dir = str; - gconf_client_set_int( - settings_priv->gconf, - KEY_DEFAULT_FILTER, - FORMAT_ILBC, - NULL); + gconf_client_set_int(settings_priv->gconf, + KEY_DEFAULT_FILTER, FORMAT_ILBC, NULL); settings_priv->default_filter = FORMAT_ILBC; } -gint get_default_filter() +gint +get_default_filter() { load_settings(); return settings_priv->default_filter; } -void set_default_filter( gint filter ) +void +set_default_filter(gint filter) { - gconf_client_set_int( - settings_priv->gconf, - KEY_DEFAULT_FILTER, - filter, - NULL); - settings_priv->default_filter = filter; - + gconf_client_set_int(settings_priv->gconf, + KEY_DEFAULT_FILTER, filter, NULL); + settings_priv->default_filter = filter; + } -gchar* get_default_dir() +gchar * +get_default_dir() { load_settings(); return settings_priv->default_dir; } -void set_default_dir(gchar* selected) +void +set_default_dir(gchar * selected) { - gconf_client_set_string( - settings_priv->gconf, - KEY_DEFAULT_DIR, - selected, - NULL); + gconf_client_set_string(settings_priv->gconf, + KEY_DEFAULT_DIR, selected, NULL); } -static void cb_format_changed(gpointer data) +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; - - } + gint active; + + active = + gtk_combo_box_get_active(GTK_COMBO_BOX + (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) +static void +cb_chdir(gpointer data) { - GtkWidget* dialog = NULL; - gchar *selected = NULL; + GtkWidget *dialog = 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)); + 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))); + g_free(settings_priv->default_dir); + settings_priv->default_dir = + g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); + gtk_label_set_text(GTK_LABEL(settings_data->dir_entry), + settings_priv->default_dir); } gtk_widget_destroy(dialog); } -static gboolean load_settings() +static gboolean +load_settings() { - settings_priv->default_dir = gconf_client_get_string( - settings_priv->gconf, - KEY_DEFAULT_DIR, - NULL); + g_free(settings_priv->default_dir); + 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); + settings_priv->default_filter = gconf_client_get_int(settings_priv->gconf, + KEY_DEFAULT_FILTER, + NULL); - if ( settings_priv->default_dir && settings_priv->default_filter ) + if (settings_priv->default_dir && settings_priv->default_filter) return TRUE; else - return FALSE; - + return FALSE; + } -GConfClient *init_settings(gint argc, gchar *argv[]) +GConfClient * +settings_init(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) + + if (err) { ULOG_ERR("Unable to initialize gconf"); - set_default(); + reset_defaults(); return NULL; } + settings_priv->gconf = gconf_client_get_default(); - if(!settings_priv->gconf) + + if (!settings_priv->gconf) { ULOG_ERR("Unable to initialize gconf"); - set_default(); + reset_defaults(); return NULL; } gconf_client_add_dir(settings_priv->gconf, GCONF_PATH, - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - if(!load_settings()) + if (!load_settings()) { ULOG_ERR("Unable to load all settings"); - set_default(); + reset_defaults(); return settings_priv->gconf; } - + return settings_priv->gconf; } -void edit_settings(GtkWidget* widget, AppData *data) +void +settings_edit(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); + GtkWidget *vbox; + GtkWidget *btn_chdir; + GtkWidget *alignment; + GtkWidget *caption; + GtkSizeGroup *group; + gint res; -} + load_settings(); + + settings_data->appdata = data; + + settings_data->window = gtk_dialog_new_with_buttons(_("Settings"), + GTK_WINDOW(data-> + mainView), + GTK_DIALOG_MODAL | + GTK_DIALOG_DESTROY_WITH_PARENT + | + GTK_DIALOG_NO_SEPARATOR, + _("OK"), + GTK_RESPONSE_OK, + _("Cancel"), + GTK_RESPONSE_CANCEL, + NULL, NULL); + + g_signal_connect(G_OBJECT(settings_data->window), + "delete_event", G_CALLBACK(gtk_widget_destroy), NULL); + + group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL)); + vbox = gtk_vbox_new(FALSE, HILDON_MARGIN_DEFAULT); + gtk_container_set_border_width(GTK_CONTAINER(vbox), + HILDON_MARGIN_DEFAULT); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(settings_data->window)->vbox), + vbox); + + /* GtkEntry looks worse because the text get ellipsized */ + settings_data->dir_entry = gtk_label_new(get_default_dir()); + + /* + gtk_editable_set_editable(GTK_EDITABLE(settings_data->dir_entry), FALSE); + + gtk_entry_set_text(GTK_ENTRY(settings_data->dir_entry), get_default_dir()); + */ + + /* In maemo world it seems to "folder", not "directory" =( */ + caption = hildon_caption_new(group, _("Default save folder:"), + settings_data->dir_entry, NULL, + HILDON_CAPTION_OPTIONAL); + + gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0); + /* browse button */ + btn_chdir = gtk_button_new_with_label(_("Browse")); + alignment = gtk_alignment_new(1.0, 0.5, 0.0, 0.0); + + gtk_container_add(GTK_CONTAINER(alignment), btn_chdir); + gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(btn_chdir), "clicked", + G_CALLBACK(cb_chdir), settings_data); + + /* + gtk_widget_set_size_request(btn_chdir, 40, 40); + */ + + /* format combo */ + settings_data->format_combobox = gtk_combo_box_new_text(); + + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), + FORMAT_NAME_WAV); + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), + FORMAT_NAME_PCMA); + gtk_combo_box_append_text(GTK_COMBO_BOX(settings_data->format_combobox), + FORMAT_NAME_ILBC); + + switch (settings_priv->default_filter) + { + case FORMAT_WAV: + gtk_combo_box_set_active(GTK_COMBO_BOX + (settings_data->format_combobox), 0); + break; + + case FORMAT_PCMA: + gtk_combo_box_set_active(GTK_COMBO_BOX + (settings_data->format_combobox), 1); + break; + + case FORMAT_ILBC: + default: + gtk_combo_box_set_active(GTK_COMBO_BOX + (settings_data->format_combobox), 2); + break; + } + + g_signal_connect(G_OBJECT(settings_data->format_combobox), "changed", + G_CALLBACK(cb_format_changed), settings_data); + + caption = hildon_caption_new(group, _("Default recording format:"), + settings_data->format_combobox, NULL, + HILDON_CAPTION_OPTIONAL); + + gtk_box_pack_start(GTK_BOX(vbox), caption, FALSE, FALSE, 0); + + + gtk_widget_show_all(settings_data->window); + res = gtk_dialog_run(GTK_DIALOG(settings_data->window)); + + if (res == GTK_RESPONSE_OK) + { + set_default_dir(settings_priv->default_dir); + set_default_filter(settings_priv->default_filter); + ULOG_DEBUG("ok"); + } + else + { + ULOG_DEBUG("cancel"); + } + + gtk_widget_destroy(settings_data->window); +} diff --git a/src/settings.h b/src/settings.h index 026175c..ed6164a 100755 --- a/src/settings.h +++ b/src/settings.h @@ -1,3 +1,4 @@ +/* vim: set sts=4 sw=4 et: */ /* * settings.h * GConf settings @@ -24,18 +25,16 @@ #define _SETTINGS_H #include -#define RESP_OK 1 -#define RESP_CANCEL 2 -void edit_settings(GtkWidget* widget, AppData *data); +void settings_edit(GtkWidget* widget, AppData *data); -gint get_default_filter(); -void set_default_filter( gint filter ); +gint get_default_filter(void); +void set_default_filter(gint filter); -gchar* get_default_dir(); +gchar* get_default_dir(void); void set_default_dir(gchar* selected); -GConfClient *init_settings(gint argc, gchar *argv[]); +GConfClient *settings_init(gint argc, gchar *argv[]); -#endif // _SETTINGS_H +#endif /* _SETTINGS_H */