tizen 2.4 release
[framework/uifw/elementary.git] / src / lib / elm_widget_route.h
1 #ifndef ELM_WIDGET_ROUTE_H
2 #define ELM_WIDGET_ROUTE_H
3
4 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
5  * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
6  * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
7  * IT AT RUNTIME.
8  */
9
10 /**
11  * @internal
12  * @addtogroup Widget
13  * @{
14  *
15  * @section elm-route-class The Elementary Route Class
16  *
17  * Elementary, besides having the @ref Route widget, exposes its
18  * foundation -- the Elementary Route Class -- in order to create other
19  * widgets which are a route with some more logic on top.
20  */
21
22 /**
23  * Base widget smart data extended with route instance data.
24  */
25 typedef struct _Elm_Route_Data       Elm_Route_Data;
26 typedef struct Segment               Segment;
27
28 struct _Elm_Route_Data
29 {
30 #ifdef ELM_EMAP
31    EMap_Route           *emap;
32 #endif
33
34    double                lon_min, lon_max;
35    double                lat_min, lat_max;
36
37    Eina_List            *segments; //list of *Segment
38
39    Eina_Bool             must_calc_segments : 1;
40 };
41
42 struct Segment
43 {
44    Evas_Object     *obj;
45
46 #ifdef ELM_EMAP
47    EMap_Route_Node *node_start;
48    EMap_Route_Node *node_end;
49 #endif
50
51    double           start_x, start_y;
52    double           end_x, end_y;
53
54    Eina_Bool        must_calc : 1;
55 };
56 /**
57  * @}
58  */
59
60 #define ELM_ROUTE_DATA_GET(o, sd) \
61   Elm_Route_Data * sd = eo_data_scope_get(o, ELM_ROUTE_CLASS)
62
63 #define ELM_ROUTE_DATA_GET_OR_RETURN(o, ptr)         \
64   ELM_ROUTE_DATA_GET(o, ptr);                        \
65   if (EINA_UNLIKELY(!ptr))                           \
66     {                                                \
67        CRI("No widget data for object %p (%s)",      \
68            o, evas_object_type_get(o));              \
69        return;                                       \
70     }
71
72 #define ELM_ROUTE_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
73   ELM_ROUTE_DATA_GET(o, ptr);                         \
74   if (EINA_UNLIKELY(!ptr))                            \
75     {                                                 \
76        CRI("No widget data for object %p (%s)",       \
77            o, evas_object_type_get(o));               \
78        return val;                                    \
79     }
80
81 #define ELM_ROUTE_CHECK(obj)                              \
82   if (EINA_UNLIKELY(!eo_isa((obj), ELM_ROUTE_CLASS))) \
83     return
84
85 #endif