aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/lib/elm_datetime.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/elementary/src/lib/elm_datetime.h')
-rw-r--r--libraries/elementary/src/lib/elm_datetime.h592
1 files changed, 592 insertions, 0 deletions
diff --git a/libraries/elementary/src/lib/elm_datetime.h b/libraries/elementary/src/lib/elm_datetime.h
new file mode 100644
index 0000000..36785cb
--- /dev/null
+++ b/libraries/elementary/src/lib/elm_datetime.h
@@ -0,0 +1,592 @@
1/**
2 * @defgroup Datetime Datetime
3 * @ingroup Elementary
4 *
5 *
6 * @image html img/widget/datetime/preview-00.png
7 * @image latex img/widget/datetime/preview-00.eps
8 *
9 * @image html img/widget/datetime/preview-01.png
10 * @image latex img/widget/datetime/preview-01.eps
11 *
12 * @image html img/widget/datetime/preview-02.png
13 * @image latex img/widget/datetime/preview-02.eps
14 *
15 * Datetime widget is used to display and input date & time values.
16 * This widget displays date and time as per the <b>system's locale</b> settings (Date
17 * includes Day, Month & Year along with the defined separators and
18 * Time includes Hour, Minute & AM/PM fields. Separator for AM/PM field is ignored.
19 *
20 * The corresponding Month, AM/PM strings are displayed according to the
21 * system’s language settings.
22 *
23 * Datetime format is a combination of LIBC standard characters like
24 * “%%d %%b %%Y %%I : %%M %%p” which, as a whole represents both Date as well as Time
25 * format.
26 *
27 * Elm_datetime supports only the following sub set of libc date format specifiers:
28 *
29 * @b %%Y : The year as a decimal number including the century (example: 2011).
30 *
31 * @b %%y : The year as a decimal number without a century (range 00 to 99)
32 *
33 * @b %%m : The month as a decimal number (range 01 to 12).
34 *
35 * @b %%b : The abbreviated month name according to the current locale.
36 *
37 * @b %%B : The full month name according to the current locale.
38 *
39 * @b %%h : The abbreviated month name according to the current locale(same as %%b).
40 *
41 * @b %%d : The day of the month as a decimal number (range 01 to 31).
42 *
43 * @b %%e : The day of the month as a decimal number (range 1 to 31). single
44 * digits are preceded by a blank.
45 *
46 * @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
47 *
48 * @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
49 *
50 * @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
51 * digits are preceded by a blank.
52 *
53 * @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
54 * digits are preceded by a blank.
55 *
56 * @b %%M : The minute as a decimal number (range 00 to 59).
57 *
58 * @b %%p : Either 'AM' or 'PM' according to the given time value, or the
59 * corresponding strings for the current locale. Noon is treated as 'PM'
60 * and midnight as 'AM'
61 *
62 * @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
63 * the current locale.
64 *
65 * @b %%c : The preferred date and time representation for the current locale.
66 *
67 * @b %%x : The preferred date representation for the current locale without the time.
68 *
69 * @b %%X : The preferred time representation for the current locale without the date.
70 *
71 * @b %%r : The complete calendar time using the AM/PM format of the current locale.
72 *
73 * @b %%R : The hour and minute in decimal numbers using the format %H:%M.
74 *
75 * @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
76 *
77 * @b %%D : The date using the format %%m/%%d/%%y.
78 *
79 * @b %%F : The date using the format %%Y-%%m-%%d.
80 *
81 * (For more reference on the available <b>LIBC date format specifiers</b>, please
82 * visit the link:
83 * http://www.gnu.org/s/hello/manual/libc.html#Formatting-Calendar-Time )
84 *
85 * Datetime widget can provide Unicode @b separators in between its fields
86 * except for AM/PM field.
87 * A separator can be any <b>Unicode character</b> other than the LIBC standard
88 * date format specifiers.( Example: In the format %%b %%d @b , %%y %%H @b : %%M
89 * comma(,) is separator for date field %%d and colon(:) is separator for
90 * hour field %%H ).
91 *
92 * The default format is a predefined one, based on the system Locale.
93 *
94 * Hour format 12hr(1-12) or 24hr(0-23) display can be selected by setting
95 * the corresponding user format.
96 *
97 * Datetime supports six fields: Year, Month, Date, Hour, Minute, AM/PM.
98 * Depending on the Datetime module that is loaded, the user can see
99 * different UI to select the individual field values.
100 *
101 * The individual fields of Datetime can be arranged in any order according to the format
102 * set by application.
103 *
104 * There is a provision to set the visibility of a particular field as TRUE/ FALSE
105 * so that <b>only time/ only date / only required fields</b> will be displayed.
106 *
107 * Each field is having a default minimum and maximum values just like the daily
108 * calendar information. These min/max values can be modified as per the application usage.
109 *
110 * User can enter the values only in between the range of maximum and minimum.
111 * Apart from these APIs, there is a provision to display only a limited set of
112 * values out of the possible values. APIs to select the individual field limits
113 * are intended for this purpose.
114 *
115 * The whole widget is left aligned and its size grows horizontally depending
116 * on the current format and each field's visible/disabled state.
117 *
118 * Datetime individual field selection is implemented in a modular style.
119 * Module can be implemented as a Ctxpopup based selection or an ISE based
120 * selection or even a spinner like selection etc.
121 *
122 * <b>Datetime Module design:</b>
123 *
124 * The following functions are expected to be implemented in a Datetime module:
125 *
126 * <b>Field creation:</b>
127 * <pre>
128 *
129 * __________ __________
130 * | |----- obj_hook() ---------------------->>>| |
131 * | |<<<----------------returns Mod_data ------| |
132 * | Datetime |_______ | |
133 * | widget | |Assign module call backs | Module |
134 * | base |<<<____| | |
135 * | | | |
136 * | |----- field_create() ------------------>>>| |
137 * |__________|<<<----------------returns field_obj -----|__________|
138 *
139 * </pre>
140 *
141 * <b>Field value setting:</b>
142 * <pre>
143 *
144 * __________ __________
145 * | | | |
146 * | Datetime |<<<----------elm_datetime_value_set()---| |
147 * | widget | | Module |
148 * | base |----display_field_value()------------>>>| |
149 * |__________| |__________|
150 *
151 * </pre>
152 *
153 * <b>del_hook:</b>
154 * <pre>
155 * __________ __________
156 * | | | |
157 * | Datetime |----obj_unhook()-------------------->>>>| |
158 * | widget | | Module |
159 * | base | <<<-----frees mod_data---------| |
160 * |__________| |__________|
161 *
162 * </pre>
163 *
164 *
165 * Any module can use the following shared functions that are implemented in elm_datetime.c :
166 *
167 * <b>field_format_get()</b> - gives the field format.
168 *
169 * <b>field_limit_get()</b> - gives the field minimum, maximum limits.
170 *
171 * To enable a module, set the ELM_MODULES environment variable as shown:
172 *
173 * <b>export ELM_MODULES="datetime_input_ctxpopup>datetime/api"</b>
174 *
175 *
176 * Datetime widgets emits the following signals:
177 *
178 * @li @b "changed" - whenever Datetime field value is changed, this signal is sent.
179 *
180 * @li @b "language,changed" - whenever system locale changes, this signal is sent.
181 *
182 * Here is an example on its usage:
183 * @li @ref datetime_example
184 *
185 */
186
187/**
188 * @addtogroup Datetime
189 * @{
190 */
191
192/**
193 * Identifies a Datetime field, The widget supports 6 fields : Year, month,
194 * Date, Hour, Minute, AM/PM
195 *
196 */
197typedef enum _Elm_Datetime_Field_Type
198{
199 ELM_DATETIME_YEAR = 0, /**< Indicates Year field */
200 ELM_DATETIME_MONTH = 1, /**< Indicates Month field */
201 ELM_DATETIME_DATE = 2, /**< Indicates Date field */
202 ELM_DATETIME_HOUR = 3, /**< Indicates Hour field */
203 ELM_DATETIME_MINUTE = 4, /**< Indicates Minute field */
204 ELM_DATETIME_AMPM = 5, /**< Indicates AM/PM field */
205} Elm_Datetime_Field_Type;
206
207/**
208 * @brief Adds a new datetime Widget
209 *
210 * The default datetime format and corresponding strings are based on current locale.
211 *
212 * @param parent The parent object
213 * @return The new object or NULL if it cannot be created
214 *
215 * This function inserts a new datetime widget on the canvas.
216 *
217 * @ingroup Datetime
218 */
219EAPI Evas_Object *elm_datetime_add(Evas_Object *parent);
220
221/**
222 * Get the datetime format. Format is a combination of allowed Libc date format
223 * specifiers like: "%b %d, %Y %I : %M %p".
224 *
225 * Maximum allowed format length is 64 chars.
226 *
227 * Format can include separators for each individual datetime field except
228 * for AM/PM field.
229 *
230 * Each separator can be a maximum of 6 UTF-8 bytes.
231 * Space is also taken as a separator.
232 *
233 * Following are the allowed set of format specifiers for each datetime field.
234 *
235 * @b %%Y : The year as a decimal number including the century.
236 *
237 * @b %%y : The year as a decimal number without a century (range 00 to 99).
238 *
239 * @b %%m : The month as a decimal number (range 01 to 12).
240 *
241 * @b %%b : The abbreviated month name according to the current locale.
242 *
243 * @b %%B : The full month name according to the current locale.
244 *
245 * @b %%h : The abbreviated month name according to the current locale(same as %%b).
246 *
247 * @b %%d : The day of the month as a decimal number (range 01 to 31).
248 *
249 * @b %%e : The day of the month as a decimal number (range 1 to 31). single
250 * digits are preceded by a blank.
251 *
252 * @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
253 *
254 * @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
255 *
256 * @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
257 * digits are preceded by a blank.
258 *
259 * @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
260 * digits are preceded by a blank.
261 *
262 * @b %%M : The minute as a decimal number (range 00 to 59).
263 *
264 * @b %%p : Either 'AM' or 'PM' according to the given time value, or the
265 * corresponding strings for the current locale. Noon is treated as 'PM'
266 * and midnight as 'AM'.
267 *
268 * @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
269 * the current locale.
270 *
271 * @b %%c : The preferred date and time representation for the current locale.
272 *
273 * @b %%x : The preferred date representation for the current locale without the time.
274 *
275 * @b %%X : The preferred time representation for the current locale without the date.
276 *
277 * @b %%r : The complete calendar time using the AM/PM format of the current locale.
278 *
279 * @b %%R : The hour and minute in decimal numbers using the format %H:%M.
280 *
281 * @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
282 *
283 * @b %%D : The date using the format %%m/%%d/%%y.
284 *
285 * @b %%F : The date using the format %%Y-%%m-%%d.
286 *
287 * These specifiers can be arranged in any order and the widget will display the
288 * fields accordingly.
289 *
290 * Default format is taken as per the system locale settings.
291 *
292 * @param obj The datetime object
293 * @return The datetime format string. Example: "%b %d, %Y %I : %M %p"
294 *
295 * @see elm_datetime_format_set()
296 * @ingroup Datetime
297 */
298 EAPI const char *elm_datetime_format_get(const Evas_Object *obj);
299
300/**
301 * Set the datetime format. Format is a combination of allowed Libc date format
302 * specifiers like: "%b %d, %Y %I : %M %p".
303 *
304 * Maximum allowed format length is 64 chars.
305 *
306 * Format can include separators for each individual datetime field except
307 * for AM/PM field.
308 *
309 * Each separator can be a maximum of 6 UTF-8 bytes.
310 * Space is also taken as a separator.
311 *
312 * Following are the allowed set of format specifiers for each datetime field.
313 *
314 * @b %%Y : The year as a decimal number including the century.
315 *
316 * @b %%y : The year as a decimal number without a century (range 00 to 99).
317 *
318 * @b %%m : The month as a decimal number (range 01 to 12).
319 *
320 * @b %%b : The abbreviated month name according to the current locale.
321 *
322 * @b %%B : The full month name according to the current locale.
323 *
324 * @b %%h : The abbreviated month name according to the current locale(same as %%b).
325 *
326 * @b %%d : The day of the month as a decimal number (range 01 to 31).
327 *
328 * @b %%e : The day of the month as a decimal number (range 1 to 31). single
329 * digits are preceded by a blank.
330 *
331 * @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
332 *
333 * @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
334 *
335 * @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
336 * digits are preceded by a blank.
337 *
338 * @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
339 * digits are preceded by a blank.
340 *
341 * @b %%M : The minute as a decimal number (range 00 to 59).
342 *
343 * @b %%p : Either 'AM' or 'PM' according to the given time value, or the
344 * corresponding strings for the current locale. Noon is treated as 'PM'
345 * and midnight as 'AM'.
346 *
347 * @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
348 * the current locale.
349 *
350 * @b %%c : The preferred date and time representation for the current locale.
351 *
352 * @b %%x : The preferred date representation for the current locale without the time.
353 *
354 * @b %%X : The preferred time representation for the current locale without the date.
355 *
356 * @b %%r : The complete calendar time using the AM/PM format of the current locale.
357 *
358 * @b %%R : The hour and minute in decimal numbers using the format %H:%M.
359 *
360 * @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
361 *
362 * @b %%D : The date using the format %%m/%%d/%%y.
363 *
364 * @b %%F : The date using the format %%Y-%%m-%%d.
365 *
366 * These specifiers can be arranged in any order and the widget will display the
367 * fields accordingly.
368 *
369 * Default format is taken as per the system locale settings.
370 *
371 * @param obj The datetime object
372 * @param fmt The datetime format
373 *
374 * @see elm_datetime_format_get()
375 * @ingroup Datetime
376 */
377EAPI void elm_datetime_format_set(Evas_Object *obj, const char *fmt);
378
379/**
380 * @brief Get the upper boundary of a field.
381 *
382 * Year: years since 1900. Negative value represents year below 1900 (year
383 * value -30 represents 1870). Year default range is from 70 to 137.
384 *
385 * Month: default value range is from 0 to 11.
386 *
387 * Date: default value range is from 1 to 31 according to the month value.
388 *
389 * Hour: default value will be in terms of 24 hr format (0~23)
390 *
391 * Minute: default value range is from 0 to 59.
392 *
393 * @param obj The datetime object
394 * @param maxtime Time structure containing the maximum time value.
395 * @return int The maximum value of the field.
396 *
397 * @see elm_datetime_value_max_set()
398 * @ingroup Datetime
399 */
400EAPI Eina_Bool elm_datetime_value_max_get(const Evas_Object *obj, struct tm *maxtime);
401
402/**
403 * @brief Set the upper boundary of a field.
404 *
405 * Year: years since 1900. Negative value represents year below 1900 (year
406 * value -30 represents 1870). Year default range is from 70 to 137.
407 *
408 * Month: default value range is from 0 to 11.
409 *
410 * Date: default value range is from 1 to 31 according to the month value.
411 *
412 * Hour: default value will be in terms of 24 hr format (0~23)
413 *
414 * Minute: default value range is from 0 to 59.
415 *
416 * @param obj The datetime object
417 * @param maxtime Time structure containing the maximum time value.
418 * @return EINA_TRUE if maximum value is accepted.
419 *
420 * @see elm_datetime_value_max_get()
421 * @ingroup Datetime
422 */
423EAPI Eina_Bool elm_datetime_value_max_set(Evas_Object *obj, const struct tm *maxtime);
424
425/**
426 * @brief Get the lower boundary of a field.
427 *
428 * Year: years since 1900. Negative value represents year below 1900 (year
429 * value -30 represents 1870). Year default range is from 70 to 137.
430 *
431 * Month: default value range is from 0 to 11.
432 *
433 * Date: default value range is from 1 to 31 according to the month value.
434 *
435 * Hour: default value will be in terms of 24 hr format (0~23)
436 *
437 * Minute: default value range is from 0 to 59.
438 *
439 * @param obj The datetime object
440 * @param mintime Time structure.
441 * @return EINA_TRUE if minimum value is successfully returned.
442 *
443 * @see elm_datetime_value_min_set()
444 * @ingroup Datepicker
445 */
446EAPI Eina_Bool elm_datetime_value_min_get(const Evas_Object *obj, struct tm *mintime);
447
448/**
449 * @brief Set the lower boundary of a field.
450 *
451 * Year: years since 1900. Negative value represents year below 1900 (year
452 * value -30 represents 1870). Year default range is from 70 to 137.
453 *
454 * Month: default value range is from 0 to 11.
455 *
456 * Date: default value range is from 1 to 31 according to the month value.
457 *
458 * Hour: default value will be in terms of 24 hr format (0~23)
459 *
460 * Minute: default value range is from 0 to 59.
461 *
462 * @param obj The datetime object.
463 * @param mintime Time structure containing the minimum time value.
464 * @return EINA_TRUE if minimum value is accepted.
465 *
466 * @see elm_datetime_value_min_get()
467 * @ingroup Datetime
468 */
469EAPI Eina_Bool elm_datetime_value_min_set(Evas_Object *obj, const struct tm *mintime);
470
471/**
472 * @brief Get the field limits of a field.
473 *
474 * Limits can be set to individual fields, independently, except for AM/PM field.
475 * Any field can display the values only in between these Minimum and Maximum limits unless
476 * the corresponding time value is restricted from MinTime to MaxTime.
477 * That is, Min/ Max field limits always works under the limitations of MinTime/ MaxTime.
478 *
479 * There is no provision to set the limits of AM/PM field.
480 *
481 * @param obj The datetime object
482 * @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
483 * @param min Reference to field's minimum value
484 * @param max Reference to field's maximum value
485 *
486 * @see elm_datetime_field_limit_set()
487 * @ingroup Datetime
488 */
489EAPI void elm_datetime_field_limit_get(const Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, int *min, int *max);
490
491/**
492 * @brief Set the field limits of a field.
493 *
494 * Limits can be set to individual fields, independently, except for AM/PM field.
495 * Any field can display the values only in between these Minimum and Maximum limits unless
496 * the corresponding time value is restricted from MinTime to MaxTime.
497 * That is, Min/ Max field limits always works under the limitations of MinTime/ MaxTime.
498 *
499 * There is no provision to set the limits of AM/PM field.
500 *
501 * @param obj The datetime object
502 * @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
503 * @param min Reference to field's minimum value
504 * @param max Reference to field's maximum value
505 *
506 * @see elm_datetime_field_limit_set()
507 * @ingroup Datetime
508 */
509EAPI void elm_datetime_field_limit_set(Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, int min, int max);
510
511/**
512 * @brief Get the current value of a field.
513 *
514 * Year: years since 1900. Negative value represents year below 1900 (year
515 * value -30 represents 1870). Year default range is from 70 to 137.
516 *
517 * Month: default value range is from 0 to 11.
518 *
519 * Date: default value range is from 1 to 31 according to the month value.
520 *
521 * Hour: default value will be in terms of 24 hr format (0~23)
522 *
523 * Minute: default value range is from 0 to 59.
524 *
525 * @param obj The datetime object.
526 * @param currtime Time structure.
527 * @return EINA_TRUE if current time is returned successfully.
528 *
529 * @see elm_datetime_field_value_set()
530 * @ingroup Datetime
531 */
532EAPI Eina_Bool elm_datetime_value_get(const Evas_Object *obj, struct tm *currtime);
533
534/**
535 * @brief Set the current value of a Datetime object.
536 *
537 * Year: years since 1900. Negative value represents year below 1900 (year
538 * value -30 represents 1870). Year default range is from 70 to 137.
539 *
540 * Month: default value range is from 0 to 11.
541 *
542 * Date: default value range is from 1 to 31 according to the month value.
543 *
544 * Hour: default value will be in terms of 24 hr format (0~23)
545 *
546 * Minute: default value range is from 0 to 59.
547 *
548 *
549 * @param obj The datetime object.
550 * @param newtime Time structure filled with values to be set.
551 * @return EINA_TRUE if current time is set successfully.
552 *
553 * @see elm_datetime_value_set()
554 * @ingroup Datetime
555 */
556EAPI Eina_Bool elm_datetime_value_set(Evas_Object *obj, const struct tm *newtime);
557
558/**
559 * @brief Get whether a field can be visible/not
560 *
561 * @param obj The datetime object
562 * @param fieldtype Type of the field. ELM_DATETIME_YEAR etc
563 * @return bool @c EINA_TRUE, if field can be visible. @c EINA_FALSE otherwise.
564 *
565 * @see elm_datetime_field_visible_set()
566 * @ingroup Datetime
567 */
568EAPI Eina_Bool elm_datetime_field_visible_get(const Evas_Object *obj, Elm_Datetime_Field_Type fieldtype);
569
570/**
571 * @brief Set a field to be visible or not.
572 * Setting this API True does not ensure that the field is visible, apart from
573 * this, the field's format must be present in Datetime overall format.
574 * If a field's visibility is set to False then it won't appear even though
575 * its format is present in overall format.
576 * So if and only if this API is set true and the corresponding field's format
577 * is present in Datetime format, the field is visible.
578 *
579 * By default the field visibility is set to True.
580 *
581 * @param obj The datetime object
582 * @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
583 * @param visible @c EINA_TRUE field can be visible, @c EINA_FALSE otherwise.
584 *
585 * @see elm_datetime_field_visible_get()
586 * @ingroup Datetime
587 */
588EAPI void elm_datetime_field_visible_set(Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, Eina_Bool visible);
589
590/**
591 * @}
592 */