*
*/
-/* 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>
/**
* 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));
* @day: day
*
* Sets the date shown in the editor.
- **/
+ */
void hildon_date_editor_set_date(HildonDateEditor * editor,
guint year, guint month, guint day)
{
* @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)
{
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));
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);
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.
*
* 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;
*
* 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;
*
* 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;
* 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;
*
* 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)
{
*
* 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)
{