efl
131 строка · 3.5 Кб
1#include "private.h"2
3typedef struct _Elm_Params_Frame4{
5Elm_Params base;6const char *label;7Evas_Object *content; /* part name whose obj is to be set as content */8} Elm_Params_Frame;9
10static void11external_frame_state_set(void *data EINA_UNUSED, Evas_Object *obj,12const void *from_params, const void *to_params,13float pos EINA_UNUSED)14{
15const Elm_Params_Frame *p;16
17if (to_params) p = to_params;18else if (from_params) p = from_params;19else return;20
21if (p->label) elm_object_text_set(obj, p->label);22if (p->content) elm_object_content_set(obj, p->content);23}
24
25static Eina_Bool26external_frame_param_set(void *data EINA_UNUSED, Evas_Object *obj,27const Edje_External_Param *param)28{
29if (!strcmp(param->name, "label"))30{31if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)32{33elm_object_text_set(obj, param->s);34return EINA_TRUE;35}36}37else if (!strcmp(param->name, "content"))38{39if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)40{41Evas_Object *content =42external_common_param_elm_layout_get(obj,param);43if ((strcmp(param->s, "")) && (!content)) return EINA_FALSE;44elm_object_content_set(obj, content);45return EINA_TRUE;46}47}48
49ERR("unknown parameter '%s' of type '%s'",50param->name, edje_external_param_type_str(param->type));51
52return EINA_FALSE;53}
54
55static Eina_Bool56external_frame_param_get(void *data EINA_UNUSED, const Evas_Object *obj,57Edje_External_Param *param)58{
59if (!strcmp(param->name, "label"))60{61if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)62{63param->s = elm_object_text_get(obj);64return EINA_TRUE;65}66}67else if (!strcmp(param->name, "content"))68{69/* not easy to get content name back from live object */70return EINA_FALSE;71}72
73ERR("unknown parameter '%s' of type '%s'",74param->name, edje_external_param_type_str(param->type));75
76return EINA_FALSE;77}
78
79static void *80external_frame_params_parse(void *data EINA_UNUSED, Evas_Object *obj,81const Eina_List *params)82{
83Elm_Params_Frame *mem;84Edje_External_Param *param;85const Eina_List *l;86
87mem = calloc(1, sizeof(Elm_Params_Frame));88if (!mem)89return NULL;90
91EINA_LIST_FOREACH(params, l, param)92{93if (!strcmp(param->name, "content"))94mem->content = external_common_param_elm_layout_get(obj, param);95else if (!strcmp(param->name, "label"))96mem->label = eina_stringshare_add(param->s);97}98
99return mem;100}
101
102static Evas_Object *external_frame_content_get(void *data EINA_UNUSED,103const Evas_Object *obj EINA_UNUSED,104const char *content EINA_UNUSED)105{
106if (!strcmp(content, "content"))107return elm_object_content_get(obj);108
109ERR("unknown content '%s'", content);110return NULL;111}
112
113static void114external_frame_params_free(void *params)115{
116Elm_Params_Frame *mem = params;117
118if (mem->label)119eina_stringshare_del(mem->label);120free(params);121}
122
123static Edje_External_Param_Info external_frame_params[] = {124DEFINE_EXTERNAL_COMMON_PARAMS,125EDJE_EXTERNAL_PARAM_INFO_STRING("label"),126EDJE_EXTERNAL_PARAM_INFO_STRING("content"),127EDJE_EXTERNAL_PARAM_INFO_SENTINEL
128};129
130DEFINE_EXTERNAL_ICON_ADD(frame, "frame");131DEFINE_EXTERNAL_TYPE_SIMPLE(frame, "Frame");132