* doc/tmpl/* * hildon-widgets/* moved widget descriptions to respective source file...
[hildon] / hildon-widgets / hildon-date-editor.c
index be88200..0b2ae20 100644 (file)
  *
  */
 
-/* HILDON DOC
- * @shortdesc: DateEditor is a widget for setting, getting and showing a
- * date.
- * @longdesc: The date editor consists of a GtkLabel that shows the current
- * date in localized form and an icon. Clicking on either the label or the
- * icon opens the #HildonCalendarPopup used for selecting the date.
- * Similarly, if the editor has the focus, and space or enter key is
- * pressed, the #HildonCalendarPopup will open. 
+/**
+ * SECTION:hildon-date-editor
+ * @short_description: A widget which queries a date from user or opens
+ * a HildonCalendarPopup
+ * @see_also: #HildonCalendarPopup, #HildonTimeEditor
  * 
- * @seealso: #HildonTimeEditor, #HildonCalendarPopup
+ * HildonDateEditor is a widget with three entry fields (day, month,
+ * year) and an icon (eventbox): clicking on the icon opens up a
+ * HildonCalendarPopup.
  */
 
 #include <glib.h>
@@ -629,7 +628,7 @@ static void hildon_child_forall(GtkContainer * container,
     HildonDateEditor *editor;
     HildonDateEditorPrivate *priv;
 
-    g_assert(container);
+    g_assert(HILDON_IS_DATE_EDITOR(container));
     g_assert(callback);
 
     editor = HILDON_DATE_EDITOR(container);
@@ -667,11 +666,11 @@ static void hildon_date_editor_destroy(GtkObject * self)
 /**
  * hildon_date_editor_new:
  *
- * Creates a new time editor. The current system date
+ * Creates a new date editor. The current system date
  * is shown in the editor.
  *
- * Return value: Pointer to a new @HildonDateEditor widget.
- **/
+ * Returns: pointer to a new @HildonDateEditor widget.
+ */
 GtkWidget *hildon_date_editor_new(void)
 {
     return GTK_WIDGET(g_object_new(HILDON_DATE_EDITOR_TYPE, NULL));
@@ -685,7 +684,7 @@ GtkWidget *hildon_date_editor_new(void)
  * @day: day
  *
  * Sets the date shown in the editor. 
- **/
+ */
 void hildon_date_editor_set_date(HildonDateEditor * editor,
                                  guint year, guint month, guint day)
 {
@@ -752,9 +751,9 @@ void hildon_date_editor_set_date(HildonDateEditor * editor,
  * @month: month
  * @day: day
  *
- * Returns the year, month, and day currently on the
+ * Returns: the year, month, and day currently on the
  * date editor.
- **/
+ */
 void hildon_date_editor_get_date(HildonDateEditor * date,
                                  guint * year, guint * month, guint * day)
 {
@@ -913,7 +912,7 @@ hildon_date_editor_entry_validate(GtkWidget *widget, gpointer data)
     gint d, m, y, max_days;
     gboolean r;  /* temp return values for signals */
     const gchar *text;        
-    gint error_code = 0;
+    gint error_code = NO_ERROR;
 
     g_assert(HILDON_IS_DATE_EDITOR(data));
     g_assert(GTK_IS_ENTRY(widget));
@@ -987,16 +986,26 @@ hildon_date_editor_entry_validate(GtkWidget *widget, gpointer data)
         max_days = g_date_get_days_in_month(m,y);
         if(d < 1) {
            error_code = MIN_DAY;
-           d = 1;           
+           d = 1;
         }
         else if (d > max_days) {
-           /* Report range error or invalid date */
-           error_code = d > 31 ? MAX_DAY : INVALID_DATE;
-           d = max_days;
-           widget = priv->d_entry; /* Note! Change param to point day entry */
+           if (d > 31) {         
+               error_code = MAX_DAY;
+               d = max_days;
+           }
+           else {                /* the date does not exist (is invalid) */
+               error_code = INVALID_DATE;
+               /* check what was changed and restore previous value */
+               if ( widget == priv->y_entry )
+                   y = priv->year;
+               else if ( widget == priv->m_entry )
+                   m = priv->month;
+               else
+                   d = priv->day;
+           }
         }
 
-        if (error_code != 0)
+        if (error_code != NO_ERROR)
         {
             g_signal_emit(ed, date_editor_signals[DATE_ERROR], 0, error_code, &r);
 
@@ -1079,26 +1088,13 @@ static gboolean hildon_date_editor_keypress(GtkWidget * widget,
        
     switch (event->keyval) {
     case GDK_Left:
-        /* User tries to navigate left. If we are on the start of the
-           entry, we try to do that. Otherwise entry moves cursor by one place */
-        if (pos == 0)
-        {
-            /* We do not want to wrap around etc, so we ignore the return value */
-            (void) gtk_widget_child_focus(GTK_WIDGET(data), GTK_DIR_LEFT);
-            return TRUE;
-        }
+        (void) gtk_widget_child_focus(GTK_WIDGET(data), GTK_DIR_LEFT);
+        return TRUE;
         break;
-
     case GDK_Right:
-        /* User tries to navigate right. If we are on the end of the
-           entry, we try to do that. Otherwise entry moves cursor by one place */
-        if (pos >= g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(widget)), -1)) 
-        {
-           (void) gtk_widget_child_focus(GTK_WIDGET(data), GTK_DIR_RIGHT);
-           return TRUE;
-        }
+        (void) gtk_widget_child_focus(GTK_WIDGET(data), GTK_DIR_RIGHT);
+        return TRUE;
         break;
-
     case GDK_Return:
     case GDK_ISO_Enter:
         /* Ignore return value, since we want to handle event at all times.
@@ -1255,7 +1251,7 @@ static void hildon_date_editor_size_allocate(GtkWidget * widget,
         delim = GTK_WIDGET(iter->data);
         alloc = delim->allocation;
         alloc.height = max_req.height; 
-        alloc.y = priv->d_entry->allocation.y-4;
+        alloc.y = priv->d_entry->allocation.y - 2;
 
         gtk_widget_size_allocate(delim, &alloc);
     }
@@ -1268,8 +1264,8 @@ static void hildon_date_editor_size_allocate(GtkWidget * widget,
  *
  * Sets the year shown in the editor. 
  *
- * Return: Returns TRUE if the year is valid.
- **/
+ * Returns: TRUE if the year is valid
+ */
 gboolean hildon_date_editor_set_year(HildonDateEditor *editor, guint year)
 {
   HildonDateEditorPrivate *priv;
@@ -1305,8 +1301,8 @@ gboolean hildon_date_editor_set_year(HildonDateEditor *editor, guint year)
  *
  * Sets the month shown in the editor. 
  *
- * Return: Returns TRUE if the month is valid.
- **/
+ * Returns: TRUE if the month is valid
+ */
 gboolean hildon_date_editor_set_month(HildonDateEditor *editor, guint month)
 {
   HildonDateEditorPrivate *priv;
@@ -1343,8 +1339,8 @@ gboolean hildon_date_editor_set_month(HildonDateEditor *editor, guint month)
  *
  * Sets the day shown in the editor. 
  *
- * Return: Returns TRUE if the day is valid.
- **/
+ * Returns: TRUE if the day is valid
+ */
 gboolean hildon_date_editor_set_day(HildonDateEditor *editor, guint day)
 {
   HildonDateEditorPrivate *priv;
@@ -1379,10 +1375,8 @@ gboolean hildon_date_editor_set_day(HildonDateEditor *editor, guint day)
  * hildon_date_editor_get_year:
  * @editor: the @HildonDateEditor widget
  *
- * Gets the year shown in the editor. 
- *
- * Return: Returns the current year shown in the editor.
- **/
+ * Returns: the current year shown in the editor.
+ */
 guint hildon_date_editor_get_year(HildonDateEditor *editor)
 {
   HildonDateEditorPrivate *priv;
@@ -1397,8 +1391,8 @@ guint hildon_date_editor_get_year(HildonDateEditor *editor)
  *
  * Gets the month shown in the editor. 
  *
- * Return: Returns the current month shown in the editor.
- **/
+ * Returns: the current month shown in the editor.
+ */
 
 guint hildon_date_editor_get_month(HildonDateEditor *editor)
 {
@@ -1414,8 +1408,8 @@ guint hildon_date_editor_get_month(HildonDateEditor *editor)
  *
  * Gets the day shown in the editor. 
  *
- * Return: Returns the current day shown in the editor.
- **/
+ * Returns: the current day shown in the editor
+ */
 
 guint hildon_date_editor_get_day(HildonDateEditor *editor)
 {