efl
310 строк · 8.9 Кб
1#include "private.h"2
3typedef struct _Elm_Params_Progressbar4{
5Elm_Params base;6const char *label;7Evas_Object *icon;8const char *unit;9double value;10Evas_Coord span;11Eina_Bool value_exists:1;12Eina_Bool span_exists:1;13Eina_Bool inverted:1;14Eina_Bool inverted_exists:1;15Eina_Bool horizontal:1;16Eina_Bool horizontal_exists:1;17Eina_Bool pulse:1;18Eina_Bool pulse_exists:1;19Eina_Bool pulsing:1;20Eina_Bool pulsing_exists:1;21} Elm_Params_Progressbar;22
23static void24external_progressbar_state_set(void *data EINA_UNUSED, Evas_Object *obj,25const void *from_params, const void *to_params,26float pos EINA_UNUSED)27{
28const Elm_Params_Progressbar *p;29
30if (to_params) p = to_params;31else if (from_params) p = from_params;32else return;33
34if (p->label)35elm_object_text_set(obj, p->label);36if (p->icon)37elm_object_part_content_set(obj, "icon", p->icon);38if (p->span_exists)39elm_progressbar_span_size_set(obj, p->span);40if (p->value_exists)41elm_progressbar_value_set(obj, p->value);42if (p->inverted_exists)43elm_progressbar_inverted_set(obj, p->inverted);44if (p->horizontal_exists)45elm_progressbar_horizontal_set(obj, p->horizontal);46if (p->unit)47elm_progressbar_unit_format_set(obj, p->unit);48if (p->pulse_exists)49elm_progressbar_pulse_set(obj, p->pulse);50if (p->pulsing_exists)51elm_progressbar_pulse(obj, p->pulsing);52}
53
54static Eina_Bool55external_progressbar_param_set(void *data EINA_UNUSED, Evas_Object *obj,56const Edje_External_Param *param)57{
58if (!strcmp(param->name, "label"))59{60if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)61{62elm_object_text_set(obj, param->s);63return EINA_TRUE;64}65}66else if (!strcmp(param->name, "icon"))67{68if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)69{70Evas_Object *icon = external_common_param_icon_get(obj, param);71if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;72elm_object_part_content_set(obj, "icon", icon);73return EINA_TRUE;74}75}76else if (!strcmp(param->name, "value"))77{78if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)79{80elm_progressbar_value_set(obj, param->d);81return EINA_TRUE;82}83}84else if (!strcmp(param->name, "horizontal"))85{86if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)87{88elm_progressbar_horizontal_set(obj, param->i);89return EINA_TRUE;90}91}92else if (!strcmp(param->name, "pulse"))93{94if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)95{96elm_progressbar_pulse_set(obj, param->i);97return EINA_TRUE;98}99}100else if (!strcmp(param->name, "pulsing"))101{102if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)103{104elm_progressbar_pulse(obj, param->i);105return EINA_TRUE;106}107}108else if (!strcmp(param->name, "inverted"))109{110if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)111{112elm_progressbar_inverted_set(obj, param->i);113return EINA_TRUE;114}115}116else if (!strcmp(param->name, "span"))117{118if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)119{120elm_progressbar_span_size_set(obj, param->i);121return EINA_TRUE;122}123}124else if (!strcmp(param->name, "unit format"))125{126if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)127{128elm_progressbar_unit_format_set(obj, param->s);129return EINA_TRUE;130}131}132
133ERR("unknown parameter '%s' of type '%s'",134param->name, edje_external_param_type_str(param->type));135
136return EINA_FALSE;137}
138
139static Eina_Bool140external_progressbar_param_get(void *data EINA_UNUSED, const Evas_Object *obj,141Edje_External_Param *param)142{
143if (!strcmp(param->name, "label"))144{145if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)146{147param->s = elm_object_text_get(obj);148return EINA_TRUE;149}150}151else if (!strcmp(param->name, "icon"))152{153/* not easy to get icon name back from live object */154return EINA_FALSE;155}156else if (!strcmp(param->name, "value"))157{158if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE)159{160param->d = elm_progressbar_value_get(obj);161return EINA_TRUE;162}163}164else if (!strcmp(param->name, "horizontal"))165{166if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)167{168param->i = elm_progressbar_horizontal_get(obj);169return EINA_TRUE;170}171}172else if (!strcmp(param->name, "pulse"))173{174if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)175{176param->i = elm_progressbar_pulse_get(obj);177return EINA_TRUE;178}179}180else if (!strcmp(param->name, "pulsing"))181{182if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)183{184param->i = elm_progressbar_is_pulsing_get(obj);185return EINA_TRUE;186}187}188else if (!strcmp(param->name, "inverted"))189{190if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)191{192param->i = elm_progressbar_inverted_get(obj);193return EINA_TRUE;194}195}196else if (!strcmp(param->name, "span"))197{198if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)199{200param->i = elm_progressbar_span_size_get(obj);201return EINA_TRUE;202}203}204else if (!strcmp(param->name, "unit format"))205{206if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)207{208param->s = elm_progressbar_unit_format_get(obj);209return EINA_TRUE;210}211}212
213ERR("unknown parameter '%s' of type '%s'",214param->name, edje_external_param_type_str(param->type));215
216return EINA_FALSE;217}
218
219static void *220external_progressbar_params_parse(void *data EINA_UNUSED,221Evas_Object *obj EINA_UNUSED,222const Eina_List *params)223{
224Elm_Params_Progressbar *mem;225Edje_External_Param *param;226const Eina_List *l;227
228mem = calloc(1, sizeof(Elm_Params_Progressbar));229if (!mem)230return NULL;231
232external_common_icon_param_parse(&mem->icon, obj, params);233
234EINA_LIST_FOREACH(params, l, param)235{236if (!strcmp(param->name, "span"))237{238mem->span = param->i;239mem->span_exists = EINA_TRUE;240}241else if (!strcmp(param->name, "value"))242{243mem->value = param->d;244mem->value_exists = EINA_TRUE;245}246else if (!strcmp(param->name, "inverted"))247{248mem->inverted = !!param->i;249mem->inverted_exists = EINA_TRUE;250}251else if (!strcmp(param->name, "horizontal"))252{253mem->horizontal = !!param->i;254mem->horizontal_exists = EINA_TRUE;255}256else if (!strcmp(param->name, "pulse"))257{258mem->pulse = !!param->i;259mem->pulse_exists = EINA_TRUE;260}261else if (!strcmp(param->name, "pulsing"))262{263mem->pulsing = !!param->i;264mem->pulsing_exists = EINA_TRUE;265}266else if (!strcmp(param->name, "unit format"))267mem->unit = eina_stringshare_add(param->s);268else if (!strcmp(param->name, "label"))269mem->label = eina_stringshare_add(param->s);270}271
272return mem;273}
274
275static Evas_Object *external_progressbar_content_get(void *data EINA_UNUSED,276const Evas_Object *obj EINA_UNUSED,277const char *content EINA_UNUSED)278{
279ERR("No content.");280return NULL;281}
282
283static void284external_progressbar_params_free(void *params)285{
286Elm_Params_Progressbar *mem = params;287
288if (mem->unit)289eina_stringshare_del(mem->unit);290if (mem->label)291eina_stringshare_del(mem->label);292free(params);293}
294
295static Edje_External_Param_Info external_progressbar_params[] = {296DEFINE_EXTERNAL_COMMON_PARAMS,297EDJE_EXTERNAL_PARAM_INFO_STRING("label"),298EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),299EDJE_EXTERNAL_PARAM_INFO_DOUBLE("value"),300EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),301EDJE_EXTERNAL_PARAM_INFO_BOOL("pulse"),302EDJE_EXTERNAL_PARAM_INFO_BOOL("pulsing"),303EDJE_EXTERNAL_PARAM_INFO_BOOL("inverted"),304EDJE_EXTERNAL_PARAM_INFO_INT("span"),305EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("unit format", "%1.2f"),306EDJE_EXTERNAL_PARAM_INFO_SENTINEL
307};308
309DEFINE_EXTERNAL_ICON_ADD(progressbar, "progressbar");310DEFINE_EXTERNAL_TYPE_SIMPLE(progressbar, "Progressbar");311