2008-11-25 Alberto Garcia <agarcia@igalia.com>
[hildon] / src / hildon-time-selector.c
index 7fa6404..e28a4fc 100644 (file)
@@ -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);
@@ -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,30 +245,34 @@ _create_hours_model (HildonTimeSelector * selector)
 {
   GtkListStore *store_hours = NULL;
   gint i = 0;
-  gchar *label = NULL;
   GtkTreeIter iter;
+  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) {
     range = range_12h;
     num_elements = 12;
+    format_string = N_("wdgt_va_12h_hours");
   } else {
     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 < num_elements; i++) {
-    label = g_strdup_printf ("%02d", range[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, range[i], -1);
-    g_free (label);
   }
 
   return GTK_TREE_MODEL (store_hours);
@@ -275,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);
 }
@@ -375,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)
@@ -410,6 +436,18 @@ hildon_time_selector_set_time (HildonTimeSelector * selector,
   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)