Tizen 2.1 base
[framework/uifw/elementary.git] / src / edje_externals / elm_clock.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Clock
4 {
5    Elm_Params base;
6    int hrs, min, sec;
7    Eina_Bool hrs_exists:1;
8    Eina_Bool min_exists:1;
9    Eina_Bool sec_exists:1;
10    Eina_Bool edit:1;
11    Eina_Bool ampm:1;
12    Eina_Bool seconds:1;
13 } Elm_Params_Clock;
14
15 static void
16 external_clock_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
17 {
18    const Elm_Params_Clock *p;
19
20    if (to_params) p = to_params;
21    else if (from_params) p = from_params;
22    else return;
23
24    if ((p->hrs_exists) && (p->min_exists) && (p->sec_exists))
25      elm_clock_time_set(obj, p->hrs, p->min, p->sec);
26    else if ((p->hrs_exists) || (p->min_exists) || (p->sec_exists))
27      {
28         int hrs, min, sec;
29         elm_clock_time_get(obj, &hrs, &min, &sec);
30         if (p->hrs_exists)
31           hrs = p->hrs;
32         if (p->min_exists)
33           min = p->min;
34         if (p->sec_exists)
35           sec = p->sec;
36         elm_clock_time_set(obj, hrs, min, sec);
37      }
38    if (p->edit)
39      elm_clock_edit_set(obj, p->edit);
40    if (p->ampm)
41      elm_clock_show_am_pm_set(obj, p->ampm);
42    if (p->seconds)
43      elm_clock_show_seconds_set(obj, p->seconds);
44 }
45
46 static Eina_Bool
47 external_clock_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
48 {
49    if (!strcmp(param->name, "hours"))
50      {
51         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
52           {
53              int hrs, min, sec;
54              elm_clock_time_get(obj, &hrs, &min, &sec);
55              elm_clock_time_set(obj, param->d, min, sec);
56              return EINA_TRUE;
57           }
58      }
59    else if (!strcmp(param->name, "minutes"))
60      {
61         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
62           {
63              int hrs, min, sec;
64              elm_clock_time_get(obj, &hrs, &min, &sec);
65              elm_clock_time_set(obj, hrs, param->d, sec);
66              return EINA_TRUE;
67           }
68      }
69    else if (!strcmp(param->name, "seconds"))
70      {
71         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
72           {
73              int hrs, min, sec;
74              elm_clock_time_get(obj, &hrs, &min, &sec);
75              elm_clock_time_set(obj, hrs, min, param->d);
76              return EINA_TRUE;
77           }
78      }
79    else if (!strcmp(param->name, "editable"))
80      {
81         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
82           {
83              elm_clock_edit_set(obj, param->i);
84              return EINA_TRUE;
85           }
86      }
87    else if (!strcmp(param->name, "am/pm"))
88      {
89         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
90           {
91              elm_clock_show_am_pm_set(obj, param->i);
92              return EINA_TRUE;
93           }
94      }
95    else if (!strcmp(param->name, "show seconds"))
96      {
97         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
98           {
99              elm_clock_show_seconds_set(obj, param->i);
100              return EINA_TRUE;
101           }
102      }
103
104    ERR("unknown parameter '%s' of type '%s'",
105        param->name, edje_external_param_type_str(param->type));
106
107    return EINA_FALSE;
108 }
109
110 static Eina_Bool
111 external_clock_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
112 {
113    if (!strcmp(param->name, "hours"))
114      {
115         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
116           {
117              int hrs, min, sec;
118              elm_clock_time_get(obj, &hrs, &min, &sec);
119              param->i = hrs;
120              return EINA_TRUE;
121           }
122      }
123    else if (!strcmp(param->name, "minutes"))
124      {
125         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
126           {
127              int hrs, min, sec;
128              elm_clock_time_get(obj, &hrs, &min, &sec);
129              param->i = min;
130              return EINA_TRUE;
131           }
132      }
133    else if (!strcmp(param->name, "seconds"))
134      {
135         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
136           {
137              int hrs, min, sec;
138              elm_clock_time_get(obj, &hrs, &min, &sec);
139              param->i = sec;
140              return EINA_TRUE;
141           }
142      }
143    else if (!strcmp(param->name, "editable"))
144      {
145         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
146           {
147              param->i = elm_clock_edit_get(obj);
148              return EINA_TRUE;
149           }
150      }
151    else if (!strcmp(param->name, "am/pm"))
152      {
153         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
154           {
155              param->i = elm_clock_show_am_pm_get(obj);
156              return EINA_TRUE;
157           }
158      }
159    else if (!strcmp(param->name, "show seconds"))
160      {
161         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
162           {
163              param->i = elm_clock_show_seconds_get(obj);
164              return EINA_TRUE;
165           }
166      }
167
168
169    ERR("unknown parameter '%s' of type '%s'",
170        param->name, edje_external_param_type_str(param->type));
171
172    return EINA_FALSE;
173 }
174
175 static void *
176 external_clock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
177 {
178    Elm_Params_Clock *mem;
179    Edje_External_Param *param;
180    const Eina_List *l;
181
182    mem = calloc(1, sizeof(Elm_Params_Clock));
183    if (!mem)
184      return NULL;
185
186    EINA_LIST_FOREACH(params, l, param)
187      {
188         if (!strcmp(param->name, "hours"))
189           {
190              mem->hrs = param->i;
191              mem->hrs_exists = EINA_TRUE;
192           }
193         else if (!strcmp(param->name, "minutes"))
194           {
195              mem->min = param->i;
196              mem->min_exists = EINA_TRUE;
197           }
198         else if (!strcmp(param->name, "seconds"))
199           {
200              mem->sec = param->i;
201              mem->sec_exists = EINA_TRUE;
202           }
203         else if (!strcmp(param->name, "editable"))
204           mem->edit = !!param->i;
205         else if (!strcmp(param->name, "am/pm"))
206           mem->ampm = !!param->i;
207         else if (!strcmp(param->name, "show seconds"))
208           mem->seconds = !!param->i;
209      }
210
211    return mem;
212 }
213
214 static Evas_Object *external_clock_content_get(void *data __UNUSED__,
215                 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
216 {
217         ERR("No content.");
218         return NULL;
219 }
220
221 static void
222 external_clock_params_free(void *params)
223 {
224    Elm_Params_Clock *mem = params;
225
226    free(mem);
227 }
228
229 static Edje_External_Param_Info external_clock_params[] = {
230    DEFINE_EXTERNAL_COMMON_PARAMS,
231    EDJE_EXTERNAL_PARAM_INFO_INT("hours"),
232    EDJE_EXTERNAL_PARAM_INFO_INT("minutes"),
233    EDJE_EXTERNAL_PARAM_INFO_INT("seconds"),
234    EDJE_EXTERNAL_PARAM_INFO_BOOL("editable"),
235    EDJE_EXTERNAL_PARAM_INFO_BOOL("am/pm"),
236    EDJE_EXTERNAL_PARAM_INFO_BOOL("show seconds"),
237    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
238 };
239
240 DEFINE_EXTERNAL_ICON_ADD(clock, "clock")
241 DEFINE_EXTERNAL_TYPE_SIMPLE(clock, "Clock")