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