efl
154 строки · 4.0 Кб
1#include <assert.h>
2#include "private.h"
3
4typedef struct _Elm_Params_Thumb
5{
6Elm_Params base;
7const char *animate;
8} Elm_Params_Thumb;
9
10static const char* choices[] = { "loop", "start", "stop", NULL };
11
12static Elm_Thumb_Animation_Setting
13_anim_setting_get(const char *anim_str)
14{
15unsigned int i;
16
17assert(sizeof(choices)/sizeof(choices[0]) == ELM_THUMB_ANIMATION_LAST + 1);
18
19for (i = 0; i < ELM_THUMB_ANIMATION_LAST; i++)
20{
21if (!strcmp(anim_str, choices[i]))
22return i;
23}
24return ELM_THUMB_ANIMATION_LAST;
25}
26
27static void
28external_thumb_state_set(void *data EINA_UNUSED, Evas_Object *obj,
29const void *from_params, const void *to_params,
30float pos EINA_UNUSED)
31{
32const Elm_Params_Thumb *p;
33
34if (to_params) p = to_params;
35else if (from_params) p = from_params;
36else return;
37
38if (p->animate)
39{
40Elm_Thumb_Animation_Setting set = _anim_setting_get(p->animate);
41if (set != ELM_THUMB_ANIMATION_LAST)
42elm_thumb_animate_set(obj, set);
43}
44}
45
46static Eina_Bool
47external_thumb_param_set(void *data EINA_UNUSED, Evas_Object *obj,
48const Edje_External_Param *param)
49{
50if (!strcmp(param->name, "animate"))
51{
52if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
53{
54Elm_Thumb_Animation_Setting set = _anim_setting_get(param->s);
55if (set == ELM_THUMB_ANIMATION_LAST) return EINA_FALSE;
56elm_thumb_animate_set(obj, set);
57return EINA_TRUE;
58}
59}
60
61ERR("unknown parameter '%s' of type '%s'",
62param->name, edje_external_param_type_str(param->type));
63
64return EINA_FALSE;
65}
66
67static Eina_Bool
68external_thumb_param_get(void *data EINA_UNUSED, const Evas_Object *obj,
69Edje_External_Param *param)
70{
71if (!strcmp(param->name, "animate"))
72{
73if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
74{
75Elm_Thumb_Animation_Setting anim_set = elm_thumb_animate_get(obj);
76
77if (anim_set == ELM_THUMB_ANIMATION_LAST)
78return EINA_FALSE;
79
80param->s = choices[anim_set];
81return EINA_TRUE;
82}
83}
84
85ERR("unknown parameter '%s' of type '%s'",
86param->name, edje_external_param_type_str(param->type));
87
88return EINA_FALSE;
89}
90
91static void *
92external_thumb_params_parse(void *data EINA_UNUSED,
93Evas_Object *obj EINA_UNUSED,
94const Eina_List *params)
95{
96Elm_Params_Thumb *mem;
97Edje_External_Param *param;
98const Eina_List *l;
99
100mem = calloc(1, sizeof(Elm_Params_Thumb));
101if (!mem)
102return NULL;
103
104EINA_LIST_FOREACH(params, l, param)
105{
106if (!strcmp(param->name, "animate"))
107mem->animate = eina_stringshare_add(param->s);
108}
109
110return mem;
111}
112
113static Evas_Object *external_thumb_content_get(void *data EINA_UNUSED,
114const Evas_Object *obj EINA_UNUSED,
115const char *content EINA_UNUSED)
116{
117ERR("No content.");
118return NULL;
119}
120
121static void
122external_thumb_params_free(void *params)
123{
124Elm_Params_Thumb *mem = params;
125
126if (mem->animate)
127eina_stringshare_del(mem->animate);
128free(mem);
129}
130
131static Edje_External_Param_Info external_thumb_params[] =
132{
133DEFINE_EXTERNAL_COMMON_PARAMS,
134EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("animate", "loop", choices),
135EDJE_EXTERNAL_PARAM_INFO_SENTINEL
136};
137
138static Evas_Object *
139external_thumb_add(void *data EINA_UNUSED, Evas *evas EINA_UNUSED,
140Evas_Object *edje, const Eina_List *params EINA_UNUSED,
141const char *part_name)
142{
143Evas_Object *parent, *obj;
144external_elm_init();
145parent = elm_widget_parent_widget_get(edje);
146if (!parent) parent = edje;
147elm_need_ethumb(); /* extra command needed */
148obj = elm_thumb_add(parent);
149external_signals_proxy(obj, edje, part_name);
150return obj;
151}
152
153DEFINE_EXTERNAL_ICON_ADD(thumb, "thumb");
154DEFINE_EXTERNAL_TYPE(thumb, "Thumb");
155