1 #ifndef ELM_WIDGET_SLIDESHOW_H
2 #define ELM_WIDGET_SLIDESHOW_H
3 
4 #include "Elementary.h"
5 
6 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
7  * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
8  * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
9  * IT AT RUNTIME.
10  */
11 
12 /**
13  * @addtogroup Widget
14  * @{
15  *
16  * @section elm-slideshow-class The Elementary Slideshow Class
17  *
18  * Elementary, besides having the @ref Slideshow widget, exposes its
19  * foundation -- the Elementary Slideshow Class -- in order to create other
20  * widgets which are a slideshow with some more logic on top.
21  */
22 
23 /**
24  * Base layout smart data extended with slideshow instance data.
25  */
26 typedef struct _Elm_Slideshow_Data       Elm_Slideshow_Data;
27 typedef struct _Elm_Slideshow_Item_Data       Elm_Slideshow_Item_Data;
28 
29 struct _Elm_Slideshow_Item_Data
30 {
31    Elm_Widget_Item_Data           *base;
32 
33    Eina_List                      *l, *l_built;
34 
35    const Elm_Slideshow_Item_Class *itc;
36 };
37 
38 struct _Elm_Slideshow_Data
39 {
40    // list of Elm_Slideshow_Item*
41    Eina_List            *items;
42    Eina_List            *items_built;
43 
44    Elm_Slideshow_Item_Data   *current;
45    Elm_Slideshow_Item_Data   *previous;
46 
47    Eina_List            *transitions;
48    const char           *transition;
49 
50    int                   count_item_pre_before;
51    int                   count_item_pre_after;
52    Ecore_Timer          *timer;
53    double                timeout;
54    Eina_Bool             loop : 1;
55 
56    struct
57    {
58       const char *current;
59       Eina_List  *list;  //list of const char *
60    } layout;
61 };
62 
63 /**
64  * @}
65  */
66 
67 #define ELM_SLIDESHOW_DATA_GET(o, sd) \
68   Elm_Slideshow_Data * sd = efl_data_scope_get(o, ELM_SLIDESHOW_CLASS)
69 
70 #define ELM_SLIDESHOW_DATA_GET_OR_RETURN(o, ptr)     \
71   ELM_SLIDESHOW_DATA_GET(o, ptr);                    \
72   if (EINA_UNLIKELY(!ptr))                           \
73     {                                                \
74        ERR("No widget data for object %p (%s)",      \
75            o, evas_object_type_get(o));              \
76        return;                                       \
77     }
78 
79 #define ELM_SLIDESHOW_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
80   ELM_SLIDESHOW_DATA_GET(o, ptr);                         \
81   if (EINA_UNLIKELY(!ptr))                                \
82     {                                                     \
83        ERR("No widget data for object %p (%s)",           \
84            o, evas_object_type_get(o));                   \
85        return val;                                        \
86     }
87 
88 #define ELM_SLIDESHOW_CHECK(obj)                              \
89   if (EINA_UNLIKELY(!efl_isa((obj), ELM_SLIDESHOW_CLASS))) \
90     return
91 
92 #define ELM_SLIDESHOW_ITEM_CHECK(obj)                          \
93   if (EINA_UNLIKELY(!efl_isa(EO_OBJ(obj), ELM_SLIDESHOW_ITEM_CLASS))) \
94     return
95 
96 #define ELM_SLIDESHOW_ITEM_CHECK_OR_RETURN(obj, ...)           \
97   if (EINA_UNLIKELY(!efl_isa(EO_OBJ(obj), ELM_SLIDESHOW_ITEM_CLASS))) \
98     return __VA_ARGS__;
99 
100 #define ELM_SLIDESHOW_ITEM_DATA_GET(o, sd) \
101   Elm_Slideshow_Item_Data *sd = efl_data_scope_get(o, ELM_SLIDESHOW_ITEM_CLASS)
102 
103 #endif
104