summaryrefslogtreecommitdiff
path: root/src/lib/elementary/elm_widget_map.h
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2016-03-23 12:56:14 -0700
committerCedric BAIL <cedric@osg.samsung.com>2016-03-23 13:24:41 -0700
commitc2a1c49ab2042f559b28e840e54feb8494888e0e (patch)
treec6eb110b7c479499854eede9d0c3ab0a80c9a11a /src/lib/elementary/elm_widget_map.h
parent9340855597e7e465435c69b6278650346688da14 (diff)
downloadefl-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.h534
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