diff options
author | javier <javier@pcjavier.(none)> | 2010-11-07 03:00:56 +0100 |
---|---|---|
committer | javier <javier@pcjavier.(none)> | 2010-11-07 03:00:56 +0100 |
commit | 2ab60ecb15ab1a7e30226563a15bbeec05dda54d (patch) | |
tree | c117593d0687b274f66898c9d54b4ea9ffb01e33 /preset_list.c | |
download | cfmradio-2ab60ecb15ab1a7e30226563a15bbeec05dda54d.tar.gz cfmradio-2ab60ecb15ab1a7e30226563a15bbeec05dda54d.zip |
initial import
Diffstat (limited to 'preset_list.c')
-rw-r--r-- | preset_list.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/preset_list.c b/preset_list.c new file mode 100644 index 0000000..0fef49b --- /dev/null +++ b/preset_list.c @@ -0,0 +1,149 @@ +/* + * GPL 2 + */ + +#include <gtk/gtk.h> +#include <hildon/hildon.h> + +#include "presets.h" +#include "preset_list.h" + +G_DEFINE_TYPE(CFmPresetList, cfm_preset_list, HILDON_TYPE_STACKABLE_WINDOW); + +#define CFM_PRESET_LIST_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CFM_TYPE_PRESET_LIST, CFmPresetListPrivate)) + +#define ABS_RANGE_LOW 60000000 +#define ABS_RANGE_HIGH 140000000 + +struct _CFmPresetListPrivate { + HildonTouchSelector *sel; + HildonTouchSelectorColumn *col; +}; + +enum { + PROP_0, + PROP_MODEL, + PROP_FREQUENCY, + PROP_LAST +}; + +enum { + SIGNAL_0, + SIGNAL_LAST +}; + +static GParamSpec *properties[PROP_LAST]; +static guint signals[SIGNAL_LAST]; + +static void cfm_preset_list_selection_changed(HildonTouchSelector *selector, + gint column, gpointer user_data) +{ + CFmPresetList *self = CFM_PRESET_LIST(user_data); + + g_object_notify(G_OBJECT(self), "frequency"); +} + +static void cfm_preset_list_set_property(GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + CFmPresetList *self = CFM_PRESET_LIST(object); + CFmPresetListPrivate *priv = self->priv; + switch (property_id) { + case PROP_MODEL: + hildon_touch_selector_set_model(priv->sel, 0, g_value_get_object(value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + +static void cfm_preset_list_get_property(GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + CFmPresetList *self = CFM_PRESET_LIST(object); + CFmPresetListPrivate *priv = self->priv; + switch (property_id) { + case PROP_MODEL: + g_value_set_object(value, hildon_touch_selector_get_model(priv->sel, 0)); + break; + case PROP_FREQUENCY: { + GtkTreeIter iter; + if (hildon_touch_selector_get_selected(priv->sel, 0, &iter)) { + gulong freq; + gtk_tree_model_get(hildon_touch_selector_get_model(priv->sel, 0), + &iter, 0, &freq, -1); + g_value_set_ulong(value, freq); + } + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + +static void cfm_preset_list_init(CFmPresetList *self) +{ + CFmPresetListPrivate *priv; + + self->priv = priv = CFM_PRESET_LIST_GET_PRIVATE(self); + + /* Empty model for now */ + GtkTreeModel *model = GTK_TREE_MODEL(gtk_list_store_new(2, G_TYPE_FLOAT, G_TYPE_STRING)); + + gtk_window_set_title(GTK_WINDOW(self), "Presets"); + hildon_gtk_window_set_portrait_flags(GTK_WINDOW(self), + HILDON_PORTRAIT_MODE_SUPPORT); + + priv->sel = HILDON_TOUCH_SELECTOR(hildon_touch_selector_new()); + priv->col = hildon_touch_selector_append_text_column(priv->sel, model, FALSE); + hildon_touch_selector_column_set_text_column(priv->col, 1); + + gtk_container_add(GTK_CONTAINER(self), GTK_WIDGET(priv->sel)); + + g_signal_connect(G_OBJECT(priv->sel), "changed", + G_CALLBACK(cfm_preset_list_selection_changed), self); + + g_object_unref(model); +} + +static void cfm_preset_list_class_init(CFmPresetListClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + GParamSpec *param_spec; + + gobject_class->set_property = cfm_preset_list_set_property; + gobject_class->get_property = cfm_preset_list_get_property; + + g_type_class_add_private(klass, sizeof(CFmPresetListPrivate)); + + param_spec = g_param_spec_object("model", + "GtkTreeModel to use", + "This is the model where contents will be read from", + GTK_TYPE_TREE_MODEL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + properties[PROP_MODEL] = param_spec; + g_object_class_install_property(gobject_class, PROP_MODEL, param_spec); + + param_spec = g_param_spec_ulong("frequency", + "Frequency to tune (Hz)", + "This is the frequency to tune, in Hz", + ABS_RANGE_LOW, ABS_RANGE_HIGH, ABS_RANGE_LOW, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + properties[PROP_FREQUENCY] = param_spec; + g_object_class_install_property(gobject_class, PROP_FREQUENCY, param_spec); +} + +CFmPresetList* cfm_preset_list_new() +{ + return g_object_new(CFM_TYPE_PRESET_LIST, NULL); +} + +void cfm_preset_list_show_for(CFmPresetList *self, CFmPresets *presets) +{ + g_object_set(self, "model", cfm_presets_get_all(presets), NULL); + + gtk_widget_show_all(GTK_WIDGET(self)); +} + |