Merge "[Password]: New design based changes, a new style removed password mode contro...
[framework/uifw/elementary.git] / src / edje_externals / elm_gengrid.c
1 #include <assert.h>
2
3 #include "private.h"
4
5 typedef struct _Elm_Params_Gengrid
6 {
7    Eina_Bool item_size_x_exists;
8    int item_size_x;
9    Eina_Bool item_size_y_exists;
10    int item_size_y;
11    Eina_Bool align_x_exists;
12    double align_x;
13    Eina_Bool align_y_exists;
14    double align_y;
15    Eina_Bool always_select_exists;
16    Eina_Bool always_select : 1;
17    Eina_Bool no_select_exists;
18    Eina_Bool no_select;
19    Eina_Bool multi_select_exists;
20    Eina_Bool multi_select : 1;
21    Eina_Bool h_bounce_exists;
22    Eina_Bool h_bounce : 1;
23    Eina_Bool v_bounce_exists;
24    Eina_Bool v_bounce : 1;
25    Eina_Bool horizontal_exists;
26    Eina_Bool horizontal;
27 } Elm_Params_Gengrid;
28
29 static Eina_Bool horizontal_bk;
30
31 static void
32 external_gengrid_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
33 {
34    const Elm_Params_Gengrid *p;
35
36    if (to_params) p = to_params;
37    else if (from_params) p = from_params;
38    else return;
39
40    if (p->item_size_x_exists && p->item_size_y_exists)
41      elm_gengrid_item_size_set(obj, p->item_size_x, p->item_size_y);
42    else if (p->item_size_x_exists || p->item_size_y_exists)
43      {
44         Evas_Coord w, h;
45         elm_gengrid_item_size_get(obj, &w, &h);
46         if (p->item_size_x_exists)
47           elm_gengrid_item_size_set(obj, p->item_size_x, h);
48         else
49           elm_gengrid_item_size_set(obj, w, p->item_size_y);
50      }
51    if (p->align_x_exists && p->align_y_exists)
52      elm_gengrid_align_set(obj, p->align_x, p->align_y);
53    else if (p->align_x_exists || p->align_y_exists)
54      {
55         double x, y;
56         elm_gengrid_align_get(obj, &x, &y);
57         if (p->align_x_exists)
58           elm_gengrid_align_set(obj, p->align_x, y);
59         else
60           elm_gengrid_align_set(obj, x, p->align_y);
61      }
62    if (p->always_select_exists)
63      elm_gengrid_always_select_mode_set(obj, p->always_select);
64    if (p->no_select_exists)
65      elm_gengrid_no_select_mode_set(obj, p->no_select);
66    if (p->multi_select_exists)
67      elm_gengrid_multi_select_set(obj, p->multi_select);
68    if (p->h_bounce_exists && p->v_bounce_exists)
69      elm_gengrid_bounce_set(obj, p->h_bounce, p->v_bounce);
70    else if (p->h_bounce_exists || p->v_bounce_exists)
71      {
72         Eina_Bool h, v;
73         elm_gengrid_bounce_get(obj, &h, &v);
74         if (p->h_bounce_exists)
75           elm_gengrid_bounce_set(obj, p->h_bounce, v);
76         else
77           elm_gengrid_bounce_set(obj, h, p->v_bounce);
78      }
79    if (p->horizontal_exists)
80      {
81         elm_gengrid_horizontal_set(obj, p->horizontal);
82         horizontal_bk = p->horizontal;
83      }
84 }
85
86 static Eina_Bool
87 external_gengrid_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
88 {
89    if (!strcmp(param->name, "item size x") 
90                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
91      {
92         Evas_Coord w, h;
93         elm_gengrid_item_size_get(obj, &w, &h);
94         elm_gengrid_item_size_set(obj, param->i, h);
95         return EINA_TRUE;
96      }
97    else if (!strcmp(param->name, "item size y")
98                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
99      {
100         Evas_Coord w, h;
101         elm_gengrid_item_size_get(obj, &w, &h);
102         elm_gengrid_item_size_set(obj, w, param->i);
103         return EINA_TRUE;
104      }
105    else if (!strcmp(param->name, "align x")
106                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
107      {
108         double x, y;
109         elm_gengrid_align_get(obj, &x, &y);
110         elm_gengrid_align_set(obj, param->d, y);           
111         return EINA_TRUE;
112      }
113    else if (!strcmp(param->name, "align y")
114                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
115      {
116         double x, y;
117         elm_gengrid_align_get(obj, &x, &y);
118         elm_gengrid_align_set(obj, x, param->d);
119         return EINA_TRUE;
120      }
121    else if (!strcmp(param->name, "always select")
122                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
123      {
124         elm_gengrid_always_select_mode_set(obj, param->i);
125         return EINA_TRUE;
126      }
127    else if (!strcmp(param->name, "no select")
128                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
129      {
130         elm_gengrid_no_select_mode_set(obj, param->i);
131         return EINA_TRUE;
132      }
133    else if (!strcmp(param->name, "multi select")
134                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
135      {
136         elm_gengrid_multi_select_set(obj, param->i);
137         return EINA_TRUE;
138      }
139    else if (!strcmp(param->name, "h bounce")
140                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
141      {
142         Eina_Bool h, v;
143         elm_gengrid_bounce_get(obj, &h, &v);
144         elm_gengrid_item_size_set(obj, param->i, v);
145         return EINA_TRUE;
146      }
147    else if (!strcmp(param->name, "v bounce")
148                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
149      {
150         Eina_Bool h, v;
151         elm_gengrid_bounce_get(obj, &h, &v);
152         elm_gengrid_item_size_set(obj, h, param->i);
153         return EINA_TRUE;
154      }
155    else if (!strcmp(param->name, "horizontal")
156                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
157      {
158         elm_gengrid_horizontal_set(obj, param->i);
159         horizontal_bk = param->i;
160         return EINA_TRUE;
161      }
162
163    ERR("unknown parameter '%s' of type '%s'",
164        param->name, edje_external_param_type_str(param->type));
165
166    return EINA_FALSE;
167 }
168
169 static Eina_Bool
170 external_gengrid_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
171 {
172    if (!strcmp(param->name, "item size x")
173                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
174      {
175         Evas_Coord x, y;
176         elm_gengrid_item_size_get(obj, &x, &y);
177         param->i = x;
178         return EINA_TRUE;
179      }
180    else if (!strcmp(param->name, "item size y")
181                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
182      {
183         Evas_Coord x, y;
184         elm_gengrid_item_size_get(obj, &x, &y);
185         param->i = y;
186         return EINA_TRUE;
187      }
188    else if (!strcmp(param->name, "align x")
189                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
190      {
191         double x, y;
192         elm_gengrid_align_get(obj, &x, &y);
193         param->d = x;
194         return EINA_TRUE;
195      }
196    else if (!strcmp(param->name, "align y")
197                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
198      {
199         double x, y;
200         elm_gengrid_align_get(obj, &x, &y);
201         param->d = y;
202         return EINA_TRUE;
203      }
204    else if (!strcmp(param->name, "always select")
205                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
206      {
207         param->i = elm_gengrid_always_select_mode_get(obj);
208         return EINA_TRUE;
209      }
210    else if (!strcmp(param->name, "no select")
211                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
212      {
213         param->i = elm_gengrid_no_select_mode_get(obj);
214         return EINA_TRUE;
215      }
216    else if (!strcmp(param->name, "multi select")
217                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
218      {
219         param->i = elm_gengrid_multi_select_get(obj);
220         return EINA_TRUE;
221      }
222    else if (!strcmp(param->name, "horizontal")
223                    && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
224      {
225         param->i = horizontal_bk;
226         return EINA_TRUE;
227      }
228
229    ERR("unknown parameter '%s' of type '%s'",
230                    param->name, edje_external_param_type_str(param->type));
231
232    return EINA_FALSE;
233 }
234
235 static void *
236 external_gengrid_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
237 {
238    Elm_Params_Gengrid *mem;
239    Edje_External_Param *param;
240    const Eina_List *l;
241    
242    mem = calloc(1, sizeof(Elm_Params_Gengrid));
243    if (!mem)
244      return NULL;
245
246    EINA_LIST_FOREACH(params, l, param)
247      {
248         if (!strcmp(param->name, "item size x"))
249           {
250              mem->item_size_x = param->i;
251              mem->item_size_x_exists = EINA_TRUE;
252           }
253         else if (!strcmp(param->name, "item size y"))
254           {
255              mem->item_size_y = param->i;
256              mem->item_size_y_exists = EINA_TRUE;
257           }
258         else if (!strcmp(param->name, "align x"))
259           {
260              mem->align_x = param->d;
261              mem->align_x_exists = EINA_TRUE;
262           }
263         else if (!strcmp(param->name, "align y"))
264           {
265              mem->align_y = param->d;
266              mem->align_y_exists = EINA_TRUE;
267           }
268         else if (!strcmp(param->name, "always select"))
269           {
270              mem->always_select = param->i;
271              mem->always_select_exists = EINA_TRUE;
272           }
273         else if (!strcmp(param->name, "no_select"))
274           {
275              mem->no_select = param->i;
276              mem->no_select_exists = EINA_TRUE;
277           }
278         else if (!strcmp(param->name, "multi select"))
279           {
280              mem->multi_select = param->i;
281              mem->multi_select_exists = EINA_TRUE;
282           }
283         else if (!strcmp(param->name, "h bounce"))
284           {
285              mem->h_bounce = param->i;
286              mem->h_bounce_exists = EINA_TRUE;
287           }
288         else if (!strcmp(param->name, "v bounce"))
289           {
290              mem->v_bounce = param->i;
291              mem->v_bounce_exists = EINA_TRUE;
292           }
293         else if (!strcmp(param->name, "horizontal"))
294         {
295              mem->horizontal = param->i;
296              horizontal_bk = param->i;
297              mem->horizontal_exists = EINA_TRUE;
298         }
299      }
300    
301    return mem;
302 }
303
304 static Evas_Object *external_gengrid_content_get(void *data __UNUSED__,
305                 const Evas_Object *obj, const char *content)
306 {
307    ERR("so content");
308    return NULL;
309 }
310
311 static void
312 external_gengrid_params_free(void *params)
313 {
314    Elm_Params_Gengrid *mem = params;
315
316    free(mem);
317 }
318
319 static Edje_External_Param_Info external_gengrid_params[] = {
320     EDJE_EXTERNAL_PARAM_INFO_INT("item size x"),
321     EDJE_EXTERNAL_PARAM_INFO_INT("item size y"),
322     EDJE_EXTERNAL_PARAM_INFO_DOUBLE("align x"),
323     EDJE_EXTERNAL_PARAM_INFO_DOUBLE("align y"),
324     EDJE_EXTERNAL_PARAM_INFO_BOOL("always select"),
325     EDJE_EXTERNAL_PARAM_INFO_BOOL("no select"),
326     EDJE_EXTERNAL_PARAM_INFO_BOOL("multi select"),
327     EDJE_EXTERNAL_PARAM_INFO_BOOL("h bounce"),
328     EDJE_EXTERNAL_PARAM_INFO_BOOL("v bounce"),
329     EDJE_EXTERNAL_PARAM_INFO_BOOL("hirizontal"),
330     EDJE_EXTERNAL_PARAM_INFO_SENTINEL
331 };
332
333 DEFINE_EXTERNAL_ICON_ADD(gengrid, "gengrid");
334 DEFINE_EXTERNAL_TYPE_SIMPLE(gengrid, "Gengrid");
335