#include <gtk/gtkliststore.h>
#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);
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), \
}
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;
}
}
static GtkWidget *
-create_touch_selector (GtkTreeModel *model)
+create_touch_selector (ModestSelectorPicker *self, GtkTreeModel *model)
{
GtkCellRenderer *renderer;
GtkWidget *selector;
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;
}
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));
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)
{
GtkTreeModel *model;
GObject *obj;
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;
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);
}
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);
}
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;
+}