[genlist] no scale at theme_hook
[framework/uifw/elementary.git] / src / edje_externals / elm_datefield.c
1 #include "private.h"
2
3 #define ITEM_COUNT   6
4
5 char *item_value_param[]  = { "year", "month", "date", "hour", "minute", "ampm"};
6 char *item_max_param[]    = { "year_max", "month_max", "date_max",
7                               "hour_max", "minute_max", "ampm_max" };
8 char *item_min_param[]    = { "year_min", "month_min", "date_min",
9                               "hour_min", "minute_min", "ampm_min" };
10 char *item_enable_param[] = { "year_enable", "month_enable", "date_enable",
11                               "hour_enable", "minute_enable", "ampm_enable" };
12 char *item_max_absolute_param[] = { "year_max_abs", "month_max_abs", "date_max_abs",
13                                     "hour_max_abs", "minute_max_abs", "ampm_max_abs" };
14 char *item_min_absolute_param[] = { "year_min_abs", "month_min_abs", "date_min_abs",
15                                     "hour_min_abs", "minute_min_abs", "ampm_min_abs" };
16
17 typedef struct _Elm_Params_Datefield
18 {
19    Elm_Params base;
20    const char *format;
21    int item_value[ITEM_COUNT];
22    int item_max[ITEM_COUNT];
23    int item_min[ITEM_COUNT];
24    Eina_Bool item_enable[ITEM_COUNT];
25    Eina_Bool item_max_absolute[ITEM_COUNT];
26    Eina_Bool item_min_absolute[ITEM_COUNT];
27    Eina_Bool item_value_set[ITEM_COUNT];
28    Eina_Bool item_max_set[ITEM_COUNT];
29    Eina_Bool item_min_set[ITEM_COUNT];
30    Eina_Bool item_enable_set[ITEM_COUNT];
31    Eina_Bool item_max_absolute_set[ITEM_COUNT];
32    Eina_Bool item_min_absolute_set[ITEM_COUNT];
33 } Elm_Params_Datefield;
34
35 static void
36 external_datefield_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
37 {
38    const Elm_Params_Datefield *p;
39    int i;
40
41    if (to_params) p = to_params;
42    else if (from_params) p = from_params;
43    else return;
44
45    if (p->format)
46      elm_datefield_format_set(obj, p->format);
47    for (i = 0; i < ITEM_COUNT; i++)
48      {
49         if (p->item_value_set[i])
50            elm_datefield_item_value_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_value[i]);
51      }
52    for (i = 0; i < ITEM_COUNT; i++)
53      {
54         if (p->item_enable_set[i])
55           elm_datefield_item_enabled_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_enable[i]);
56      }
57    for (i = 0; i < ITEM_COUNT; i++)
58      {
59         if ((p->item_max_set[i]) && (p->item_max_absolute_set[i]))
60           elm_datefield_item_max_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_max[i], p->item_max_absolute[i]);
61         else if ((p->item_max_set[i]) && !(p->item_max_absolute_set[i]))
62           elm_datefield_item_max_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_max[i],
63                         elm_datefield_item_max_is_absolute(obj,(ELM_DATEFIELD_YEAR+i)));
64         else if (!(p->item_max_set[i]) && (p->item_max_absolute_set[i]))
65           elm_datefield_item_max_set(obj, (ELM_DATEFIELD_YEAR+i), elm_datefield_item_max_get
66                         (obj, (ELM_DATEFIELD_YEAR+i)), p->item_max_absolute[i]);
67      }
68    for (i = 0; i < ITEM_COUNT; i++)
69      {
70         if ((p->item_min_set[i]) && (p->item_min_absolute_set[i]))
71           elm_datefield_item_min_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_min[i], p->item_min_absolute[i]);
72         else if ((p->item_min_set[i]) && !(p->item_min_absolute_set[i]))
73           elm_datefield_item_min_set(obj, (ELM_DATEFIELD_YEAR+i), p->item_min[i],
74                         elm_datefield_item_min_is_absolute(obj,(ELM_DATEFIELD_YEAR+i)));
75         else if (!(p->item_min_set[i]) && (p->item_min_absolute_set[i]))
76           elm_datefield_item_min_set(obj, (ELM_DATEFIELD_YEAR+i), elm_datefield_item_min_get
77                         (obj, (ELM_DATEFIELD_YEAR+i)), p->item_min_absolute[i]);
78      }
79 }
80
81 static Eina_Bool
82 external_datefield_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
83 {
84    int i;
85    if (!strcmp(param->name, "format"))
86      {
87        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
88          {
89             elm_datefield_format_set(obj, param->s);
90             return EINA_TRUE;
91          }
92      }
93    for (i =0 ; i < ITEM_COUNT; i++)
94      {
95         if (!strcmp(param->name, item_value_param[i]))
96         {
97             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
98               {
99                  elm_datefield_item_value_set(obj, (ELM_DATEFIELD_YEAR+i), param->i);
100                  return EINA_TRUE;
101               }
102         }
103     }
104    for (i =0 ; i < ITEM_COUNT; i++)
105      {
106         if (!strcmp(param->name, item_max_param[i]))
107         {
108             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
109               {
110                 Eina_Bool max_abs;
111                 max_abs = elm_datefield_item_max_is_absolute(obj, (ELM_DATEFIELD_YEAR+i));
112                  elm_datefield_item_max_set(obj, (ELM_DATEFIELD_YEAR+i), param->i, max_abs);
113                  return EINA_TRUE;
114               }
115         }
116     }
117    for (i =0 ; i < ITEM_COUNT; i++)
118      {
119         if (!strcmp(param->name, item_min_param[i]))
120         {
121             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
122               {
123                 Eina_Bool min_abs;
124                 min_abs = elm_datefield_item_min_is_absolute(obj, (ELM_DATEFIELD_YEAR+i));
125                  elm_datefield_item_min_set(obj, (ELM_DATEFIELD_YEAR+i), param->i, min_abs);
126                  return EINA_TRUE;
127               }
128         }
129     }
130    for (i =0 ; i < ITEM_COUNT; i++)
131      {
132         if (!strcmp(param->name, item_enable_param[i]))
133         {
134             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
135               {
136                  elm_datefield_item_enabled_set(obj, (ELM_DATEFIELD_YEAR+i), param->i);
137                  return EINA_TRUE;
138               }
139         }
140     }
141    for (i =0 ; i < ITEM_COUNT; i++)
142      {
143         if (!strcmp(param->name, item_max_absolute_param[i]))
144         {
145             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
146               {
147                 int max;
148                 max = elm_datefield_item_max_get(obj, (ELM_DATEFIELD_YEAR+i));
149                  elm_datefield_item_max_set(obj, (ELM_DATEFIELD_YEAR+i), max, param->i);
150                  return EINA_TRUE;
151               }
152         }
153     }
154    for (i =0 ; i < ITEM_COUNT; i++)
155      {
156         if (!strcmp(param->name, item_min_absolute_param[i]))
157         {
158             if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
159               {
160                 int min;
161                 min = elm_datefield_item_min_get(obj, (ELM_DATEFIELD_YEAR+i));
162                  elm_datefield_item_min_set(obj, (ELM_DATEFIELD_YEAR+i), min, param->i);
163                  return EINA_TRUE;
164               }
165         }
166     }
167
168    ERR("unknown parameter '%s' of type '%s'",
169        param->name, edje_external_param_type_str(param->type));
170
171    return EINA_FALSE;
172 }
173
174 static Eina_Bool
175 external_datefield_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
176 {
177    int i;
178
179    if (!strcmp(param->name, "format"))
180      {
181        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
182          {
183             param->s = elm_datefield_format_get(obj);
184             return EINA_TRUE;
185          }
186      }
187    for (i =0 ; i < ITEM_COUNT; i++)
188      {
189        if (!strcmp(param->name, item_value_param[i]))
190          {
191             param->i = elm_datefield_item_value_get(obj, (ELM_DATEFIELD_YEAR+i));
192             return EINA_TRUE;
193          }
194      }
195    for (i =0 ; i < ITEM_COUNT; i++)
196      {
197        if (!strcmp(param->name, item_max_param[i]))
198          {
199             param->i = elm_datefield_item_max_get(obj, (ELM_DATEFIELD_YEAR+i));
200             return EINA_TRUE;
201          }
202      }
203    for (i =0 ; i < ITEM_COUNT; i++)
204      {
205        if (!strcmp(param->name, item_min_param[i]))
206          {
207             param->i = elm_datefield_item_min_get(obj, (ELM_DATEFIELD_YEAR+i));
208             return EINA_TRUE;
209          }
210      }
211    for (i =0 ; i < ITEM_COUNT; i++)
212      {
213        if (!strcmp(param->name, item_enable_param[i]))
214          {
215             param->i = elm_datefield_item_enabled_get(obj, (ELM_DATEFIELD_YEAR+i));
216             return EINA_TRUE;
217          }
218      }
219    for (i =0 ; i < ITEM_COUNT; i++)
220      {
221        if (!strcmp(param->name, item_max_absolute_param[i]))
222          {
223             param->i = elm_datefield_item_max_is_absolute(obj, (ELM_DATEFIELD_YEAR+i));
224             return EINA_TRUE;
225          }
226      }
227    for (i =0 ; i < ITEM_COUNT; i++)
228      {
229        if (!strcmp(param->name, item_min_absolute_param[i]))
230          {
231             param->i = elm_datefield_item_min_is_absolute(obj, (ELM_DATEFIELD_YEAR+i));
232             return EINA_TRUE;
233          }
234      }
235
236    ERR("unknown parameter '%s' of type '%s'",
237        param->name, edje_external_param_type_str(param->type));
238
239    return EINA_FALSE;
240 }
241
242 static void *
243 external_datefield_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
244 {
245    Elm_Params_Datefield *mem;
246    Edje_External_Param *param;
247    const Eina_List *l;
248    int i;
249
250    mem = calloc(1, sizeof(Elm_Params_Datefield));
251    if (!mem)
252      return NULL;
253
254    EINA_LIST_FOREACH(params, l, param)
255      {
256         if (!strcmp(param->name, "format"))
257           mem->format = eina_stringshare_add(param->s);
258         for (i = 0; i < ITEM_COUNT; i ++)
259           {
260              if (!strcmp(param->name, item_value_param[i]))
261                {
262                   mem->item_value[i] = param->i;
263                   mem->item_value_set[i] = EINA_TRUE;
264                }
265           }
266         for (i = 0; i < ITEM_COUNT; i ++)
267           {
268              if (!strcmp(param->name, item_max_param[i]))
269                {
270                   mem->item_max[i] = param->i;
271                   mem->item_max_set[i] = EINA_TRUE;
272                }
273           }
274         for (i = 0; i < ITEM_COUNT; i ++)
275           {
276              if (!strcmp(param->name, item_min_param[i]))
277                {
278                   mem->item_min[i] = param->i;
279                   mem->item_min_set[i] = EINA_TRUE;
280                }
281           }
282         for (i = 0; i < ITEM_COUNT; i ++)
283           {
284              if (!strcmp(param->name, item_enable_param[i]))
285                {
286                   mem->item_enable[i] = param->i;
287                   mem->item_enable_set[i] = EINA_TRUE;
288                }
289           }
290         for (i = 0; i < ITEM_COUNT; i ++)
291           {
292              if (!strcmp(param->name, item_max_absolute_param[i]))
293                {
294                   mem->item_max_absolute[i] = param->i;
295                   mem->item_max_absolute_set[i] = EINA_TRUE;
296                }
297           }
298         for (i = 0; i < ITEM_COUNT; i ++)
299           {
300              if (!strcmp(param->name, item_min_absolute_param[i]))
301                {
302                   mem->item_min_absolute[i] = param->i;
303                   mem->item_min_absolute_set[i] = EINA_TRUE;
304                }
305           }
306      }
307
308    return mem;
309 }
310
311 static Evas_Object *external_datefield_content_get(void *data __UNUSED__,
312       const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
313 {
314    ERR("so content");
315    return NULL;
316 }
317
318 static void
319 external_datefield_params_free(void *params)
320 {
321    Elm_Params_Datefield *mem = params;
322
323    if (mem->format)
324      eina_stringshare_del(mem->format);
325
326    free(mem);
327 }
328
329 static Edje_External_Param_Info external_datefield_params[] = {
330    DEFINE_EXTERNAL_COMMON_PARAMS,
331    EDJE_EXTERNAL_PARAM_INFO_STRING("format"),
332    EDJE_EXTERNAL_PARAM_INFO_INT("year"),
333    EDJE_EXTERNAL_PARAM_INFO_INT("month"),
334    EDJE_EXTERNAL_PARAM_INFO_INT("date"),
335    EDJE_EXTERNAL_PARAM_INFO_INT("hour"),
336    EDJE_EXTERNAL_PARAM_INFO_INT("minute"),
337    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm"),
338    EDJE_EXTERNAL_PARAM_INFO_INT("year_max"),
339    EDJE_EXTERNAL_PARAM_INFO_BOOL("year_max_abs"),
340    EDJE_EXTERNAL_PARAM_INFO_INT("month_max"),
341    EDJE_EXTERNAL_PARAM_INFO_BOOL("month_max_abs"),
342    EDJE_EXTERNAL_PARAM_INFO_INT("date_max"),
343    EDJE_EXTERNAL_PARAM_INFO_BOOL("date_max_abs"),
344    EDJE_EXTERNAL_PARAM_INFO_INT("hour_max"),
345    EDJE_EXTERNAL_PARAM_INFO_BOOL("hour_max_abs"),
346    EDJE_EXTERNAL_PARAM_INFO_INT("minute_max"),
347    EDJE_EXTERNAL_PARAM_INFO_BOOL("minute_max_abs"),
348    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm_max"),
349    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm_max_abs"),
350    EDJE_EXTERNAL_PARAM_INFO_INT("year_min"),
351    EDJE_EXTERNAL_PARAM_INFO_BOOL("year_min_abs"),
352    EDJE_EXTERNAL_PARAM_INFO_INT("month_min"),
353    EDJE_EXTERNAL_PARAM_INFO_BOOL("month_min_abs"),
354    EDJE_EXTERNAL_PARAM_INFO_INT("date_min"),
355    EDJE_EXTERNAL_PARAM_INFO_BOOL("date_min_abs"),
356    EDJE_EXTERNAL_PARAM_INFO_INT("hour_min"),
357    EDJE_EXTERNAL_PARAM_INFO_BOOL("hour_min_abs"),
358    EDJE_EXTERNAL_PARAM_INFO_INT("minute_min"),
359    EDJE_EXTERNAL_PARAM_INFO_BOOL("minute_min_abs"),
360    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm_min"),
361    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm_min_abs"),
362    EDJE_EXTERNAL_PARAM_INFO_BOOL("year_enable"),
363    EDJE_EXTERNAL_PARAM_INFO_BOOL("month_enable"),
364    EDJE_EXTERNAL_PARAM_INFO_BOOL("date_enable"),
365    EDJE_EXTERNAL_PARAM_INFO_BOOL("hour_enable"),
366    EDJE_EXTERNAL_PARAM_INFO_BOOL("minute_enable"),
367    EDJE_EXTERNAL_PARAM_INFO_BOOL("ampm_enable"),
368    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
369 };
370
371 DEFINE_EXTERNAL_ICON_ADD(datefield, "datefield");
372 DEFINE_EXTERNAL_TYPE_SIMPLE(datefield, "Datefield");