4 typedef struct _Elm_Params_List
11 Eina_Bool h_mode_exists : 1;
13 Eina_Bool multi_exists : 1;
14 Eina_Bool always_select : 1;
15 Eina_Bool always_select_exists : 1;
18 #define CHOICE_GET(CHOICES, STR) \
20 for (i = 0; i < (sizeof(CHOICES)/sizeof(CHOICES[0])); i++) \
21 if (strcmp(STR, CHOICES[i]) == 0) \
24 static const char *scroller_policy_choices[] = { "auto", "on", "off", NULL };
25 static const char *list_mode_choices[] =
27 "compress", "scroll", "limit", "expand", NULL
30 static Elm_Scroller_Policy
31 _scroller_policy_choices_setting_get(const char *policy_str)
33 assert(sizeof(scroller_policy_choices)/
34 sizeof(scroller_policy_choices[0]) == ELM_SCROLLER_POLICY_LAST + 1);
35 CHOICE_GET(scroller_policy_choices, policy_str);
36 return ELM_SCROLLER_POLICY_LAST;
40 _list_mode_setting_get(const char *mode_str)
42 assert(sizeof(list_mode_choices)/sizeof(list_mode_choices[0]) ==
44 CHOICE_GET(list_mode_choices, mode_str);
49 external_list_state_set(void *data EINA_UNUSED, Evas_Object *obj,
50 const void *from_params, const void *to_params,
51 float pos EINA_UNUSED)
53 const Elm_Params_List *p;
54 Elm_Scroller_Policy policy_h, policy_v;
56 if (to_params) p = to_params;
57 else if (from_params) p = from_params;
62 Elm_List_Mode set = _list_mode_setting_get(p->mode);
64 if (set != ELM_LIST_LAST)
65 elm_list_mode_set(obj, set);
68 if ((p->policy_h) && (p->policy_v))
70 policy_h = _scroller_policy_choices_setting_get(p->policy_h);
71 policy_v = _scroller_policy_choices_setting_get(p->policy_v);
72 elm_scroller_policy_set(obj, policy_h, policy_v);
74 else if ((p->policy_h) || (p->policy_v))
76 elm_scroller_policy_get(obj, &policy_h, &policy_v);
79 policy_h = _scroller_policy_choices_setting_get(p->policy_h);
80 elm_scroller_policy_set(obj, policy_h, policy_v);
84 policy_v = _scroller_policy_choices_setting_get(p->policy_v);
85 elm_scroller_policy_set(obj, policy_h, policy_v);
90 elm_list_horizontal_set(obj, p->h_mode);
92 elm_list_multi_select_set(obj, p->multi);
93 if (p->always_select_exists)
96 elm_list_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
98 elm_list_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT);
103 external_list_param_set(void *data EINA_UNUSED, Evas_Object *obj,
104 const Edje_External_Param *param)
106 if (!strcmp(param->name, "list mode"))
108 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
110 Elm_List_Mode set = _list_mode_setting_get(param->s);
111 if (set == ELM_LIST_LAST) return EINA_FALSE;
112 elm_list_mode_set(obj, set);
116 else if (!strcmp(param->name, "horizontal scroll"))
118 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
120 Elm_Scroller_Policy h, v;
121 elm_scroller_policy_get(obj, &h, &v);
122 h = _scroller_policy_choices_setting_get(param->s);
123 if (h == ELM_SCROLLER_POLICY_LAST) return EINA_FALSE;
124 elm_scroller_policy_set(obj, h, v);
128 else if (!strcmp(param->name, "vertical scroll"))
130 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
132 Elm_Scroller_Policy h, v;
133 elm_scroller_policy_get(obj, &h, &v);
134 v = _scroller_policy_choices_setting_get(param->s);
135 if (v == ELM_SCROLLER_POLICY_LAST) return EINA_FALSE;
136 elm_scroller_policy_set(obj, h, v);
140 else if (!strcmp(param->name, "horizontal mode"))
142 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
144 elm_list_horizontal_set(obj, param->i);
148 else if (!strcmp(param->name, "multi-select mode"))
150 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
152 elm_list_multi_select_set(obj, param->i);
156 else if (!strcmp(param->name, "always-select mode"))
158 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
161 elm_list_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
163 elm_list_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT);
168 ERR("unknown parameter '%s' of type '%s'",
169 param->name, edje_external_param_type_str(param->type));
175 external_list_param_get(void *data EINA_UNUSED, const Evas_Object *obj,
176 Edje_External_Param *param)
178 if (!strcmp(param->name, "horizontal mode"))
180 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
182 param->i = elm_list_horizontal_get(obj);
186 else if (!strcmp(param->name, "multi-select mode"))
188 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
190 param->i = elm_list_multi_select_get(obj);
194 else if (!strcmp(param->name, "always-select mode"))
196 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
198 if (elm_list_select_mode_get (obj) ==
199 ELM_OBJECT_SELECT_MODE_ALWAYS)
200 param->i = EINA_TRUE;
202 param->i = EINA_FALSE;
206 else if (!strcmp(param->name, "horizontal scroll"))
208 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
210 Elm_Scroller_Policy h, v;
211 elm_scroller_policy_get(obj, &h, &v);
213 param->s = scroller_policy_choices[h];
217 else if (!strcmp(param->name, "vertical scroll"))
219 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
221 Elm_Scroller_Policy h, v;
222 elm_scroller_policy_get(obj, &h, &v);
224 param->s = scroller_policy_choices[v];
228 else if (!strcmp(param->name, "list mode"))
230 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
232 Elm_List_Mode m = elm_list_mode_get(obj);
234 if (m == ELM_LIST_LAST)
237 param->s = list_mode_choices[m];
242 ERR("unknown parameter '%s' of type '%s'",
243 param->name, edje_external_param_type_str(param->type));
249 external_list_params_parse(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
250 const Eina_List *params)
252 Elm_Params_List *mem;
253 Edje_External_Param *param;
256 mem = ELM_NEW(Elm_Params_List);
260 EINA_LIST_FOREACH(params, l, param)
262 if (!strcmp(param->name, "horizontal mode"))
264 mem->h_mode = param->i;
265 mem->h_mode_exists = EINA_TRUE;
267 else if (!strcmp(param->name, "multi-select mode"))
269 mem->multi = param->i;
270 mem->multi_exists = EINA_TRUE;
272 else if (!strcmp(param->name, "always-select mode"))
274 mem->always_select = param->i;
275 mem->always_select_exists = EINA_TRUE;
277 else if (!strcmp(param->name, "horizontal scroll"))
278 mem->policy_h = eina_stringshare_add(param->s);
279 else if (!strcmp(param->name, "vertical scroll"))
280 mem->policy_v = eina_stringshare_add(param->s);
281 else if (!strcmp(param->name, "list mode"))
282 mem->mode = eina_stringshare_add(param->s);
287 static Evas_Object *external_list_content_get(void *data EINA_UNUSED,
288 const Evas_Object *obj EINA_UNUSED,
289 const char *content EINA_UNUSED)
296 external_list_params_free(void *params)
298 Elm_Params_List *mem = params;
301 eina_stringshare_del(mem->mode);
303 eina_stringshare_del(mem->policy_h);
305 eina_stringshare_del(mem->policy_v);
310 static Edje_External_Param_Info external_list_params[] = {
311 DEFINE_EXTERNAL_COMMON_PARAMS,
312 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("list mode", "scroll",
314 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("horizontal scroll", "auto",
315 scroller_policy_choices),
316 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("vertical scroll", "auto",
317 scroller_policy_choices),
318 EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal mode"),
319 EDJE_EXTERNAL_PARAM_INFO_BOOL("multi-select mode"),
320 EDJE_EXTERNAL_PARAM_INFO_BOOL("always-select mode"),
321 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
324 DEFINE_EXTERNAL_ICON_ADD(list, "list");
325 DEFINE_EXTERNAL_TYPE_SIMPLE(list, "List");