Make sure that all timeouts in HildonBanner are removed
[hildon] / hildon / 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   GtkWidget *date_selector;
93
94   date_selector = hildon_date_selector_new ();
95
96   hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (self),
97                                      HILDON_TOUCH_SELECTOR (date_selector));
98 }
99
100 static GtkWidget *
101 hildon_date_button_new_full (HildonSizeType           size,
102                              HildonButtonArrangement  arrangement,
103                              GtkWidget               *selector)
104 {
105   return g_object_new (HILDON_TYPE_DATE_BUTTON,
106                        "title", _("wdgt_ti_date"),
107                        "arrangement", arrangement,
108                        "size", size,
109                        "touch-selector", selector,
110                        NULL);
111 }
112
113 /**
114  * hildon_date_button_new:
115  * @size: One of #HildonSizeType
116  * @arrangement: one of #HildonButtonArrangement
117  *
118  * Creates a new #HildonDateButton. See hildon_button_new() for details on the
119  * parameters.
120  *
121  * Returns: a new #HildonDateButton
122  *
123  * Since: 2.2
124  **/
125 GtkWidget *
126 hildon_date_button_new (HildonSizeType          size,
127                         HildonButtonArrangement arrangement)
128 {
129   GtkWidget *selector = hildon_date_selector_new ();
130   return hildon_date_button_new_full (size, arrangement, selector);
131 }
132
133 /**
134  * hildon_date_button_new_with_year_range:
135  * @size: One of #HildonSizeType
136  * @arrangement: one of #HildonButtonArrangement
137  * @min_year: the minimum available year or -1 to ignore
138  * @max_year: the maximum available year or -1 to ignore
139  *
140  * Creates a new #HildonDateButton with a specific valid range of years.
141  * See hildon_date_selector_new_with_year_range() for details on the range.
142  *
143  * Returns: a new #HildonDateButton
144  *
145  * Since: 2.2
146  **/
147 GtkWidget *
148 hildon_date_button_new_with_year_range (HildonSizeType size,
149                                         HildonButtonArrangement arrangement,
150                                         gint min_year,
151                                         gint max_year)
152 {
153   GtkWidget *selector;
154   selector = hildon_date_selector_new_with_year_range (min_year, max_year);
155   return hildon_date_button_new_full (size, arrangement, selector);
156 }
157
158 /**
159  * hildon_date_button_get_date:
160  * @button: a #HildonDateButton
161  * @year: return location for the selected year
162  * @month: return location for the selected month
163  * @day: return location for the selected day
164  *
165  * Retrieves currently selected date from @button.
166  *
167  * Since: 2.2
168  **/
169 void
170 hildon_date_button_get_date (HildonDateButton * button,
171                              guint * year, guint * month, guint * day)
172 {
173   HildonTouchSelector *selector;
174
175   g_return_if_fail (HILDON_IS_DATE_BUTTON (button));
176
177   selector = hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (button));
178
179   g_return_if_fail (HILDON_IS_TOUCH_SELECTOR (selector));
180
181   hildon_date_selector_get_date (HILDON_DATE_SELECTOR (selector), year, month, day);
182 }
183
184 /**
185  * hildon_date_button_set_date:
186  * @button: a #HildonDateButton
187  * @year: the year to set.
188  * @month: the month number to set.
189  * @day: the day of the month to set.
190  *
191  * Sets the date in @button. The date set will be displayed
192  * and will be the default selected option on the shown #HildonDateSelector.
193  *
194  * Since: 2.2
195  **/
196 void
197 hildon_date_button_set_date (HildonDateButton * button,
198                              guint year, guint month, guint day)
199 {
200   HildonTouchSelector *selector;
201   gchar *date;
202
203   g_return_if_fail (HILDON_IS_DATE_BUTTON (button));
204
205   selector = hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (button));
206
207   g_return_if_fail (HILDON_IS_TOUCH_SELECTOR (selector));
208
209   hildon_picker_button_disable_value_changed (HILDON_PICKER_BUTTON (button), TRUE);
210   hildon_date_selector_select_current_date (HILDON_DATE_SELECTOR (selector),
211                                             year, month, day);
212   hildon_picker_button_disable_value_changed (HILDON_PICKER_BUTTON (button), FALSE);
213
214   date = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
215
216   hildon_button_set_value (HILDON_BUTTON (button), date);
217
218   g_free (date);
219
220   hildon_picker_button_value_changed (HILDON_PICKER_BUTTON (button));
221 }