diff options
author | Cedric BAIL <cedric@osg.samsung.com> | 2016-03-23 12:56:14 -0700 |
---|---|---|
committer | Cedric BAIL <cedric@osg.samsung.com> | 2016-03-23 13:24:41 -0700 |
commit | c2a1c49ab2042f559b28e840e54feb8494888e0e (patch) | |
tree | c6eb110b7c479499854eede9d0c3ab0a80c9a11a /src/lib/elementary/elm_widget_map.h | |
parent | 9340855597e7e465435c69b6278650346688da14 (diff) | |
download | efl-c2a1c49ab2042f559b28e840e54feb8494888e0e.tar.gz |
elementary: move all legacy files to their expected new location.
Diffstat (limited to 'src/lib/elementary/elm_widget_map.h')
-rw-r--r-- | src/lib/elementary/elm_widget_map.h | 534 |
1 files changed, 534 insertions, 0 deletions
diff --git a/src/lib/elementary/elm_widget_map.h b/src/lib/elementary/elm_widget_map.h new file mode 100644 index 0000000000..b9e96eafe8 --- /dev/null +++ b/src/lib/elementary/elm_widget_map.h @@ -0,0 +1,534 @@ +#ifndef ELM_WIDGET_MAP_H +#define ELM_WIDGET_MAP_H + +#include "Elementary.h" + +/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR + * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT + * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK + * IT AT RUNTIME. + */ + +/** + * @addtogroup Widget + * @{ + * + * @section elm-map-class The Elementary Map Class + * + * Elementary, besides having the @ref Map widget, exposes its + * foundation -- the Elementary Map Class -- in order to create + * other widgets which are a map with some more logic on top. + */ + +/** + * Base widget smart data extended with map instance data. + */ +typedef struct _Elm_Map_Data Elm_Map_Data; + +typedef struct _Elm_Map_Name_List Elm_Map_Name_List; +typedef Eina_Stringshare *(*Elm_Map_Module_Source_Name_Func)(void); +typedef int (*Elm_Map_Module_Tile_Zoom_Min_Func)(void); +typedef int (*Elm_Map_Module_Tile_Zoom_Max_Func)(void); +typedef char *(*Elm_Map_Module_Tile_Url_Func)(const Evas_Object *, + int, + int, + int); +typedef Eina_Bool (*Elm_Map_Module_Tile_Geo_to_Coord_Func)(const Evas_Object *, + int, + double, + double, + int, + int *, + int *); +typedef Eina_Bool (*Elm_Map_Module_Tile_Coord_to_Geo_Func)(const Evas_Object *, + int, + int, + int, + int, + double *, + double *); +typedef double (*Elm_Map_Module_Tile_Scale_Func)(const Evas_Object *, + double, + double, + int); +typedef char *(*Elm_Map_Module_Route_Url_Func)(const Evas_Object *, + const char *, + int, + double, + double, + double, + double); +typedef void (*Elm_Map_Module_Route_Parse_Func)(Elm_Map_Route *); +typedef char *(*Elm_Map_Module_Name_Url_Func)(const Evas_Object *, + int, + const char *, + double, + double); +typedef void (*Elm_Map_Module_Name_Parse_Func)(Elm_Map_Name *n); +typedef void (*Elm_Map_Module_Name_List_Parse_Func)(Elm_Map_Name_List *nl); + +typedef struct _Source_Tile Source_Tile; +// FIXME: Currently tile size must be 256*256 +// and the map size is pow(2.0, z) * (tile size) +struct _Source_Tile +{ + Eina_Stringshare *name; + int zoom_min; + int zoom_max; + Elm_Map_Module_Tile_Url_Func url_cb; + Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord; + Elm_Map_Module_Tile_Coord_to_Geo_Func coord_to_geo; + Elm_Map_Module_Tile_Scale_Func scale_cb; +}; + +typedef struct _Source_Route Source_Route; +struct _Source_Route +{ + Eina_Stringshare *name; + Elm_Map_Module_Route_Url_Func url_cb; + Elm_Map_Module_Route_Parse_Func route_parse_cb; +}; + +typedef struct _Source_Name Source_Name; +struct _Source_Name +{ + Eina_Stringshare *name; + Elm_Map_Module_Name_Url_Func url_cb; + Elm_Map_Module_Name_Parse_Func name_parse_cb; + Elm_Map_Module_Name_List_Parse_Func name_list_parse_cb; +}; + +typedef struct _Path Path; +typedef struct _Color Color; +typedef struct _Region Region; +typedef struct _Grid Grid; +typedef struct _Grid_Item Grid_Item; +typedef struct _Overlay_Default Overlay_Default; +typedef struct _Overlay_Class Overlay_Class; +typedef struct _Overlay_Group Overlay_Group; +typedef struct _Overlay_Bubble Overlay_Bubble; +typedef struct _Overlay_Route Overlay_Route; +typedef struct _Overlay_Line Overlay_Line; +typedef struct _Overlay_Polygon Overlay_Polygon; +typedef struct _Overlay_Circle Overlay_Circle; +typedef struct _Overlay_Scale Overlay_Scale; +typedef struct _Path_Node Path_Node; +typedef struct _Path_Waypoint Path_Waypoint; +typedef struct _Route_Dump Route_Dump; +typedef struct _Name_Dump Name_Dump; +typedef struct _Calc_Job Calc_Job; + +enum _Route_Xml_Attribute +{ + ROUTE_XML_NONE, + ROUTE_XML_DISTANCE, + ROUTE_XML_DESCRIPTION, + ROUTE_XML_COORDINATES, + ROUTE_XML_LAST +} Route_Xml_Attibute; + +enum _Name_Xml_Attribute +{ + NAME_XML_NONE, + NAME_XML_NAME, + NAME_XML_LON, + NAME_XML_LAT, + NAME_XML_LAST +} Name_Xml_Attibute; + +enum _Track_Xml_Attribute +{ + TRACK_XML_NONE, + TRACK_XML_COORDINATES, + TRACK_XML_LAST +} Track_Xml_Attibute; + +struct _Path +{ + Evas_Coord x, y; +}; + +struct _Region +{ + double lon, lat; +}; + +struct _Color +{ + int r, g, b, a; +}; + +struct _Overlay_Group +{ + Elm_Map_Data *wsd; + double lon, lat; + Elm_Map_Overlay *overlay; // virtual group type overlay + Elm_Map_Overlay *klass; // class overlay for this virtual group + Overlay_Default *ovl; // rendered overlay + Eina_List *members; + Eina_Bool in : 1; + Eina_Bool boss : 1; +}; + +struct _Overlay_Default +{ + Elm_Map_Data *wsd; + Evas_Coord w, h; + + double lon, lat; + Evas_Coord x, y; + + // Display priority is content > icon > clas_obj > clas_icon > layout + Evas_Object *content; + Evas_Object *icon; + + Color c; + // if clas_content or icon exists, do not inherit from class + Evas_Object *clas_content; // Duplicated from class content + Evas_Object *clas_icon; // Duplicated from class icon + Evas_Object *layout; +}; + +struct _Overlay_Class +{ + Elm_Map_Data *wsd; + Eina_List *members; + int zoom_max; + Evas_Object *content; + Evas_Object *icon; +}; + +struct _Overlay_Bubble +{ + Elm_Map_Data *wsd; + Evas_Object *pobj; + Evas_Object *obj, *sc, *bx; + double lon, lat; + Evas_Coord x, y, w, h; +}; + +struct _Overlay_Route +{ + Elm_Map_Data *wsd; + + Evas_Object *obj; + Eina_List *paths; + Eina_List *nodes; +}; + +struct _Overlay_Line +{ + Elm_Map_Data *wsd; + double flon, flat, tlon, tlat; + Evas_Object *obj; +}; + +struct _Overlay_Polygon +{ + Elm_Map_Data *wsd; + Eina_List *regions; // list of Regions + Evas_Object *obj; +}; + +struct _Overlay_Circle +{ + Elm_Map_Data *wsd; + double lon, lat; + double radius; // Initial pixel in initial view + double ratio; // initial-radius/map-size + Evas_Object *obj; +}; + +struct _Overlay_Scale +{ + Elm_Map_Data *wsd; + Evas_Coord x, y; + Evas_Coord w, h; + Evas_Object *obj; +}; + +struct _Elm_Map_Overlay +{ + Elm_Map_Data *wsd; + + Evas_Coord zoom_min; + Color c; + void *data; // user set data + + Elm_Map_Overlay_Type type; + void *ovl; // Overlay Data for each type + + Elm_Map_Overlay_Get_Cb cb; + void *cb_data; + + Elm_Map_Overlay_Del_Cb del_cb; + void *del_cb_data; + + // These are not used if overlay type is class or group + Overlay_Group *grp; + + Eina_Bool visible : 1; + Eina_Bool paused : 1; + Eina_Bool hide : 1; +}; + +struct _Elm_Map_Route +{ + Elm_Map_Data *wsd; + + char *fname; + Elm_Map_Route_Type type; + Elm_Map_Route_Method method; + double flon, flat, tlon, tlat; + Elm_Map_Route_Cb cb; + void *data; + Ecore_File_Download_Job *job; + + Eina_List *nodes; + Eina_List *waypoint; + struct + { + int node_count; + int waypoint_count; + const char *nodes; + const char *waypoints; + double distance; /* unit : km */ + } info; + + Path_Node *n; + Path_Waypoint *w; +}; + +struct _Path_Node +{ + Elm_Map_Data *wsd; + + int idx; + struct + { + double lon, lat; + char *address; + } pos; +}; + +struct _Path_Waypoint +{ + Elm_Map_Data *wsd; + + const char *point; +}; + +struct _Elm_Map_Name +{ + Elm_Map_Data *wsd; + + int method; + char *address; + double lon, lat; + + char *fname; + Ecore_File_Download_Job *job; + Elm_Map_Name_Cb cb; + void *data; +}; + +struct _Elm_Map_Name_List +{ + Elm_Map_Data *wsd; + + Eina_List *names; + double lon, lat; + + char *fname; + Ecore_File_Download_Job *job; + Elm_Map_Name_List_Cb cb; + void *data; +}; + +struct _Route_Dump +{ + int id; + char *fname; + double distance; + char *description; + char *coordinates; +}; + +struct _Name_Dump +{ + int id; + char *address; + double lon; + double lat; +}; + +struct _Grid_Item +{ + Grid *g; + + Elm_Map_Data *wsd; + Evas_Object *img; + const char *file; + const char *url; + int x, y; // Tile coordinate + + Ecore_File_Download_Job *job; + + Eina_Bool file_have : 1; +}; + +struct _Grid +{ + Elm_Map_Data *wsd; + int zoom; /* zoom level tiles want for optimal + * display (1, 2, 4, 8) */ + int tw, th; // size of grid in tiles + Eina_Matrixsparse *grid; +}; + +struct _Calc_Job +{ + double zoom; + void (*zoom_mode_set)(Elm_Map_Data *sd, double zoom); + + Eina_Bool bring_in : 1; + double lon, lat; + void (*region_show_bring_in)(Elm_Map_Data *sd, double lon, + double lat, Eina_Bool bring_in); + + Eina_List *overlays; + void (*overlays_show)(Elm_Map_Data *sd, Eina_List *overlays); +}; + +struct _Elm_Map_Data +{ + Evas_Object *hit_rect; + Evas_Object *pan_obj; + Evas_Object *g_layer; + Evas_Object *obj; // The object itself + + /* Tiles are below this and overlays are on top */ + Evas_Object *sep_maps_overlays; + Evas_Map *map; + + Eina_Array *src_mods; + + Source_Tile *src_tile; + Eina_List *src_tiles; + const char **src_tile_names; + + Source_Route *src_route; + Eina_List *src_routes; + const char **src_route_names; + + Source_Name *src_name; + Eina_List *src_names; + const char **src_name_names; + + Eina_List *grids; + + int zoom_min, zoom_max; + int tsize; + int id; + int zoom; + + double zoom_detail; + struct + { + int w, h; // Current pixel width, heigth of a grid + int tile; // Current pixel size of a grid item + } size; + + Elm_Map_Zoom_Mode mode; + + struct + { + double zoom; + double zoom_diff; + double lon, lat; + double lon_diff, lat_diff; + int zoom_cnt; + int region_cnt; + } ani; + + Ecore_Timer *zoom_timer; + Ecore_Timer *loaded_timer; + + int try_num; + int finish_num; + int download_num; + + Eina_List *download_list; + Ecore_Idler *download_idler; + Eina_Hash *ua; + const char *user_agent; + + Evas_Coord pan_x, pan_y; + + Ecore_Timer *scr_timer; + Ecore_Timer *long_timer; + Evas_Event_Mouse_Down ev; + + double pinch_zoom; + struct + { + Evas_Coord cx, cy; + double a, d; + } rotate; + + Eina_List *routes; + Eina_List *track; + Eina_List *names; + + Eina_List *overlays; + Eina_List *group_overlays; + Eina_List *all_overlays; + + Eina_Bool wheel_disabled : 1; + Eina_Bool on_hold : 1; + Eina_Bool paused : 1; + Eina_Bool zoom_animator : 1; + + Calc_Job calc_job; +}; + +typedef struct _Elm_Map_Pan_Data Elm_Map_Pan_Data; +struct _Elm_Map_Pan_Data +{ + Evas_Object *wobj; + Elm_Map_Data *wsd; +}; + +/** + * @} + */ + +#define ELM_MAP_DATA_GET(o, sd) \ + Elm_Map_Data * sd = eo_data_scope_get(o, ELM_MAP_CLASS) + +#define ELM_MAP_PAN_DATA_GET(o, sd) \ + Elm_Map_Pan_Data * sd = eo_data_scope_get(o, ELM_MAP_PAN_CLASS) + +#define ELM_MAP_DATA_GET_OR_RETURN(o, ptr) \ + ELM_MAP_DATA_GET(o, ptr); \ + if (EINA_UNLIKELY(!ptr)) \ + { \ + CRI("No widget data for object %p (%s)", \ + o, evas_object_type_get(o)); \ + return; \ + } + +#define ELM_MAP_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ + ELM_MAP_DATA_GET(o, ptr); \ + if (EINA_UNLIKELY(!ptr)) \ + { \ + CRI("No widget data for object %p (%s)", \ + o, evas_object_type_get(o)); \ + return val; \ + } + +#define ELM_MAP_CHECK(obj) \ + if (EINA_UNLIKELY(!eo_isa((obj), ELM_MAP_CLASS))) \ + return + +#endif |