1 #ifndef ELM_WIDGET_DATETIME_H
2 #define ELM_WIDGET_DATETIME_H
4 #include "Elementary.h"
6 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
7 * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
8 * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
17 * @section elm-datetime-class The Elementary Datetime Class
19 * Elementary, besides having the @ref Elm_Datetime widget, exposes its
20 * foundation -- the Elementary Datetime Class -- in order to create other
21 * widgets which are a datetime with some more logic on top.
25 * Base layout smart data extended with datetime instance data.
27 typedef struct _Elm_Datetime_Module_Data Elm_Datetime_Module_Data;
28 typedef struct _Elm_Datetime_Data Elm_Datetime_Data;
29 typedef struct _Datetime_Field Datetime_Field;
30 typedef struct _Datetime_Mod_Api Datetime_Mod_Api;
31 typedef struct _Format_Map Format_Map;
33 #define ELM_DATETIME_TYPE_COUNT 6
34 #define ELM_DATETIME_MAX_FORMAT_LEN 64
35 #define ELM_DATETIME_MAX_FIELD_FORMAT_LEN 3
37 struct _Elm_Datetime_Module_Data
40 void (*field_limit_get)(Evas_Object *obj,
41 Elm_Datetime_Field_Type field_type,
44 const char *(*field_format_get)(Evas_Object * obj,
45 Elm_Datetime_Field_Type field_type);
46 //TIZEN_ONLY(20151218): Support Mobile UX
47 Eina_Bool (*field_location_get)(Evas_Object *obj,
48 Elm_Datetime_Field_Type field_type,
50 Eina_List *(*fields_sorted_get)(Evas_Object *obj);
54 struct _Datetime_Field
56 Evas_Object *item_obj;
57 const char *separator;
58 int location; /* location of the field as per
61 Elm_Datetime_Field_Type type;
62 char fmt[ELM_DATETIME_MAX_FIELD_FORMAT_LEN];
63 Eina_Bool fmt_exist : 1; /* whether field format is
65 Eina_Bool visible : 1; /* whether field can be
69 struct _Datetime_Mod_Api
71 Elm_Datetime_Module_Data *(*obj_hook)(Evas_Object * obj);
72 void (*obj_unhook)(Elm_Datetime_Module_Data *mdata);
73 void (*obj_hide)(Elm_Datetime_Module_Data *mdata);
74 Evas_Object *(*field_create)(Elm_Datetime_Module_Data * mdata,
75 Elm_Datetime_Field_Type ftype);
76 void (*field_value_display)(Elm_Datetime_Module_Data
79 //TIZEN_ONLY(20151218): Support Mobile UX
80 void (*field_format_changed)(Elm_Datetime_Module_Data
86 struct _Elm_Datetime_Data
88 /* fixed set of fields. */
89 Datetime_Field field_list[ELM_DATETIME_TYPE_COUNT];
90 struct tm curr_time, min_limit, max_limit;
91 Elm_Datetime_Module_Data *mod_data;
92 Evas_Object *access_obj;
93 int enabled_field_count;
94 char format[ELM_DATETIME_MAX_FORMAT_LEN];
95 Eina_Bool user_format : 1; /* whether user set
98 Eina_Bool freeze_sizing : 1; /* freeze sizing_eval to
99 * reduce unnecessary sizing */
114 #define ELM_DATETIME_DATA_GET(o, sd) \
115 Elm_Datetime_Data * sd = eo_data_scope_get(o, ELM_DATETIME_CLASS)
117 #define ELM_DATETIME_DATA_GET_OR_RETURN(o, ptr) \
118 ELM_DATETIME_DATA_GET(o, ptr); \
119 if (EINA_UNLIKELY(!ptr)) \
121 CRI("No widget data for object %p (%s)", \
122 o, evas_object_type_get(o)); \
126 #define ELM_DATETIME_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
127 ELM_DATETIME_DATA_GET(o, ptr); \
128 if (EINA_UNLIKELY(!ptr)) \
130 CRI("No widget data for object %p (%s)", \
131 o, evas_object_type_get(o)); \
135 #define ELM_DATETIME_CHECK(obj) \
136 if (EINA_UNLIKELY(!eo_isa((obj), ELM_DATETIME_CLASS))) \