X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-selector-picker.c;h=d72e4b3272de26cbb97941ae71be80a331efdb6d;hp=7011653f907f3dc9d525b18b75aad25a3aeeba12;hb=976890fe4126e453fc2b1812eb167d41b036dfbb;hpb=0f1fe981ed79b61b9b2d1abc2b5912e20caee50f diff --git a/src/hildon2/modest-selector-picker.c b/src/hildon2/modest-selector-picker.c index 7011653..d72e4b3 100644 --- a/src/hildon2/modest-selector-picker.c +++ b/src/hildon2/modest-selector-picker.c @@ -32,6 +32,8 @@ #include #include "modest-selector-picker.h" +#define TOUCH_SELECTOR_PICKER "calling-picker" + /* 'private'/'protected' functions */ static void modest_selector_picker_class_init (ModestSelectorPickerClass *klass); static void modest_selector_picker_init (ModestSelectorPicker *obj); @@ -46,7 +48,9 @@ enum { typedef struct _ModestSelectorPickerPrivate ModestSelectorPickerPrivate; struct _ModestSelectorPickerPrivate { GEqualFunc id_equal_func; - + + gint value_max_chars; + gboolean center_aligned; }; #define MODEST_SELECTOR_PICKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_SELECTOR_PICKER, \ @@ -104,16 +108,34 @@ modest_selector_picker_finalize (GObject *obj) } static gchar * -touch_selector_print_func (HildonTouchSelector *selector) +touch_selector_print_func (HildonTouchSelector *selector, gpointer userdata) { GtkTreeIter iter; + ModestSelectorPicker *picker; + + picker = MODEST_SELECTOR_PICKER (g_object_get_data (G_OBJECT (selector), TOUCH_SELECTOR_PICKER)); + g_return_val_if_fail (MODEST_IS_SELECTOR_PICKER (picker), NULL); if (hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), 0, &iter)) { GtkTreeModel *model; + ModestSelectorPickerPrivate *priv; GValue value = {0,}; + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE (picker); model = hildon_touch_selector_get_model (HILDON_TOUCH_SELECTOR (selector), 0); gtk_tree_model_get_value (model, &iter, COLUMN_DISPLAY_NAME, &value); - return g_value_dup_string (&value); + if (priv->value_max_chars == -1) { + return g_value_dup_string (&value); + } else { + const gchar *str; + str = g_value_get_string (&value); + if (g_utf8_strlen (str, -1) > priv->value_max_chars) { + const gchar *end; + end = g_utf8_offset_to_pointer (str, priv->value_max_chars); + return g_strndup (str, end - str); + } else { + return g_strdup (str); + } + } } return NULL; } @@ -142,20 +164,27 @@ get_model (ModestPairList *pairs) } static GtkWidget * -create_touch_selector (GtkTreeModel *model) +create_touch_selector (ModestSelectorPicker *self, GtkTreeModel *model) { GtkCellRenderer *renderer; GtkWidget *selector; + ModestSelectorPickerPrivate *priv; renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE(self); + if (priv->center_aligned) { + g_object_set (G_OBJECT (renderer), "alignment", PANGO_ALIGN_CENTER, NULL); + } + selector = hildon_touch_selector_new (); hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (selector), GTK_TREE_MODEL (model), renderer, "text", COLUMN_DISPLAY_NAME, NULL); hildon_touch_selector_set_model (HILDON_TOUCH_SELECTOR(selector), 0, model); - hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), touch_selector_print_func); + g_object_set_data (G_OBJECT (selector), TOUCH_SELECTOR_PICKER, (gpointer) self); + hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), (HildonTouchSelectorPrintFunc) touch_selector_print_func); return selector; } @@ -169,9 +198,9 @@ modest_selector_picker_set_pair_list (ModestSelectorPicker *self, ModestPairList model = get_model (pairs); - selector = create_touch_selector (model); - gtk_tree_model_get_iter_first (GTK_TREE_MODEL(model), &iter); - hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), 0, &iter, TRUE); + selector = create_touch_selector (self, model); + if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(model), &iter)) + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), 0, &iter, TRUE); g_object_unref (model); hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (self), HILDON_TOUCH_SELECTOR (selector)); @@ -180,7 +209,10 @@ modest_selector_picker_set_pair_list (ModestSelectorPicker *self, ModestPairList GtkWidget* -modest_selector_picker_new (ModestPairList *pairs, GEqualFunc id_equal_func) +modest_selector_picker_new (HildonSizeType size, + HildonButtonArrangement arrangement, + ModestPairList *pairs, GEqualFunc id_equal_func, + gboolean center_aligned) { GtkTreeModel *model; GObject *obj; @@ -188,16 +220,19 @@ modest_selector_picker_new (ModestPairList *pairs, GEqualFunc id_equal_func) GtkTreeIter iter; obj = G_OBJECT(g_object_new(MODEST_TYPE_SELECTOR_PICKER, - "size", HILDON_SIZE_AUTO, - "arrangement", HILDON_BUTTON_ARRANGEMENT_VERTICAL, + "size", size, + "arrangement", arrangement, NULL)); + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE(obj); + priv->value_max_chars = -1; + priv->center_aligned = center_aligned; model = get_model (pairs); if (model) { GtkWidget *selector; - selector = create_touch_selector (model); + selector = create_touch_selector (MODEST_SELECTOR_PICKER (obj), model); if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter)) { hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), 0, &iter, TRUE); } @@ -210,7 +245,10 @@ modest_selector_picker_new (ModestPairList *pairs, GEqualFunc id_equal_func) priv->id_equal_func = id_equal_func; else priv->id_equal_func = g_direct_equal; /* compare the ptr values */ - + + /* For theming purpouses. Widget name must end in Button-finger */ + gtk_widget_set_name ((GtkWidget *) obj, "ModestSelectorPickerButton-finger"); + return GTK_WIDGET(obj); } @@ -298,3 +336,32 @@ modest_selector_picker_get_active_display_name (ModestSelectorPicker *self) return retval; } + +void +modest_selector_picker_set_value_max_chars (ModestSelectorPicker *self, + gint value_max_chars) +{ + ModestSelectorPickerPrivate *priv; + + g_return_if_fail (self); + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE(self); + + if (value_max_chars != priv->value_max_chars) { + GtkWidget *selector; + + priv->value_max_chars = value_max_chars; + selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (self))); + hildon_touch_selector_set_print_func (HILDON_TOUCH_SELECTOR (selector), (HildonTouchSelectorPrintFunc) touch_selector_print_func); + } +} + +gint +modest_selector_picker_get_value_max_chars (ModestSelectorPicker *self) +{ + ModestSelectorPickerPrivate *priv; + g_return_val_if_fail (self, -1); + + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE(self); + + return priv->value_max_chars; +}