*
*/
-
-#include "hildon-time-selector.h"
-
#define _GNU_SOURCE /* needed for GNU nl_langinfo_l */
#define __USE_GNU /* needed for locale */
#include <time.h>
#include <langinfo.h>
#include <locale.h>
-
#include <gconf/gconf-client.h>
+#include "hildon-time-selector.h"
+
#define HILDON_TIME_SELECTOR_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_TYPE_TIME_SELECTOR, HildonTimeSelectorPrivate))
#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 */
selector->priv->minutes_model = _create_minutes_model (selector);
hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
- selector->priv->hours_model);
+ selector->priv->hours_model, TRUE);
hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
- selector->priv->minutes_model);
+ selector->priv->minutes_model, TRUE);
if (selector->priv->ampm_format) {
selector->priv->ampm_model = _create_ampm_model (selector);
hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
- selector->priv->ampm_model);
+ selector->priv->ampm_model, TRUE);
g_signal_connect (G_OBJECT (selector),
"changed", G_CALLBACK (_manage_ampm_selection_cb),
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);
}
{
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);
{
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);
{
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);
}
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;
client = gconf_client_get_default ();
value = gconf_client_get_bool (client, CLOCK_GCONF_IS_24H_FORMAT, &error);
if (error != NULL) {
- g_error
+ g_warning
("Error trying to get gconf variable %s, using 24h format by default",
CLOCK_GCONF_IS_24H_FORMAT);
g_error_free (error);
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 ---------------------------- */
/**
* hildon_time_selector_new:
- * @:
*
* Creates a new #HildonTimeSelector
*
return g_object_new (HILDON_TYPE_TIME_SELECTOR, NULL);
}
-/**
+/*
* hours (0-23)
* minutes (0-59)
*/
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;
}
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);
}