svn update: 48945 (latest:48959)
[framework/uifw/elementary.git] / src / edje_externals / elm_slideshow.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Slideshow
4 {
5    int timeout;
6    const char *transition;
7    Eina_Bool loop:1;
8    Eina_Bool timeout_exists:1;
9    Eina_Bool loop_exists:1;
10 } Elm_Params_Slideshow;
11
12 static const char *transitions[] = { "fade", "black_fade", "horizontal",
13                                      "vertical", "square", NULL};
14
15 static void
16 external_slideshow_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
17 {
18    const Elm_Params_Slideshow *p;
19
20    if (to_params) p = to_params;
21    else if (from_params) p = from_params;
22    else return;
23
24    if (p->timeout_exists)
25      elm_slideshow_timeout_set(obj , p->timeout);
26    if (p->loop_exists)
27      elm_slideshow_loop_set(obj, p->loop);
28    if (p->transition) {
29       elm_slideshow_transition_set(obj, p->transition);
30    }
31 }
32
33 static Eina_Bool
34 external_slideshow_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
35 {
36    if (!strcmp(param->name, "timeout"))
37      {
38         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
39           {
40              elm_slideshow_timeout_set(obj, param->i);
41              return EINA_TRUE;
42           }
43      }
44    else if (!strcmp(param->name, "loop"))
45      {
46         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
47           {
48              elm_slideshow_loop_set(obj, param->i);
49              return EINA_TRUE;
50           }
51      }
52    else if (!strcmp(param->name, "transition"))
53      {
54         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
55           {
56              elm_slideshow_transition_set(obj, param->s);
57              return EINA_TRUE;
58           }
59      }
60
61    ERR("unknown parameter '%s' of type '%s'",
62        param->name, edje_external_param_type_str(param->type));
63
64    return EINA_FALSE;
65 }
66
67 static Eina_Bool
68 external_slideshow_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
69 {
70    if (!strcmp(param->name, "timeout"))
71      {
72         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
73           {
74              param->i = elm_slideshow_timeout_get(obj);
75              return EINA_TRUE;
76           }
77      }
78    else if (!strcmp(param->name, "loop"))
79      {
80         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
81           {
82              param->i = elm_slideshow_loop_get(obj);
83              return EINA_TRUE;
84           }
85      }
86    else if (!strcmp(param->name, "transition"))
87      {
88         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
89           {
90              param->s = elm_slideshow_transition_get(obj);
91              return EINA_TRUE;
92           }
93      }
94
95    ERR("unknown parameter '%s' of type '%s'",
96        param->name, edje_external_param_type_str(param->type));
97
98    return EINA_FALSE;
99 }
100
101 static void *
102 external_slideshow_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
103 {
104    Elm_Params_Slideshow *mem;
105    Edje_External_Param *param;
106    const Eina_List *l;
107
108    mem = calloc(1, sizeof(Elm_Params_Slideshow));
109    if (!mem)
110      return NULL;
111
112    EINA_LIST_FOREACH(params, l, param)
113      {
114         if (!strcmp(param->name, "timeout"))
115           {
116              mem->timeout = param->i;
117              mem->timeout_exists = EINA_TRUE;
118           }
119         else if (!strcmp(param->name, "loop"))
120           {
121              mem->loop = param->i;
122              mem->loop_exists = EINA_TRUE;
123           }
124         else if (!strcmp(param->name, "transition"))
125           {
126              mem->transition = param->s;
127           }
128      }
129
130    return mem;
131 }
132
133 static void
134 external_slideshow_params_free(void *params)
135 {
136    return;
137 }
138
139 static Edje_External_Param_Info external_slideshow_params[] = {
140    EDJE_EXTERNAL_PARAM_INFO_INT("timeout"),
141    EDJE_EXTERNAL_PARAM_INFO_BOOL("loop"),
142    EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("transition", "fade", transitions),
143    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
144 };
145
146 DEFINE_EXTERNAL_ICON_ADD(slideshow, "slideshow");
147 DEFINE_EXTERNAL_TYPE_SIMPLE(slideshow, "Slideshow");