X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon-time-selector.c;h=e28a4fc3699692b632c3188be6fe2b1b3ba2901c;hb=db9685e21af93630b100473c49d066de0ad3691f;hp=2f48e5703035adf2997bc1f53d5405709a27c9c9;hpb=2cd50329538b9d88797e16e11383264ae84ee340;p=hildon diff --git a/src/hildon-time-selector.c b/src/hildon-time-selector.c index 2f48e57..e28a4fc 100644 --- a/src/hildon-time-selector.c +++ b/src/hildon-time-selector.c @@ -53,8 +53,7 @@ G_DEFINE_TYPE (HildonTimeSelector, hildon_time_selector, HILDON_TYPE_TOUCH_SELEC #define LAST_YEAR 50 /* since current year */ #define _(String) dgettext("hildon-libs", String) - -/* #define _(String) "%I:%M %p" debug purposes */ +#define N_(String) String /* FIXME: we should get this two props from the clock ui headers */ @@ -132,6 +131,8 @@ hildon_time_selector_class_init (HildonTimeSelectorClass * class) static void hildon_time_selector_init (HildonTimeSelector * selector) { + HildonTouchSelectorColumn *column = NULL; + selector->priv = HILDON_TIME_SELECTOR_GET_PRIVATE (selector); GTK_WIDGET_SET_FLAGS (GTK_WIDGET (selector), GTK_NO_WINDOW); @@ -148,11 +149,13 @@ hildon_time_selector_init (HildonTimeSelector * selector) selector->priv->hours_model = _create_hours_model (selector); selector->priv->minutes_model = _create_minutes_model (selector); - hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector), - selector->priv->hours_model, TRUE); + column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector), + selector->priv->hours_model, TRUE); + g_object_set (column, "text-column", 0, NULL); - hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector), - selector->priv->minutes_model, TRUE); + column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector), + selector->priv->minutes_model, TRUE); + g_object_set (column, "text-column", 0, NULL); if (selector->priv->ampm_format) { selector->priv->ampm_model = _create_ampm_model (selector); @@ -204,9 +207,9 @@ _custom_print_func (HildonTouchSelector * touch_selector) tm.tm_hour = hours; if (selector->priv->ampm_format) { - strftime (string, 255, _("wdgt_va_12h_hours"), &tm); + strftime (string, 255, _("wdgt_va_12h_time"), &tm); } else { - strftime (string, 255, _("wdgt_va_24h_hours"), &tm); + strftime (string, 255, _("wdgt_va_24h_time"), &tm); } @@ -220,17 +223,18 @@ _create_minutes_model (HildonTimeSelector * selector) { GtkListStore *store_minutes = NULL; gint i = 0; - gchar *label = NULL; + static gchar label[255]; + struct tm tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GtkTreeIter iter; store_minutes = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); for (i = 0; i <= 59; i++) { - label = g_strdup_printf ("%02d", i); + tm.tm_min = i; + strftime (label, 255, _("wdgt_va_minutes"), &tm); gtk_list_store_append (store_minutes, &iter); gtk_list_store_set (store_minutes, &iter, COLUMN_STRING, label, COLUMN_INT, i, -1); - g_free (label); } return GTK_TREE_MODEL (store_minutes); @@ -241,27 +245,34 @@ _create_hours_model (HildonTimeSelector * selector) { GtkListStore *store_hours = NULL; gint i = 0; - gchar *label = NULL; GtkTreeIter iter; - gint last_hour = 12; - gint addition = 0; + struct tm tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + static gchar label[255]; + static gint range_12h[12] = {12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11}; + static gint range_24h[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, + 12,13,14,15,16,17,18,19,20,21,22,23}; + gint *range = NULL; + gint num_elements = 0; + gchar *format_string = NULL; if (selector->priv->ampm_format) { - last_hour = 12; - addition = 1; + range = range_12h; + num_elements = 12; + format_string = N_("wdgt_va_12h_hours"); } else { - last_hour = 24; - addition = 0; + range = range_24h; + num_elements = 24; + format_string = N_("wdgt_va_24h_hours"); } store_hours = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); - for (i = 0; i < last_hour; i++) { - label = g_strdup_printf ("%02d", i + addition); + for (i = 0; i < num_elements; i++) { + tm.tm_hour = range[i]; + strftime (label, 255, _(format_string), &tm); gtk_list_store_append (store_hours, &iter); gtk_list_store_set (store_hours, &iter, - COLUMN_STRING, label, COLUMN_INT, i, -1); - g_free (label); + COLUMN_STRING, label, COLUMN_INT, range[i], -1); } return GTK_TREE_MODEL (store_hours); @@ -272,16 +283,26 @@ _create_ampm_model (HildonTimeSelector * selector) { GtkListStore *store_ampm = NULL; GtkTreeIter iter; + static gchar label[255]; + struct tm tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; store_ampm = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); + tm.tm_hour = 0; + strftime (label, 255, _("wdgt_va_am_pm"), &tm); + gtk_list_store_append (store_ampm, &iter); - gtk_list_store_set (store_ampm, &iter, COLUMN_STRING, "am", /* FIXME: use nl_langinfo am/pm strings */ + gtk_list_store_set (store_ampm, &iter, + COLUMN_STRING, label, COLUMN_INT, 0, -1); + tm.tm_hour = 12; + strftime (label, 255, _("wdgt_va_am_pm"), &tm); + gtk_list_store_append (store_ampm, &iter); gtk_list_store_set (store_ampm, &iter, - COLUMN_STRING, "pm", COLUMN_INT, 1, -1); + COLUMN_STRING, label, + COLUMN_INT, 1, -1); return GTK_TREE_MODEL (store_ampm); } @@ -316,8 +337,8 @@ _manage_ampm_selection_cb (HildonTouchSelector * touch_selector, selector = HILDON_TIME_SELECTOR (touch_selector); if (num_column == COLUMN_AMPM) { - hildon_touch_selector_get_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_AMPM, &iter); + hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), + COLUMN_AMPM, &iter); gtk_tree_model_get (selector->priv->ampm_model, &iter, COLUMN_INT, &pm, -1); selector->priv->pm = pm; @@ -353,8 +374,8 @@ _set_pm (HildonTimeSelector * selector, gboolean pm) gtk_tree_model_iter_nth_child (selector->priv->ampm_model, &iter, NULL, pm); - hildon_touch_selector_set_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_AMPM, &iter, FALSE); + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), + COLUMN_AMPM, &iter, FALSE); } /* ------------------------------ PUBLIC METHODS ---------------------------- */ @@ -372,10 +393,18 @@ hildon_time_selector_new () return g_object_new (HILDON_TYPE_TIME_SELECTOR, NULL); } -/* - * hours (0-23) - * minutes (0-59) - */ +/** + * hildon_time_selector_set_time + * @selector: the #HildonTimeSelector + * @hours: the current hour (0-23) + * @minutes: the current minute (0-59) + * + * Sets the current active hour on the #HildonTimeSelector widget + * + * The format of the hours acceptes is always 24h format, with a range + * (0-23):(0-59). + * + **/ gboolean hildon_time_selector_set_time (HildonTimeSelector * selector, guint hours, guint minutes) @@ -387,30 +416,38 @@ hildon_time_selector_set_time (HildonTimeSelector * selector, g_return_val_if_fail (minutes >= 0 && minutes <= 59, FALSE); if (selector->priv->ampm_format) { - if (hours > 12) { - hours_item = hours - 13; - } else { - hours_item = hours - 1; - } - _set_pm (selector, hours >= 12); + + hours_item = hours - selector->priv->pm * 12; } else { hours_item = hours; } gtk_tree_model_iter_nth_child (selector->priv->hours_model, &iter, NULL, hours_item); - hildon_touch_selector_set_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_HOURS, &iter, FALSE); + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), + COLUMN_HOURS, &iter, FALSE); gtk_tree_model_iter_nth_child (selector->priv->minutes_model, &iter, NULL, minutes); - hildon_touch_selector_set_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_MINUTES, &iter, FALSE); + hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector), + COLUMN_MINUTES, &iter, FALSE); return TRUE; } +/** + * hildon_time_selector_get_time + * @selector: the #HildonTimeSelector + * @hours: to set the current hour (0-23) + * @minutes: to set the current minute (0-59) + * + * Gets the current active hour on the #HildonTimeSelector widget. Both @year + * and @minutes can be NULL. + * + * This method returns the date always in 24h format, with a range (0-23):(0-59) + * + **/ void hildon_time_selector_get_time (HildonTimeSelector * selector, guint * hours, guint * minutes) @@ -418,18 +455,19 @@ hildon_time_selector_get_time (HildonTimeSelector * selector, GtkTreeIter iter; if (hours != NULL) { - hildon_touch_selector_get_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_HOURS, &iter); + hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), + COLUMN_HOURS, &iter); gtk_tree_model_get (selector->priv->hours_model, &iter, COLUMN_INT, hours, -1); if (selector->priv->ampm_format) { + *hours %= 12; *hours += selector->priv->pm * 12; } } if (minutes != NULL) { - hildon_touch_selector_get_active_iter (HILDON_TOUCH_SELECTOR (selector), - COLUMN_MINUTES, &iter); + hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector), + COLUMN_MINUTES, &iter); gtk_tree_model_get (selector->priv->minutes_model, &iter, COLUMN_INT, minutes, -1); }