5 typedef struct _Elm_Params_Map
8 const char *map_source;
14 static const char *zoom_choices[] = {"manual", "auto fit", "auto fill", NULL};
16 static const char *source_choices[] =
17 {"Mapnik", "Osmarender", "Cycle Map", "Maplint",
18 "Custom 1", "Custom 2", "Custom 3", "Custom 4",
19 "Custom 5", "Custom 6", "Custom 7"};
21 static Elm_Map_Zoom_Mode
22 _zoom_mode_get(const char *map_src)
26 assert(sizeof(zoom_choices)/sizeof(zoom_choices[0]) ==
27 ELM_MAP_ZOOM_MODE_LAST + 1);
29 for (i = 0; i < sizeof(zoom_choices); i++)
30 if (!strcmp(map_src, zoom_choices[i])) return i;
32 return ELM_MAP_ZOOM_MODE_LAST;
35 static Elm_Map_Sources
36 _map_source_get(const char *map_src)
40 assert(sizeof(source_choices)/sizeof(source_choices[0]) ==
43 for (i = 0; i < sizeof(source_choices); i++)
44 if (!strcmp(map_src, source_choices[i])) return i;
46 return ELM_MAP_SOURCE_LAST;
50 external_map_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
52 const Elm_Params_Map *p;
54 if (to_params) p = to_params;
55 else if (from_params) p = from_params;
60 Elm_Map_Sources set = _map_source_get(p->map_source);
61 if (set == ELM_MAP_SOURCE_LAST) return;
62 elm_map_source_set(obj, set);
66 Elm_Map_Zoom_Mode set = _zoom_mode_get(p->zoom_mode);
67 if (set == ELM_MAP_ZOOM_MODE_LAST) return;
68 elm_map_zoom_mode_set(obj, set);
70 if (p->zoom_set) elm_map_zoom_set(obj, p->zoom);
74 external_map_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
76 if (!strcmp(param->name, "map source"))
78 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
80 Elm_Map_Sources set = _map_source_get(param->s);
81 if (set == ELM_MAP_SOURCE_LAST) return EINA_FALSE;
82 elm_map_source_set(obj, set);
86 else if (!strcmp(param->name, "zoom mode"))
88 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
90 Elm_Map_Zoom_Mode set = _zoom_mode_get(param->s);
91 if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE;
92 elm_map_zoom_mode_set(obj, set);
96 else if (!strcmp(param->name, "zoom level"))
98 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
100 elm_map_zoom_set(obj, param->d);
105 ERR("unknown parameter '%s' of type '%s'",
106 param->name, edje_external_param_type_str(param->type));
112 external_map_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
114 if (!strcmp(param->name, "map source"))
116 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
118 Elm_Map_Sources set = elm_map_source_get(obj);
119 if (set == ELM_MAP_SOURCE_LAST) return EINA_FALSE;
120 param->s = source_choices[set];
124 else if (!strcmp(param->name, "zoom mode"))
126 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
128 Elm_Map_Zoom_Mode set = elm_map_zoom_mode_get(obj);
129 if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE;
130 param->s = zoom_choices[set];
134 else if (!strcmp(param->name, "zoom level"))
136 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
138 param->d = elm_map_zoom_get(obj);
143 ERR("unknown parameter '%s' of type '%s'",
144 param->name, edje_external_param_type_str(param->type));
150 external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
153 Edje_External_Param *param;
156 mem = calloc(1, sizeof(Elm_Params_Map));
160 EINA_LIST_FOREACH(params, l, param)
162 if (!strcmp(param->name, "map source"))
163 mem->map_source = eina_stringshare_add(param->s);
164 if (!strcmp(param->name, "zoom mode"))
165 mem->zoom_mode = eina_stringshare_add(param->s);
166 else if (!strcmp(param->name, "zoom level"))
168 mem->zoom = param->d;
169 mem->zoom_set = EINA_TRUE;
176 static Evas_Object *external_map_content_get(void *data __UNUSED__,
177 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
184 external_map_params_free(void *params)
186 Elm_Params_Map *mem = params;
189 eina_stringshare_del(mem->map_source);
191 eina_stringshare_del(mem->zoom_mode);
195 static Edje_External_Param_Info external_map_params[] =
197 DEFINE_EXTERNAL_COMMON_PARAMS,
198 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("map source", "Mapnik",
200 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("zoom mode", "manual", zoom_choices),
201 EDJE_EXTERNAL_PARAM_INFO_DOUBLE("zoom level"),
202 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
205 DEFINE_EXTERNAL_ICON_ADD(map, "map")
206 DEFINE_EXTERNAL_TYPE_SIMPLE(map, "Map")