Merge branch 'master' into svn_merge
[framework/uifw/elementary.git] / src / edje_externals / elm_progressbar.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Progressbar
4 {
5    Elm_Params base;
6    const char *label;
7    Evas_Object *icon;
8    const char *unit;
9    double value;
10    Evas_Coord span;
11    Eina_Bool value_exists:1;
12    Eina_Bool span_exists:1;
13    Eina_Bool inverted:1;
14    Eina_Bool inverted_exists:1;
15    Eina_Bool horizontal:1;
16    Eina_Bool horizontal_exists:1;
17 } Elm_Params_Progressbar;
18
19 static void
20 external_progressbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
21 {
22    const Elm_Params_Progressbar *p;
23
24    if (to_params) p = to_params;
25    else if (from_params) p = from_params;
26    else return;
27
28    if (p->label)
29      elm_object_text_set(obj, p->label);
30    if (p->icon)
31      elm_progressbar_icon_set(obj, p->icon);
32    if (p->span_exists)
33      elm_progressbar_span_size_set(obj, p->span);
34    if (p->value_exists)
35      elm_progressbar_value_set(obj, p->value);
36    if (p->inverted_exists)
37      elm_progressbar_inverted_set(obj, p->inverted);
38    if (p->horizontal_exists)
39      elm_progressbar_horizontal_set(obj, p->horizontal);
40    if (p->unit)
41      elm_progressbar_unit_format_set(obj, p->unit);
42 }
43
44 static Eina_Bool
45 external_progressbar_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
46 {
47    if (!strcmp(param->name, "label"))
48      {
49         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
50           {
51              elm_object_text_set(obj, param->s);
52              return EINA_TRUE;
53           }
54      }
55    else if (!strcmp(param->name, "icon"))
56      {
57         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
58           {
59              Evas_Object *icon = external_common_param_icon_get(obj, param);
60              if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
61              elm_progressbar_icon_set(obj, icon);
62              return EINA_TRUE;
63           }
64      }
65    else if (!strcmp(param->name, "value"))
66      {
67         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
68           {
69              elm_progressbar_value_set(obj, param->d);
70              return EINA_TRUE;
71           }
72      }
73    else if (!strcmp(param->name, "horizontal"))
74      {
75         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
76           {
77              elm_progressbar_horizontal_set(obj, param->i);
78              return EINA_TRUE;
79           }
80      }
81    else if (!strcmp(param->name, "inverted"))
82      {
83         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
84           {
85              elm_progressbar_inverted_set(obj, param->i);
86              return EINA_TRUE;
87           }
88      }
89    else if (!strcmp(param->name, "span"))
90      {
91         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
92           {
93              elm_progressbar_span_size_set(obj, param->i);
94              return EINA_TRUE;
95           }
96      }
97    else if (!strcmp(param->name, "unit format"))
98      {
99         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
100           {
101              elm_progressbar_unit_format_set(obj, param->s);
102              return EINA_TRUE;
103           }
104      }
105
106    ERR("unknown parameter '%s' of type '%s'",
107        param->name, edje_external_param_type_str(param->type));
108
109    return EINA_FALSE;
110 }
111
112 static Eina_Bool
113 external_progressbar_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
114 {
115    if (!strcmp(param->name, "label"))
116      {
117         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
118           {
119              param->s = elm_object_text_get(obj);
120              return EINA_TRUE;
121           }
122      }
123    else if (!strcmp(param->name, "icon"))
124      {
125         /* not easy to get icon name back from live object */
126         return EINA_FALSE;
127      }
128    else if (!strcmp(param->name, "value"))
129      {
130         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)
131           {
132              param->d = elm_progressbar_value_get(obj);
133              return EINA_TRUE;
134           }
135      }
136    else if (!strcmp(param->name, "horizontal"))
137      {
138         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
139           {
140              param->i = elm_progressbar_horizontal_get(obj);
141              return EINA_TRUE;
142           }
143      }
144    else if (!strcmp(param->name, "inverted"))
145      {
146         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
147           {
148              param->i = elm_progressbar_inverted_get(obj);
149              return EINA_TRUE;
150           }
151      }
152    else if (!strcmp(param->name, "span"))
153      {
154         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
155           {
156              param->i = elm_progressbar_span_size_get(obj);
157              return EINA_TRUE;
158           }
159      }
160    else if (!strcmp(param->name, "unit format"))
161      {
162         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
163           {
164              param->s = elm_progressbar_unit_format_get(obj);
165              return EINA_TRUE;
166           }
167      }
168
169    ERR("unknown parameter '%s' of type '%s'",
170        param->name, edje_external_param_type_str(param->type));
171
172    return EINA_FALSE;
173 }
174
175 static void *
176 external_progressbar_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
177 {
178    Elm_Params_Progressbar *mem;
179    Edje_External_Param *param;
180    const Eina_List *l;
181
182    mem = calloc(1, sizeof(Elm_Params_Progressbar));
183    if (!mem)
184      return NULL;
185
186    external_common_icon_param_parse(&mem->icon, obj, params);
187
188    EINA_LIST_FOREACH(params, l, param)
189      {
190         if (!strcmp(param->name, "span"))
191           {
192              mem->span = param->i;
193              mem->span_exists = EINA_TRUE;
194           }
195         else if (!strcmp(param->name, "value"))
196           {
197              mem->value = param->d;
198              mem->value_exists = EINA_TRUE;
199           }
200         else if (!strcmp(param->name, "inverted"))
201           {
202              mem->inverted = !!param->i;
203              mem->inverted_exists = EINA_TRUE;
204           }
205         else if (!strcmp(param->name, "horizontal"))
206           {
207               mem->horizontal = !!param->i;
208               mem->horizontal_exists = EINA_TRUE;
209           }
210         else if (!strcmp(param->name, "unit format"))
211           mem->unit = eina_stringshare_add(param->s);
212         else if (!strcmp(param->name, "label"))
213           mem->label = eina_stringshare_add(param->s);
214      }
215
216    return mem;
217 }
218
219 static Evas_Object *external_progressbar_content_get(void *data __UNUSED__,
220                 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
221 {
222         ERR("No content.");
223         return NULL;
224 }
225
226 static void
227 external_progressbar_params_free(void *params)
228 {
229    Elm_Params_Progressbar *mem = params;
230
231    if (mem->unit)
232      eina_stringshare_del(mem->unit);
233    if (mem->label)
234       eina_stringshare_del(mem->label);
235    free(params);
236 }
237
238 static Edje_External_Param_Info external_progressbar_params[] = {
239    DEFINE_EXTERNAL_COMMON_PARAMS,
240    EDJE_EXTERNAL_PARAM_INFO_STRING("label"),
241    EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
242    EDJE_EXTERNAL_PARAM_INFO_DOUBLE("value"),
243    EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),
244    EDJE_EXTERNAL_PARAM_INFO_BOOL("inverted"),
245    EDJE_EXTERNAL_PARAM_INFO_INT("span"),
246    EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("unit format", "%1.2f"),
247    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
248 };
249
250 DEFINE_EXTERNAL_ICON_ADD(progressbar, "progressbar")
251 DEFINE_EXTERNAL_TYPE_SIMPLE(progressbar, "Progressbar")