89303c25be9e8e5d1ca9d9c4212e083d68d55d26
[hildon] / src / hildon-date-button.c
1 /*
2  * This file is a part of hildon
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser Public License as published by
8  * the Free Software Foundation; version 2 of the license.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser Public License for more details.
14  *
15  */
16
17 #include <libintl.h>
18
19 #include "hildon-date-button.h"
20 #include "hildon-date-selector.h"
21 #include "hildon-touch-selector.h"
22 #include "hildon-picker-button-private.h"
23
24 #define                                         _(String) \
25                                                 dgettext("hildon-libs", String)
26
27 #define                                         c_(String) \
28                                                 dgettext("hildon-common-strings", String)
29
30 /**
31  * SECTION:hildon-date-button
32  * @Short_Description: Button displaying and allowing selection of a date.
33  * @See_Also: #HildonPickerButton, #HildonTimeButton
34  *
35  * #HildonDateButton is a widget that shows a text label and a date, and allows
36  * the user to select a different date. Visually, it's a button that, once clicked,
37  * presents a #HildonPickerDialog containing a #HildonDateSelector. Once the user selects
38  * a different date from the selector, this will be shown in the button.
39  */
40
41 G_DEFINE_TYPE (HildonDateButton, hildon_date_button, HILDON_TYPE_PICKER_BUTTON)
42
43 #if 0
44 #define GET_PRIVATE(o)                                                  \
45   (G_TYPE_INSTANCE_GET_PRIVATE ((o), HILDON_TYPE_DATE_BUTTON, HildonDateButtonPrivate))
46
47 typedef struct _HildonDateButtonPrivate HildonDateButtonPrivate;
48
49 struct _HildonDateButtonPrivate
50 {
51 };
52 #endif
53
54 #if 0
55 static void
56 hildon_date_button_get_property (GObject * object, guint property_id,
57                                  GValue * value, GParamSpec * pspec)
58 {
59   switch (property_id) {
60   default:
61     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
62   }
63 }
64
65 static void
66 hildon_date_button_set_property (GObject * object, guint property_id,
67                                  const GValue * value, GParamSpec * pspec)
68 {
69   switch (property_id) {
70   default:
71     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
72   }
73 }
74 #endif
75
76 static void
77 hildon_date_button_class_init (HildonDateButtonClass * klass)
78 {
79 #if 0
80   GObjectClass *object_class = G_OBJECT_CLASS (klass);
81
82   g_type_class_add_private (klass, sizeof (HildonDateButtonPrivate));
83
84   object_class->get_property = hildon_date_button_get_property;
85   object_class->set_property = hildon_date_button_set_property;
86 #endif
87 }
88
89 static void
90 hildon_date_button_init (HildonDateButton * self)
91 {
92 }
93
94 static GtkWidget *
95 hildon_date_button_new_full (HildonSizeType           size,
96                              HildonButtonArrangement  arrangement,
97                              GtkWidget               *selector)
98 {
99   return g_object_new (HILDON_TYPE_DATE_BUTTON,
100                        "title", _("wdgt_ti_date"),
101                        "arrangement", arrangement,
102                        "size", size,
103                        "touch-selector", selector,
104                        NULL);
105 }
106
107 /**
108  * hildon_date_button_new:
109  * @size: One of #HildonSizeType
110  * @arrangement: one of #HildonButtonArrangement
111  *
112  * Creates a new #HildonDateButton. See hildon_button_new() for details on the
113  * parameters.
114  *
115  * Returns: a new #HildonDateButton
116  *
117  * Since: 2.2
118  **/
119 GtkWidget *
120 hildon_date_button_new (HildonSizeType          size,
121                         HildonButtonArrangement arrangement)
122 {
123   GtkWidget *selector = hildon_date_selector_new ();
124   return hildon_date_button_new_full (size, arrangement, selector);
125 }
126
127 /**
128  * hildon_date_button_new_with_year_range:
129  * @size: One of #HildonSizeType
130  * @arrangement: one of #HildonButtonArrangement
131  * @min_year: the minimum available year or -1 to ignore
132  * @max_year: the maximum available year or -1 to ignore
133  *
134  * Creates a new #HildonDateButton with a specific valid range of years.
135  * See hildon_date_selector_new_with_year_range() for details on the range.
136  *
137  * Returns: a new #HildonDateButton
138  *
139  * Since: 2.2
140  **/
141 GtkWidget *
142 hildon_date_button_new_with_year_range (HildonSizeType size,
143                                         HildonButtonArrangement arrangement,
144                                         gint min_year,
145                                         gint max_year)
146 {
147   GtkWidget *selector;
148   selector = hildon_date_selector_new_with_year_range (min_year, max_year);
149   return hildon_date_button_new_full (size, arrangement, selector);
150 }
151
152 /**
153  * hildon_date_button_get_date:
154  * @button: a #HildonDateButton
155  * @year: return location for the selected year
156  * @month: return location for the selected month
157  * @day: return location for the selected day
158  *
159  * Retrieves currently selected date from @button.
160  *
161  * Since: 2.2
162  **/
163 void
164 hildon_date_button_get_date (HildonDateButton * button,
165                              guint * year, guint * month, guint * day)
166 {
167   HildonTouchSelector *selector;
168
169   g_return_if_fail (HILDON_IS_DATE_BUTTON (button));
170
171   selector = hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (button));
172
173   hildon_date_selector_get_date (HILDON_DATE_SELECTOR (selector), year, month, day);
174 }
175
176 /**
177  * hildon_date_button_set_date:
178  * @button: a #HildonDateButton
179  * @year: the year to set.
180  * @month: the month number to set.
181  * @day: the day of the month to set.
182  *
183  * Sets the date in @button. The date set will be displayed
184  * and will be the default selected option on the shown #HildonDateSelector.
185  *
186  * Since: 2.2
187  **/
188 void
189 hildon_date_button_set_date (HildonDateButton * button,
190                              guint year, guint month, guint day)
191 {
192   HildonTouchSelector *selector;
193   gchar *date;
194
195   g_return_if_fail (HILDON_IS_DATE_BUTTON (button));
196
197   selector = hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (button));
198
199   hildon_picker_button_disable_value_changed (HILDON_PICKER_BUTTON (button), TRUE);
200   hildon_date_selector_select_current_date (HILDON_DATE_SELECTOR (selector),
201                                             year, month, day);
202   hildon_picker_button_disable_value_changed (HILDON_PICKER_BUTTON (button), FALSE);
203
204   date = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
205
206   hildon_button_set_value (HILDON_BUTTON (button), date);
207
208   g_free (date);
209
210   hildon_picker_button_value_changed (HILDON_PICKER_BUTTON (button));
211 }