diff --git a/legacy/elementary/data/edje_externals/Makefile.am b/legacy/elementary/data/edje_externals/Makefile.am index bdbe895bd0..3d1e16e80d 100644 --- a/legacy/elementary/data/edje_externals/Makefile.am +++ b/legacy/elementary/data/edje_externals/Makefile.am @@ -17,6 +17,7 @@ ico_check.png \ ico_clock.png \ ico_fileselector.png \ ico_hoversel.png \ +ico_map.png \ ico_notepad.png \ ico_photocam.png \ ico_progressbar.png \ diff --git a/legacy/elementary/data/edje_externals/ico_map.png b/legacy/elementary/data/edje_externals/ico_map.png new file mode 100644 index 0000000000..1c8ca8b22e Binary files /dev/null and b/legacy/elementary/data/edje_externals/ico_map.png differ diff --git a/legacy/elementary/data/edje_externals/icons.edc b/legacy/elementary/data/edje_externals/icons.edc index 7c8be543bb..b3541c1051 100644 --- a/legacy/elementary/data/edje_externals/icons.edc +++ b/legacy/elementary/data/edje_externals/icons.edc @@ -18,6 +18,7 @@ ICON("check") ICON("clock") ICON("fileselector") ICON("hoversel") +ICON("map") ICON("notepad") ICON("photocam") ICON("progressbar") diff --git a/legacy/elementary/src/edje_externals/Makefile.am b/legacy/elementary/src/edje_externals/Makefile.am index 6aee74c308..f734ec74cb 100644 --- a/legacy/elementary/src/edje_externals/Makefile.am +++ b/legacy/elementary/src/edje_externals/Makefile.am @@ -34,6 +34,7 @@ elm_check.c \ elm_clock.c \ elm_fileselector.c \ elm_hoversel.c \ +elm_map.c \ elm_notepad.c \ elm_photocam.c \ elm_progressbar.c \ diff --git a/legacy/elementary/src/edje_externals/elm_map.c b/legacy/elementary/src/edje_externals/elm_map.c new file mode 100644 index 0000000000..beae4a4676 --- /dev/null +++ b/legacy/elementary/src/edje_externals/elm_map.c @@ -0,0 +1,198 @@ +#include + +#include "private.h" + +typedef struct _Elm_Params_Map +{ + const char *map_source; + const char *zoom_mode; + double zoom; + Eina_Bool zoom_set:1; +} Elm_Params_Map; + +static const char *zoom_choices[] = {"manual", "auto fit", "auto fill"}; + +static const char *source_choices[] = + {"Mapnik", "Osmarender", "Cycle Map", "Maplint", + "Custom 1", "Custom 2", "Custom 3", "Custom 4", + "Custom 5", "Custom 6", "Custom 7"}; + +static Elm_Map_Zoom_Mode +_zoom_mode_get(const char *map_src) +{ + unsigned int i; + + assert(sizeof(zoom_choices)/sizeof(zoom_choices[0]) == + ELM_MAP_ZOOM_MODE_LAST); + + for (i = 0; i < sizeof(zoom_choices); i++) + if (strcmp(map_src, zoom_choices[i]) == 0) return i; + + return ELM_MAP_ZOOM_MODE_LAST; +} + +static Elm_Map_Sources +_map_source_get(const char *map_src) +{ + unsigned int i; + + assert(sizeof(source_choices)/sizeof(source_choices[0]) == + ELM_MAP_SOURCE_LAST); + + for (i = 0; i < sizeof(source_choices); i++) + if (strcmp(map_src, source_choices[i]) == 0) return i; + + return ELM_MAP_SOURCE_LAST; +} + +static void +external_map_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Map *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->map_source) + { + Elm_Map_Sources set = _map_source_get(p->map_source); + if (set == ELM_MAP_SOURCE_LAST) return; + elm_map_source_set(obj, set); + } + if (p->zoom_mode) + { + Elm_Map_Zoom_Mode set = _zoom_mode_get(p->zoom_mode); + if (set == ELM_MAP_ZOOM_MODE_LAST) return; + elm_map_zoom_mode_set(obj, set); + } + if (p->zoom_set && p->zoom) elm_map_zoom_set(obj, p->zoom); +} + +static Eina_Bool +external_map_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "map source")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Map_Sources set = _map_source_get(param->s); + if (set == ELM_MAP_SOURCE_LAST) return EINA_FALSE; + elm_map_source_set(obj, set); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "zoom mode")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Map_Zoom_Mode set = _zoom_mode_get(param->s); + if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE; + elm_map_zoom_mode_set(obj, set); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "zoom level")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_map_zoom_set(obj, param->d); + return EINA_TRUE; + } + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static Eina_Bool +external_map_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +{ + if (!strcmp(param->name, "map source")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Map_Sources set = elm_map_source_get(obj); + if (set == ELM_MAP_SOURCE_LAST) return EINA_FALSE; + param->s = source_choices[set]; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "zoom mode")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Map_Zoom_Mode set = elm_map_zoom_mode_get(obj); + if (set == ELM_MAP_ZOOM_MODE_LAST) return EINA_FALSE; + param->s = zoom_choices[set]; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "zoom level")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_map_zoom_get(obj); + return EINA_TRUE; + } + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static void * +external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) +{ + Elm_Params_Map *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = calloc(1, sizeof(Elm_Params_Map)); + if (!mem) + return NULL; + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "map source")) + mem->map_source = eina_stringshare_add(param->s); + if (!strcmp(param->name, "zoom mode")) + mem->zoom_mode = eina_stringshare_add(param->s); + else if (!strcmp(param->name, "zoom level")) + { + mem->zoom = param->d; + mem->zoom_set = EINA_TRUE; + } + } + + return mem; +} + +static void +external_map_params_free(void *params) +{ + Elm_Params_Map *mem = params; + + if (mem->map_source) + eina_stringshare_del(mem->map_source); + if (mem->zoom_mode) + eina_stringshare_del(mem->zoom_mode); + free(mem); +} + +static Edje_External_Param_Info external_map_params[] = + { + EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("map source", "Mapnik", + source_choices), + EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("zoom mode", "manual", zoom_choices), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE("zoom level"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL + }; + +DEFINE_EXTERNAL_ICON_ADD(map, "map") +DEFINE_EXTERNAL_TYPE_SIMPLE(map, "Map") + diff --git a/legacy/elementary/src/edje_externals/modules.inc b/legacy/elementary/src/edje_externals/modules.inc index 3f171a145f..00ec4d04d7 100644 --- a/legacy/elementary/src/edje_externals/modules.inc +++ b/legacy/elementary/src/edje_externals/modules.inc @@ -6,6 +6,7 @@ DEFINE_TYPE(check) DEFINE_TYPE(clock) DEFINE_TYPE(fileselector) DEFINE_TYPE(hoversel) +DEFINE_TYPE(map) DEFINE_TYPE(notepad) DEFINE_TYPE(photocam) DEFINE_TYPE(progressbar) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index c0373b6c86..8a26526ac9 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -1168,8 +1168,10 @@ extern "C" { { ELM_MAP_ZOOM_MODE_MANUAL, ELM_MAP_ZOOM_MODE_AUTO_FIT, - ELM_MAP_ZOOM_MODE_AUTO_FILL + ELM_MAP_ZOOM_MODE_AUTO_FILL, + ELM_MAP_ZOOM_MODE_LAST } Elm_Map_Zoom_Mode; + typedef enum _Elm_Map_Sources { ELM_MAP_SOURCE_MAPNIK, @@ -1182,8 +1184,10 @@ extern "C" { ELM_MAP_SOURCE_CUSTOM_4, ELM_MAP_SOURCE_CUSTOM_5, ELM_MAP_SOURCE_CUSTOM_6, - ELM_MAP_SOURCE_CUSTOM_7 + ELM_MAP_SOURCE_CUSTOM_7, + ELM_MAP_SOURCE_LAST } Elm_Map_Sources; + typedef struct _Elm_Map_Marker Elm_Map_Marker; typedef struct _Elm_Map_Marker_Class Elm_Map_Marker_Class; typedef struct _Elm_Map_Group_Class Elm_Map_Group_Class;