5 typedef struct _Elm_Params_List
9 const char *horizontal_mode;
11 Eina_Bool multi_exists : 1;
12 Eina_Bool always_select : 1;
13 Eina_Bool always_select_exists : 1;
16 #define CHOICE_GET(CHOICES, STR) \
18 for (i = 0; i < sizeof(CHOICES); i++) \
19 if (strcmp(STR, CHOICES[i]) == 0) \
22 static const char *scroller_policy_choices[] = {"auto", "on", "off", NULL};
23 static const char *list_horizontal_mode_choices[] = {"compress", "scroll",
26 static Elm_Scroller_Policy
27 _scroller_policy_choices_setting_get(const char *policy_str)
29 assert(sizeof(scroller_policy_choices)/
30 sizeof(scroller_policy_choices[0]) == ELM_SCROLLER_POLICY_LAST + 1);
31 CHOICE_GET(scroller_policy_choices, policy_str);
32 return ELM_SCROLLER_POLICY_LAST;
36 _list_horizontal_mode_setting_get(const char *horizontal_mode_str)
38 assert(sizeof(list_horizontal_mode_choices)/
39 sizeof(list_horizontal_mode_choices[0]) == ELM_LIST_LAST + 1);
40 CHOICE_GET(list_horizontal_mode_choices, horizontal_mode_str);
46 external_list_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
48 const Elm_Params_List *p;
49 Elm_Scroller_Policy policy_h, policy_v;
51 if (to_params) p = to_params;
52 else if (from_params) p = from_params;
55 if (p->horizontal_mode)
57 Elm_List_Mode set = _list_horizontal_mode_setting_get(
60 if (set != ELM_LIST_LAST)
61 elm_list_horizontal_mode_set(obj, set);
64 if ((p->policy_h) && (p->policy_v))
66 policy_h = _scroller_policy_choices_setting_get(p->policy_h);
67 policy_v = _scroller_policy_choices_setting_get(p->policy_v);
68 elm_list_scroller_policy_set(obj, policy_h, policy_v);
70 else if ((p->policy_h) || (p->policy_v))
72 elm_list_scroller_policy_get(obj, &policy_h, &policy_v);
75 policy_h = _scroller_policy_choices_setting_get(p->policy_h);
76 elm_list_scroller_policy_set(obj, policy_h, policy_v);
80 policy_v = _scroller_policy_choices_setting_get(p->policy_v);
81 elm_list_scroller_policy_set(obj, policy_h, policy_v);
86 elm_list_multi_select_set(obj, p->multi);
87 if (p->always_select_exists)
88 elm_list_always_select_mode_set(obj, p->always_select);
92 external_list_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
94 if (!strcmp(param->name, "horizontal mode"))
96 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
98 Elm_List_Mode set = _list_horizontal_mode_setting_get(param->s);
99 if (set == ELM_LIST_LAST) return EINA_FALSE;
100 elm_list_horizontal_mode_set(obj, set);
104 else if (!strcmp(param->name, "scroll horizontal"))
106 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
108 Elm_Scroller_Policy h, v;
109 elm_list_scroller_policy_get(obj, &h, &v);
110 h = _scroller_policy_choices_setting_get(param->s);
111 if (h == ELM_SCROLLER_POLICY_LAST) return EINA_FALSE;
112 elm_list_scroller_policy_set(obj, h, v);
116 else if (!strcmp(param->name, "scroll vertical"))
118 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
120 Elm_Scroller_Policy h, v;
121 elm_list_scroller_policy_get(obj, &h, &v);
122 v = _scroller_policy_choices_setting_get(param->s);
123 if (v == ELM_SCROLLER_POLICY_LAST) return EINA_FALSE;
124 elm_list_scroller_policy_set(obj, h, v);
128 else if (!strcmp(param->name, "multi"))
130 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
132 elm_list_multi_select_set(obj, param->i);
136 else if (!strcmp(param->name, "always_select"))
138 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
140 elm_list_always_select_mode_set(obj, param->i);
145 ERR("unknown parameter '%s' of type '%s'",
146 param->name, edje_external_param_type_str(param->type));
152 external_list_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
154 if (!strcmp(param->name, "multi"))
156 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
158 param->i = elm_list_multi_select_get(obj);
162 else if (!strcmp(param->name, "always_select"))
164 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
166 param->i = elm_list_always_select_mode_get(obj);
170 else if (!strcmp(param->name, "scroll horizontal"))
172 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
174 Elm_Scroller_Policy h, v;
175 elm_list_scroller_policy_get(obj, &h, &v);
177 param->s = scroller_policy_choices[h];
181 else if (!strcmp(param->name, "scroll vertical"))
183 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
185 Elm_Scroller_Policy h, v;
186 elm_list_scroller_policy_get(obj, &h, &v);
188 param->s = scroller_policy_choices[v];
192 else if (!strcmp(param->name, "horizontal mode"))
194 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
196 Elm_List_Mode m = elm_list_horizontal_mode_get(obj);
198 if (m == ELM_LIST_LAST)
201 param->s = list_horizontal_mode_choices[m];
206 ERR("unknown parameter '%s' of type '%s'",
207 param->name, edje_external_param_type_str(param->type));
213 external_list_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
215 Elm_Params_List *mem;
216 Edje_External_Param *param;
219 mem = calloc(1, sizeof(Elm_Params_List));
223 EINA_LIST_FOREACH(params, l, param)
225 if (!strcmp(param->name, "multi"))
227 mem->multi = param->i;
228 mem->multi_exists = EINA_TRUE;
230 else if (!strcmp(param->name, "always_select"))
232 mem->always_select = param->i;
233 mem->always_select_exists = EINA_TRUE;
235 else if (!strcmp(param->name, "scroll horizontal"))
236 mem->policy_h = eina_stringshare_add(param->s);
237 else if (!strcmp(param->name, "scroll vertical"))
238 mem->policy_v = eina_stringshare_add(param->s);
239 else if (!strcmp(param->name, "horizontal mode"))
240 mem->horizontal_mode = eina_stringshare_add(param->s);
245 static Evas_Object *external_list_content_get(void *data __UNUSED__,
246 const Evas_Object *obj, const char *content)
253 external_list_params_free(void *params)
255 Elm_Params_List *mem = params;
257 if (mem->horizontal_mode)
258 eina_stringshare_del(mem->horizontal_mode);
260 eina_stringshare_del(mem->policy_h);
262 eina_stringshare_del(mem->policy_v);
267 static Edje_External_Param_Info external_list_params[] = {
268 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("horizontal mode", "scroll",
269 list_horizontal_mode_choices),
270 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("scroll horizontal", "auto",
271 scroller_policy_choices),
272 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("scroll vertical", "auto",
273 scroller_policy_choices),
274 EDJE_EXTERNAL_PARAM_INFO_BOOL("multi"),
275 EDJE_EXTERNAL_PARAM_INFO_BOOL("always_select"),
276 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
279 DEFINE_EXTERNAL_ICON_ADD(list, "list")
280 DEFINE_EXTERNAL_TYPE_SIMPLE(list, "List");