From: Jose Dapena Paz Date: Tue, 7 Apr 2009 12:40:45 +0000 (+0000) Subject: Add a way to limit the number of chars in value part of from field selector picker. X-Git-Tag: git_migration_finished~114 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=9b57b64431553f49ce55d7141af6afd9a0882747 Add a way to limit the number of chars in value part of from field selector picker. pmo-trunk-r8667 --- diff --git a/src/hildon2/modest-msg-edit-window.c b/src/hildon2/modest-msg-edit-window.c index edcf027..8571461 100644 --- a/src/hildon2/modest-msg-edit-window.c +++ b/src/hildon2/modest-msg-edit-window.c @@ -92,6 +92,7 @@ #define IMAGE_MAX_WIDTH 560 #define DEFAULT_FONT_SCALE 1.5 #define ATTACHMENT_BUTTON_WIDTH 118 +#define MAX_FROM_VALUE 48 static gboolean is_wp_text_buffer_started = FALSE; @@ -858,6 +859,7 @@ init_window (ModestMsgEditWindow *obj) priv->from_field = modest_selector_picker_new (MODEST_EDITABLE_SIZE, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, NULL, g_str_equal); + modest_selector_picker_set_value_max_chars (MODEST_SELECTOR_PICKER (priv->from_field), MAX_FROM_VALUE); modest_maemo_utils_set_hbutton_layout (title_size_group, value_size_group, _("mail_va_from"), priv->from_field); diff --git a/src/hildon2/modest-selector-picker.c b/src/hildon2/modest-selector-picker.c index a8331da..07d20bb 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,6 +48,8 @@ enum { typedef struct _ModestSelectorPickerPrivate ModestSelectorPickerPrivate; struct _ModestSelectorPickerPrivate { GEqualFunc id_equal_func; + + gint value_max_chars; }; #define MODEST_SELECTOR_PICKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -107,13 +111,31 @@ static gchar * 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,7 +164,7 @@ get_model (ModestPairList *pairs) } static GtkWidget * -create_touch_selector (GtkTreeModel *model) +create_touch_selector (ModestSelectorPicker *self, GtkTreeModel *model) { GtkCellRenderer *renderer; GtkWidget *selector; @@ -155,6 +177,7 @@ create_touch_selector (GtkTreeModel *model) renderer, "text", COLUMN_DISPLAY_NAME, NULL); hildon_touch_selector_set_model (HILDON_TOUCH_SELECTOR(selector), 0, model); + 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,7 +192,7 @@ modest_selector_picker_set_pair_list (ModestSelectorPicker *self, ModestPairList model = get_model (pairs); - selector = create_touch_selector (model); + selector = create_touch_selector (self, model); 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); @@ -193,13 +216,15 @@ modest_selector_picker_new (HildonSizeType size, "size", size, "arrangement", arrangement, NULL)); + priv = MODEST_SELECTOR_PICKER_GET_PRIVATE(obj); + priv->value_max_chars = -1; 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); } @@ -300,3 +325,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; +} diff --git a/src/hildon2/modest-selector-picker.h b/src/hildon2/modest-selector-picker.h index 9decb23..f66d2c3 100644 --- a/src/hildon2/modest-selector-picker.h +++ b/src/hildon2/modest-selector-picker.h @@ -123,6 +123,23 @@ void modest_selector_picker_set_active_id (ModestSelectorPicker *self, gpo */ const gchar* modest_selector_picker_get_active_display_name (ModestSelectorPicker *self); +/** + * modest_selector_picker_set_value_max_chars: + * @self: a #ModestSelectorPicker + * @value_max_chars: maximum number of chars displayed in picker button, or -1 if not limited + * + * Set the maximum number of chars accepted in the value part of the selector picker + */ +void modest_selector_picker_set_value_max_chars (ModestSelectorPicker *self, gint value_max_width_chars); + +/** + * modest_selector_picker_get_value_max_chars: + * @self: a #ModestSelectorPicker + * + * Get the maximum number of chars accepted in the value part of the selector picker + */ +gint modest_selector_picker_get_value_max_chars (ModestSelectorPicker *self); + G_END_DECLS #endif /* __MODEST_SELECTOR_PICKER_H__ */