10be0adc7d5c6f1f1eb29319d29ae451903a4e63
[framework/uifw/elementary.git] / src / edje_externals / elm_video.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Video
4 {
5    Elm_Params base;
6    const char *file;
7    const char *uri;
8    Eina_Bool play:1;
9    Eina_Bool play_exists:1;
10    Eina_Bool pause:1;
11    Eina_Bool pause_exists:1;
12    Eina_Bool stop:1;
13    Eina_Bool stop_exists:1;
14    Eina_Bool audio_mute:1;
15    Eina_Bool audio_mute_exists:1;
16    double audio_level;
17    Eina_Bool audio_level_exists:1;
18    double play_position;
19    Eina_Bool play_position_exists:1;
20    Eina_Bool remember_position:1;
21    Eina_Bool remember_position_exists:1;
22 } Elm_Params_Video;
23
24 static void
25 external_video_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
26 {
27    const Elm_Params_Video *p;
28
29    if (to_params) p = to_params;
30    else if (from_params) p = from_params;
31    else return;
32
33    if (p->file) elm_video_file_set(obj, p->file);
34 <<<<<<< HEAD
35    if (p->uri) elm_video_uri_set(obj, p->uri);
36 =======
37    if (p->uri) elm_video_file_set(obj, p->uri);
38 >>>>>>> remotes/origin/upstream
39    if (p->play_exists && p->play) elm_video_play(obj);
40    if (p->pause_exists && p->pause) elm_video_pause(obj);
41    if (p->stop_exists && p->stop) elm_video_stop(obj);
42    if (p->audio_mute_exists) elm_video_audio_mute_set(obj, p->audio_mute);
43    if (p->audio_level_exists) elm_video_audio_level_set(obj, p->audio_level);
44    if (p->play_position_exists)
45      elm_video_play_position_set(obj, p->play_position);
46    if (p->remember_position_exists)
47      elm_video_remember_position_set(obj, p->remember_position);
48 }
49
50 static Eina_Bool
51 external_video_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
52 {
53    if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
54        && (!strcmp(param->name, "file")))
55      {
56         elm_video_file_set(obj, param->s);
57         return EINA_TRUE;
58      }
59    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
60        && (!strcmp(param->name, "uri")))
61      {
62 <<<<<<< HEAD
63         elm_video_uri_set(obj, param->s);
64 =======
65         elm_video_file_set(obj, param->s);
66 >>>>>>> remotes/origin/upstream
67         return EINA_TRUE;
68      }
69    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
70        && (!strcmp(param->name, "play")))
71      {
72         if (param->i)
73           elm_video_play(obj);
74         return EINA_TRUE;
75      }
76    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
77        && (!strcmp(param->name, "pause")))
78      {
79         if (param->i)
80           elm_video_pause(obj);
81         return EINA_TRUE;
82      }
83    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
84        && (!strcmp(param->name, "stop")))
85      {
86         if (param->i)
87           elm_video_stop(obj);
88         return EINA_TRUE;
89      }
90    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
91        && (!strcmp(param->name, "audio mute")))
92      {
93         elm_video_audio_mute_set(obj, param->i);
94         return EINA_TRUE;
95      }
96    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
97        && (!strcmp(param->name, "audio level")))
98      {
99         elm_video_audio_level_set(obj, param->d);
100         return EINA_TRUE;
101      }
102    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
103        && (!strcmp(param->name, "play position")))
104      {
105         elm_video_play_position_set(obj, param->d);
106         return EINA_TRUE;
107      }
108    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
109        && (!strcmp(param->name, "remember position")))
110      {
111         elm_video_remember_position_set(obj, param->i);
112         return EINA_TRUE;
113      }
114
115    ERR("unknown parameter '%s' of type '%s'",
116        param->name, edje_external_param_type_str(param->type));
117
118    return EINA_FALSE;
119 }
120
121 static Eina_Bool
122 external_video_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
123 {
124    if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
125        && (!strcmp(param->name, "file")))
126      {
127         //        param->s = elm_video_file_get(obj);
128         //        return EINA_TRUE;
129         return EINA_FALSE;
130      }
131    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
132                 && (!strcmp(param->name, "uri")))
133      {
134         //        elm_video_uri_get(obj, param->s);
135         //        return EINA_TRUE;
136         return EINA_FALSE;
137      }
138    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
139             && (!strcmp(param->name, "play")))
140      {
141         //        param->i = elm_video_play_get(obj); return EINA_TRUE;
142         return EINA_FALSE;
143      }
144    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
145             && (!strcmp(param->name, "pause")))
146      {
147              //        param->i = elm_video_pause_get(obj); return EINA_TRUE;
148         return EINA_FALSE;
149      }
150    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
151             && (!strcmp(param->name, "stop")))
152      {
153         //        param->i = elm_video_stop_get(obj); return EINA_TRUE;
154         return EINA_FALSE;
155      }
156    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
157             && (!strcmp(param->name, "audio mute")))
158      {
159         param->i = elm_video_audio_mute_get(obj);
160         return EINA_TRUE;
161      }
162    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) &&
163             (!strcmp(param->name, "audio level")))
164      {
165         param->d = elm_video_audio_level_get(obj);
166         return EINA_TRUE;
167      }
168    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
169             && (!strcmp(param->name, "play position")))
170      {
171         param->d = elm_video_play_position_get(obj);
172         return EINA_TRUE;
173      }
174    else if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
175             && (!strcmp(param->name, "remember position")))
176      {
177         param->i = elm_video_remember_position_get(obj);
178         return EINA_TRUE;
179      }
180
181    ERR("unknown parameter '%s' of type '%s'", param->name,
182        edje_external_param_type_str(param->type));
183
184    return EINA_FALSE; }
185
186 static void * external_video_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
187 {
188    Elm_Params_Video *mem;
189    Edje_External_Param *param;
190    const Eina_List *l;
191
192    mem = calloc(1, sizeof(Elm_Params_Video));
193    if (!mem) return NULL;
194
195    EINA_LIST_FOREACH(params, l, param)
196      {
197         if (!strcmp(param->name, "file"))
198           mem->file = eina_stringshare_add(param->s);
199         else if (!strcmp(param->name, "uri"))
200           mem->uri = eina_stringshare_add(param->s);
201         else if (!strcmp(param->name, "play"))
202           {
203              mem->play = param->i;
204              mem->play_exists = EINA_TRUE;
205           }
206         else if (!strcmp(param->name, "pause"))
207           {
208              mem->pause = param->i;
209              mem->pause_exists = EINA_TRUE;
210           }
211         else if (!strcmp(param->name, "stop"))
212           {
213              mem->stop = param->i;
214              mem->stop_exists = EINA_TRUE;
215           }
216         else if (!strcmp(param->name, "audio mute"))
217           {
218              mem->audio_mute = param->i;
219              mem->audio_mute_exists = EINA_TRUE;
220           }
221         else if (!strcmp(param->name, "audio level"))
222           {
223              mem->audio_level = param->d;
224              mem->audio_level_exists = EINA_TRUE;
225           }
226         else if (!strcmp(param->name, "play position"))
227           {
228              mem->play_position = param->d;
229              mem->play_position_exists = EINA_TRUE;
230           }
231         else if (!strcmp(param->name, "remember position"))
232           {
233              mem->remember_position = param->i;
234              mem->remember_position = EINA_TRUE;
235           }
236      }
237    return mem;
238 }
239
240 static Evas_Object *external_video_content_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
241 {
242    ERR("No content.");
243    return NULL;
244 }
245
246 static void external_video_params_free(void *params)
247 {
248    Elm_Params_Video *mem = params;
249
250    if (mem->file) eina_stringshare_del(mem->file);
251    if (mem->uri) eina_stringshare_del(mem->uri);
252    free(params);
253 }
254
255 static Edje_External_Param_Info external_video_params[] = {
256      DEFINE_EXTERNAL_COMMON_PARAMS, EDJE_EXTERNAL_PARAM_INFO_STRING("file"),
257      EDJE_EXTERNAL_PARAM_INFO_STRING("uri"),
258      EDJE_EXTERNAL_PARAM_INFO_BOOL("play"),
259      EDJE_EXTERNAL_PARAM_INFO_BOOL("pause"),
260      EDJE_EXTERNAL_PARAM_INFO_BOOL("stop"),
261      EDJE_EXTERNAL_PARAM_INFO_BOOL("audio mute"),
262      EDJE_EXTERNAL_PARAM_INFO_DOUBLE("audio level"),
263      EDJE_EXTERNAL_PARAM_INFO_DOUBLE("play position"),
264      EDJE_EXTERNAL_PARAM_INFO_BOOL("remember position"),
265      EDJE_EXTERNAL_PARAM_INFO_SENTINEL
266 };
267
268 DEFINE_EXTERNAL_ICON_ADD(video, "video");
269 DEFINE_EXTERNAL_TYPE_SIMPLE(video, "Video");