aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/edje_externals/elm_map.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/elementary/src/edje_externals/elm_map.c185
1 files changed, 185 insertions, 0 deletions
diff --git a/libraries/elementary/src/edje_externals/elm_map.c b/libraries/elementary/src/edje_externals/elm_map.c
new file mode 100644
index 0000000..11c0ece
--- /dev/null
+++ b/libraries/elementary/src/edje_externals/elm_map.c
@@ -0,0 +1,185 @@
1#include <assert.h>
2
3#include "private.h"
4
5typedef struct _Elm_Params_Map
6{
7 Elm_Params base;
8 const char *map_source;
9 const char *zoom_mode;
10 double zoom;
11 Eina_Bool zoom_set:1;
12} Elm_Params_Map;
13
14static const char *zoom_choices[] = {"manual", "auto fit", "auto fill", NULL};
15
16static const char *source_choices[] =
17 {"Mapnik", "Osmarender", "CycleMap", "Maplint"};
18
19static Elm_Map_Zoom_Mode
20_zoom_mode_get(const char *map_src)
21{
22 unsigned int i;
23
24 assert(sizeof(zoom_choices)/sizeof(zoom_choices[0]) ==
25 ELM_MAP_ZOOM_MODE_LAST + 1);
26
27 for (i = 0; i < ELM_MAP_ZOOM_MODE_LAST; i++)
28 if (!strcmp(map_src, zoom_choices[i])) return i;
29
30 return ELM_MAP_ZOOM_MODE_LAST;
31}
32
33static void
34external_map_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
35{
36 const Elm_Params_Map *p;
37
38 if (to_params) p = to_params;
39 else if (from_params) p = from_params;
40 else return;
41
42 if (p->map_source)
43 {
44 elm_map_source_set(obj, ELM_MAP_SOURCE_TYPE_TILE, p->map_source);
45 }
46 if (p->zoom_mode)
47 {
48 Elm_Map_Zoom_Mode set = _zoom_mode_get(p->zoom_mode);
49 if (set == ELM_MAP_ZOOM_MODE_LAST) return;
50 elm_map_zoom_mode_set(obj, set);
51 }
52 if (p->zoom_set) elm_map_zoom_set(obj, p->zoom);
53}
54
55static Eina_Bool
56external_map_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
57{
58 if (!strcmp(param->name, "map source"))
59 {
60 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
61 {
62 elm_map_source_set(obj, ELM_MAP_SOURCE_TYPE_TILE, param->s);
63 return EINA_TRUE;
64 }
65 }
66 else if (!strcmp(param->name, "zoom mode"))
67 {
68 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
69 {
70 Elm_Map_Zoom_Mode set = _zoom_mode_get(param->s);
71 if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE;
72 elm_map_zoom_mode_set(obj, set);
73 return EINA_TRUE;
74 }
75 }
76 else if (!strcmp(param->name, "zoom level"))
77 {
78 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
79 {
80 elm_map_zoom_set(obj, param->d);
81 return EINA_TRUE;
82 }
83 }
84
85 ERR("unknown parameter '%s' of type '%s'",
86 param->name, edje_external_param_type_str(param->type));
87
88 return EINA_FALSE;
89}
90
91static Eina_Bool
92external_map_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
93{
94 if (!strcmp(param->name, "map source"))
95 {
96 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
97 {
98 const char *set = elm_map_source_get(obj, ELM_MAP_SOURCE_TYPE_TILE);
99 param->s = set;
100 return EINA_TRUE;
101 }
102 }
103 else if (!strcmp(param->name, "zoom mode"))
104 {
105 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
106 {
107 Elm_Map_Zoom_Mode set = elm_map_zoom_mode_get(obj);
108 if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE;
109 param->s = zoom_choices[set];
110 return EINA_TRUE;
111 }
112 }
113 else if (!strcmp(param->name, "zoom level"))
114 {
115 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
116 {
117 param->d = elm_map_zoom_get(obj);
118 return EINA_TRUE;
119 }
120 }
121
122 ERR("unknown parameter '%s' of type '%s'",
123 param->name, edje_external_param_type_str(param->type));
124
125 return EINA_FALSE;
126}
127
128static void *
129external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
130{
131 Elm_Params_Map *mem;
132 Edje_External_Param *param;
133 const Eina_List *l;
134
135 mem = calloc(1, sizeof(Elm_Params_Map));
136 if (!mem)
137 return NULL;
138
139 EINA_LIST_FOREACH(params, l, param)
140 {
141 if (!strcmp(param->name, "map source"))
142 mem->map_source = eina_stringshare_add(param->s);
143 if (!strcmp(param->name, "zoom mode"))
144 mem->zoom_mode = eina_stringshare_add(param->s);
145 else if (!strcmp(param->name, "zoom level"))
146 {
147 mem->zoom = param->d;
148 mem->zoom_set = EINA_TRUE;
149 }
150 }
151
152 return mem;
153}
154
155static Evas_Object *external_map_content_get(void *data __UNUSED__,
156 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
157{
158 ERR("No content.");
159 return NULL;
160}
161
162static void
163external_map_params_free(void *params)
164{
165 Elm_Params_Map *mem = params;
166
167 if (mem->map_source)
168 eina_stringshare_del(mem->map_source);
169 if (mem->zoom_mode)
170 eina_stringshare_del(mem->zoom_mode);
171 free(mem);
172}
173
174static Edje_External_Param_Info external_map_params[] =
175 {
176 DEFINE_EXTERNAL_COMMON_PARAMS,
177 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("map source", "Mapnik", source_choices),
178 EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("zoom mode", "manual", zoom_choices),
179 EDJE_EXTERNAL_PARAM_INFO_DOUBLE("zoom level"),
180 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
181 };
182
183DEFINE_EXTERNAL_ICON_ADD(map, "map")
184DEFINE_EXTERNAL_TYPE_SIMPLE(map, "Map")
185