reworked settings: made it look more like other maemo dialogs, made some things stati...
authorjait <jari.tenhunen@iki.fi>
Fri, 8 Sep 2006 15:04:22 +0000 (15:04 +0000)
committerjait <jari.tenhunen@iki.fi>
Fri, 8 Sep 2006 15:04:22 +0000 (15:04 +0000)
git-svn-id: svn+ssh://garage/svnroot/maemo-recorder/trunk@6 2441f5eb-5316-0410-9386-a49b32a51a4a

src/maemo-recorder-au.c
src/maemo-recorder-ui.c
src/maemo-recorder.c
src/maemo-recorder.h
src/settings.c
src/settings.h

index a58915d..42777be 100644 (file)
@@ -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
index a06e086..9980aa8 100644 (file)
@@ -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();
 
index fd6ea9e..3117799 100644 (file)
@@ -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);
 
index 3e00441..d878a4e 100644 (file)
@@ -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
index 9659a55..87bf2d5 100755 (executable)
@@ -1,3 +1,4 @@
+/* vim: set sts=4 sw=4 et: */
 /*
  * settings.c
  * GConf settings
@@ -21,6 +22,8 @@
  */
 
 #include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+#include <locale.h>
 #include <hildon-widgets/hildon-caption.h>
 #include <stdlib.h>
 #include <string.h>
 #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);
+}
index 026175c..ed6164a 100755 (executable)
@@ -1,3 +1,4 @@
+/* vim: set sts=4 sw=4 et: */
 /*
  * settings.h
  * GConf settings
 #define _SETTINGS_H
 
 #include <gconf/gconf-client.h>
-#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 */