efl
197 строк · 5.7 Кб
1#include "private.h"2#include <assert.h>3
4typedef struct _Elm_Params_Panes Elm_Params_Panes;5
6struct _Elm_Params_Panes {7Elm_Params base;8Evas_Object *content_left;9Evas_Object *content_right;10Eina_Bool is_horizontal;11Eina_Bool horizontal;12Eina_Bool is_left_size;13double left_size;14Eina_Bool is_fixed;15Eina_Bool fixed;16};17
18static void external_panes_state_set(void *data EINA_UNUSED,19Evas_Object *obj, const void *from_params,20const void *to_params, float pos EINA_UNUSED)21{
22const Elm_Params_Panes *p;23
24if (to_params) p = to_params;25else if (from_params) p = from_params;26else return;27
28if (p->content_left)29elm_object_part_content_set(obj, "left", p->content_left);30
31if (p->content_right)32elm_object_part_content_set(obj, "right", p->content_right);33
34if (p->is_left_size)35elm_panes_content_left_size_set(obj, p->left_size);36
37if (p->is_horizontal)38elm_panes_horizontal_set(obj, p->horizontal);39
40if (p->is_fixed)41elm_panes_fixed_set(obj, p->fixed);42}
43
44static Eina_Bool external_panes_param_set(void *data EINA_UNUSED,45Evas_Object *obj, const Edje_External_Param *param)46{
47if ((!strcmp(param->name, "content left"))48&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING))49{50Evas_Object *content = external_common_param_elm_layout_get(obj, param);51if ((strcmp(param->s, "")) && (!content))52return EINA_FALSE;53elm_object_part_content_set(obj, "left", content);54return EINA_TRUE;55}56else if ((!strcmp(param->name, "content right"))57&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING))58{59Evas_Object *content = external_common_param_elm_layout_get(obj, param);60if ((strcmp(param->s, "")) && (!content))61return EINA_FALSE;62elm_object_part_content_set(obj, "right", content);63return EINA_TRUE;64}65else if ((!strcmp(param->name, "horizontal"))66&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))67{68elm_panes_horizontal_set(obj, param->i);69return EINA_TRUE;70}71else if ((!strcmp(param->name, "left size"))72&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE))73{74elm_panes_content_left_size_set(obj, param->d);75return EINA_TRUE;76}77else if ((!strcmp(param->name, "fixed"))78&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))79{80elm_panes_fixed_set(obj, param->i);81return EINA_TRUE;82}83
84ERR("unknown parameter '%s' of type '%s'",85param->name, edje_external_param_type_str(param->type));86
87return EINA_FALSE;88}
89
90static Eina_Bool91external_panes_param_get(void *data EINA_UNUSED, const Evas_Object *obj,92Edje_External_Param *param)93{
94if (!strcmp(param->name, "content left"))95{96/* not easy to get content name back from live object */97return EINA_FALSE;98}99else if (!strcmp(param->name, "content right"))100{101/* not easy to get content name back from live object */102return EINA_FALSE;103}104else if ((!strcmp(param->name, "horizontal"))105&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))106{107param->i = elm_panes_horizontal_get(obj);108return EINA_TRUE;109}110else if ((!strcmp(param->name, "left size"))111&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE))112{113param->d = elm_panes_content_left_size_get(obj);114return EINA_TRUE;115}116else if ((!strcmp(param->name, "fixed"))117&& (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL))118{119param->i = elm_panes_fixed_get(obj);120return EINA_TRUE;121}122
123ERR("unknown parameter '%s' of type '%s'",124param->name, edje_external_param_type_str(param->type));125
126return EINA_FALSE;127}
128
129static void *130external_panes_params_parse(void *data EINA_UNUSED, Evas_Object *obj,131const Eina_List *params)132{
133Elm_Params_Panes *mem;134Edje_External_Param *param;135const Eina_List *l;136
137mem = calloc(1, sizeof(Elm_Params_Panes));138if (!mem)139return NULL;140
141EINA_LIST_FOREACH(params, l, param)142{143if (!strcmp(param->name, "content left"))144mem->content_left = external_common_param_elm_layout_get(obj, param);145else if (!strcmp(param->name, "content right"))146mem->content_right = external_common_param_elm_layout_get(obj, param);147else if (!strcmp(param->name, "horizontal"))148{149mem->is_horizontal = EINA_TRUE;150mem->horizontal = param->i;151}152else if (!strcmp(param->name, "left size"))153{154mem->is_left_size = EINA_TRUE;155mem->left_size = param->d;156}157else if (!strcmp(param->name, "fixed"))158{159mem->is_fixed = EINA_TRUE;160mem->fixed = param->i;161}162}163
164return mem;165}
166
167static Evas_Object *168external_panes_content_get(void *data EINA_UNUSED, const Evas_Object *obj,169const char *content)170{
171if (!strcmp(content, "left"))172return elm_object_part_content_get(obj, "left");173else if (!strcmp(content, "right"))174return elm_object_part_content_get(obj, "right");175
176ERR("unknown content '%s'", content);177
178return NULL;179}
180
181static void external_panes_params_free(void *params)182{
183free(params);184}
185
186static Edje_External_Param_Info external_panes_params[] = {187DEFINE_EXTERNAL_COMMON_PARAMS,188EDJE_EXTERNAL_PARAM_INFO_STRING("content left"),189EDJE_EXTERNAL_PARAM_INFO_STRING("content right"),190EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"),191EDJE_EXTERNAL_PARAM_INFO_DOUBLE("left size"),192EDJE_EXTERNAL_PARAM_INFO_BOOL("fixed"),193EDJE_EXTERNAL_PARAM_INFO_SENTINEL
194};195
196DEFINE_EXTERNAL_ICON_ADD(panes, "panes");197DEFINE_EXTERNAL_TYPE_SIMPLE(panes, "Panes");198