applet: read/write config values via gconf
authorAlex Badea <vamposdecampos@gmail.com>
Sun, 20 Jun 2010 08:31:49 +0000 (11:31 +0300)
committerAlex Badea <vamposdecampos@gmail.com>
Sun, 20 Jun 2010 08:31:49 +0000 (11:31 +0300)
configure.ac
debian/control
src/Makefile.am
src/applet.c

index d33b1ee..e58405a 100644 (file)
@@ -30,6 +30,10 @@ PKG_CHECK_MODULES(HILDON, libhildondesktop-1)
 AC_SUBST(HILDON_LIBS)
 AC_SUBST(HILDON_CFLAGS)
 
 AC_SUBST(HILDON_LIBS)
 AC_SUBST(HILDON_CFLAGS)
 
+PKG_CHECK_MODULES(GCONF, gconf-2.0)
+AC_SUBST(GCONF_LIBS)
+AC_SUBST(GCONF_CFLAGS)
+
 AC_OUTPUT([
        Makefile
        src/Makefile
 AC_OUTPUT([
        Makefile
        src/Makefile
index 4e6fe75..d094784 100644 (file)
@@ -4,7 +4,7 @@ Priority: extra
 Maintainer: Alex Badea <vamposdecampos@gmail.com>
 Build-Depends: debhelper (>= 5),
  libglib2.0-dev, libdbus-glib-1-dev, libhal-dev, mce-dev (>= 1.8.10),
 Maintainer: Alex Badea <vamposdecampos@gmail.com>
 Build-Depends: debhelper (>= 5),
  libglib2.0-dev, libdbus-glib-1-dev, libhal-dev, mce-dev (>= 1.8.10),
- libgtk2.0-dev, libhildondesktop1-dev, hildon-control-panel-dev, libosso-dev (>= 1)
+ libgtk2.0-dev, libhildondesktop1-dev, hildon-control-panel-dev, libosso-dev (>= 1), libgconf2-dev
 Standards-Version: 3.7.2
 
 Package: espeaktime-daemon
 Standards-Version: 3.7.2
 
 Package: espeaktime-daemon
index e6024e6..77006b7 100644 (file)
@@ -7,11 +7,11 @@ espeaktimed_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) $(MCE_LIBS) $(HAL_LIBS)
 libcpdir = $(libdir)/hildon-control-panel
 libcp_LTLIBRARIES = libespeaktime-cp.la
 libespeaktime_cp_la_SOURCES = applet.c
 libcpdir = $(libdir)/hildon-control-panel
 libcp_LTLIBRARIES = libespeaktime-cp.la
 libespeaktime_cp_la_SOURCES = applet.c
-libespeaktime_cp_la_CFLAGS = $(HILDON_CFLAGS) $(OSSO_CFLAGS)
+libespeaktime_cp_la_CFLAGS = $(HILDON_CFLAGS) $(GCONF_CLAGS) $(OSSO_CFLAGS)
 libespeaktime_cp_la_LDFLAGS = -module -avoid-version
 libespeaktime_cp_la_LDFLAGS = -module -avoid-version
-libespeaktime_cp_la_LIBADD = $(HILDON_LIBS)
+libespeaktime_cp_la_LIBADD = $(HILDON_LIBS) $(GCONF_LIBS)
 
 EXTRA_PROGRAMS = applet
 applet_SOURCES = applet.c
 
 EXTRA_PROGRAMS = applet
 applet_SOURCES = applet.c
-applet_CFLAGS = -DTEST $(HILDON_CFLAGS) $(OSSO_CFLAGS)
-applet_LDADD = $(HILDON_LIBS)
+applet_CFLAGS = -DTEST $(HILDON_CFLAGS) $(GCONF_CFLAGS) $(OSSO_CFLAGS)
+applet_LDADD = $(HILDON_LIBS) $(GCONF_LIBS)
index d98db82..0ca518a 100644 (file)
@@ -2,8 +2,11 @@
 #include <gtk/gtk.h>
 #include <hildon/hildon.h>
 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
 #include <gtk/gtk.h>
 #include <hildon/hildon.h>
 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
+#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
 
 #define ESPEAK_BIN "espeak"
 
 #define ESPEAK_BIN "espeak"
+#define GCONF_KEY "/apps/Maemo/espeaktime"
 
 /* TODO: read these from disk */
 
 
 /* TODO: read these from disk */
 
@@ -71,15 +74,58 @@ static const struct effect {
 static const int num_effects = sizeof(effects) / sizeof(effects[0]);
 
 struct espeaktime_settings {
 static const int num_effects = sizeof(effects) / sizeof(effects[0]);
 
 struct espeaktime_settings {
-       const gchar *voice;
-       const gchar *effect;
-       const gchar *text;
+       gchar *voice;
+       gchar *effect;
+       gchar *text;
        gint amplitude;
        gint pitch;
        gint speed;
        gboolean ignore_silent;
 };
 
        gint amplitude;
        gint pitch;
        gint speed;
        gboolean ignore_silent;
 };
 
+static void cfg_read(GConfClient *client, struct espeaktime_settings *cfg)
+{
+       cfg->voice = gconf_client_get_string(client, GCONF_KEY "/voice", NULL);
+       cfg->effect = gconf_client_get_string(client, GCONF_KEY "/effect", NULL);
+       cfg->text = gconf_client_get_string(client, GCONF_KEY "/text", NULL);
+       cfg->amplitude = gconf_client_get_int(client, GCONF_KEY "/amplitude", NULL);
+       cfg->pitch = gconf_client_get_int(client, GCONF_KEY "/pitch", NULL);
+       cfg->speed = gconf_client_get_int(client, GCONF_KEY "/speed", NULL);
+       cfg->ignore_silent = gconf_client_get_bool(client, GCONF_KEY "/ignore_silent", NULL);
+       if (!cfg->voice)
+               cfg->voice = g_strdup("en-us");
+       if (!cfg->effect)
+               cfg->effect = g_strdup("");
+       if (!cfg->text)
+               cfg->text = g_strdup("%H:%M");
+       if (!cfg->amplitude)
+               cfg->amplitude = 100;
+       if (!cfg->pitch)
+               cfg->pitch = 50;
+       if (!cfg->speed)
+               cfg->speed = 170;
+       /* TODO: default ignore_silent to TRUE */
+}
+
+static void cfg_write(GConfClient *client, struct espeaktime_settings *cfg)
+{
+       gconf_client_add_dir(client, GCONF_KEY, GCONF_CLIENT_PRELOAD_NONE, NULL);
+       gconf_client_set_string(client, GCONF_KEY "/voice", cfg->voice, NULL);
+       gconf_client_set_string(client, GCONF_KEY "/effect", cfg->effect, NULL);
+       gconf_client_set_string(client, GCONF_KEY "/text", cfg->text, NULL);
+       gconf_client_set_int(client, GCONF_KEY "/amplitude", cfg->amplitude, NULL);
+       gconf_client_set_int(client, GCONF_KEY "/pitch", cfg->pitch, NULL);
+       gconf_client_set_int(client, GCONF_KEY "/speed", cfg->speed, NULL);
+       gconf_client_set_bool(client, GCONF_KEY "/ignore_silent", cfg->ignore_silent, NULL);
+}
+
+static void cfg_free(struct espeaktime_settings *cfg)
+{
+       g_free(cfg->voice);
+       g_free(cfg->effect);
+       g_free(cfg->text);
+}
+
 static void do_test(struct espeaktime_settings *cfg)
 {
        gchar astr[16], pstr[16], sstr[16];
 static void do_test(struct espeaktime_settings *cfg)
 {
        gchar astr[16], pstr[16], sstr[16];
@@ -136,6 +182,9 @@ osso_return_t execute(osso_context_t *osso, gpointer data, gboolean user_activat
                .ignore_silent = TRUE,
        };
 
                .ignore_silent = TRUE,
        };
 
+       GConfClient *client = gconf_client_get_default();
+       cfg_read(client, &cfg);
+
        GtkWidget *dialog;
        dialog = gtk_dialog_new_with_buttons(
                "eSpeakTime Settings",
        GtkWidget *dialog;
        dialog = gtk_dialog_new_with_buttons(
                "eSpeakTime Settings",
@@ -211,26 +260,34 @@ osso_return_t execute(osso_context_t *osso, gpointer data, gboolean user_activat
        while (1) {
                int result = gtk_dialog_run(GTK_DIALOG(dialog));
 
        while (1) {
                int result = gtk_dialog_run(GTK_DIALOG(dialog));
 
+               g_free(cfg.voice);
+               g_free(cfg.effect);
+               g_free(cfg.text);
+               cfg.voice = g_strdup(voices[hildon_picker_button_get_active(voice)].id);
+               cfg.effect = g_strdup(effects[hildon_picker_button_get_active(effect)].id);
+               cfg.text = g_strdup(gtk_entry_get_text(GTK_ENTRY(text)));
+               cfg.amplitude = gtk_adjustment_get_value(amplitude_adj);
+               cfg.pitch = gtk_adjustment_get_value(pitch_adj);
+               cfg.speed = gtk_adjustment_get_value(speed_adj);
+               cfg.ignore_silent = hildon_check_button_get_active(ignore_silent);
+
                switch (result) {
                case 1:
                        g_print("Test button\n");
                switch (result) {
                case 1:
                        g_print("Test button\n");
-                       cfg.voice = voices[hildon_picker_button_get_active(voice)].id;
-                       cfg.effect = effects[hildon_picker_button_get_active(effect)].id;
-                       cfg.text = gtk_entry_get_text(GTK_ENTRY(text));
-                       cfg.amplitude = gtk_adjustment_get_value(amplitude_adj);
-                       cfg.pitch = gtk_adjustment_get_value(pitch_adj);
-                       cfg.speed = gtk_adjustment_get_value(speed_adj);
-                       cfg.ignore_silent = hildon_check_button_get_active(ignore_silent);
                        do_test(&cfg);
                        continue;
                case GTK_RESPONSE_OK:
                        g_print("Save\n");
                        do_test(&cfg);
                        continue;
                case GTK_RESPONSE_OK:
                        g_print("Save\n");
+                       cfg_write(client, &cfg);
                        break;
                }
                break;
        }
        gtk_widget_destroy(GTK_WIDGET(dialog));
 
                        break;
                }
                break;
        }
        gtk_widget_destroy(GTK_WIDGET(dialog));
 
+       cfg_free(&cfg);
+       g_object_unref(G_OBJECT(client));
+
        return OSSO_OK;
 }
 
        return OSSO_OK;
 }