allow to edje_object_part_external_param_set/edje_object_part_external_param_get with internal objects too. Currently implemented support for EDJE_PART_TYPE_TEXT and EDJE_PART_TYPE_TEXTBLOCK and param "text".

SVN revision: 54727
This commit is contained in:
Andreas Volz 2010-11-19 22:50:33 +00:00
parent 249a42185d
commit f6b5aa850a
4 changed files with 54 additions and 30 deletions

View File

@ -2568,7 +2568,7 @@ _edje_embryo_fn_external_param_get_int(Embryo_Program *ep, Embryo_Cell *params)
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_INT;
eep.i = 0;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
return eep.i;
}
@ -2594,7 +2594,7 @@ _edje_embryo_fn_external_param_set_int(Embryo_Program *ep, Embryo_Cell *params)
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_INT;
eep.i = params[3];
return _edje_external_param_set(rp->swallowed_object, &eep);
return _edje_external_param_set(NULL, rp, &eep);
}
/* Float:external_param_get_float(id, param_name[]) */
@ -2620,7 +2620,7 @@ _edje_embryo_fn_external_param_get_float(Embryo_Program *ep, Embryo_Cell *params
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
eep.d = 0.0;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
v = eep.d;
return EMBRYO_FLOAT_TO_CELL(v);
}
@ -2647,7 +2647,7 @@ _edje_embryo_fn_external_param_set_float(Embryo_Program *ep, Embryo_Cell *params
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
eep.d = EMBRYO_CELL_TO_FLOAT(params[3]);
return _edje_external_param_set(rp->swallowed_object, &eep);
return _edje_external_param_set(NULL, rp, &eep);
}
/* external_param_get_strlen(id, param_name[]) */
@ -2672,7 +2672,7 @@ _edje_embryo_fn_external_param_get_strlen(Embryo_Program *ep, Embryo_Cell *param
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_STRING;
eep.s = NULL;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
if (!eep.s) return 0;
return strlen(eep.s);
}
@ -2703,7 +2703,7 @@ _edje_embryo_fn_external_param_get_str(Embryo_Program *ep, Embryo_Cell *params)
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_STRING;
eep.s = NULL;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
if (!eep.s) goto error;
src_len = strlen(eep.s);
if (src_len < dst_len)
@ -2748,7 +2748,7 @@ _edje_embryo_fn_external_param_set_str(Embryo_Program *ep, Embryo_Cell *params)
GETSTR(val, params[3]);
if (!val) return 0;
eep.s = val;
return _edje_external_param_set(rp->swallowed_object, &eep);
return _edje_external_param_set(NULL, rp, &eep);
}
/* external_param_get_choice_len(id, param_name[]) */
@ -2773,7 +2773,7 @@ _edje_embryo_fn_external_param_get_choice_len(Embryo_Program *ep, Embryo_Cell *p
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_CHOICE;
eep.s = NULL;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
if (!eep.s) return 0;
return strlen(eep.s);
}
@ -2804,7 +2804,7 @@ _edje_embryo_fn_external_param_get_choice(Embryo_Program *ep, Embryo_Cell *param
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_CHOICE;
eep.s = NULL;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
if (!eep.s) goto error;
src_len = strlen(eep.s);
if (src_len < dst_len)
@ -2849,7 +2849,7 @@ _edje_embryo_fn_external_param_set_choice(Embryo_Program *ep, Embryo_Cell *param
GETSTR(val, params[3]);
if (!val) return 0;
eep.s = val;
return _edje_external_param_set(rp->swallowed_object, &eep);
return _edje_external_param_set(NULL, rp, &eep);
}
/* external_param_get_bool(id, param_name[]) */
@ -2874,7 +2874,7 @@ _edje_embryo_fn_external_param_get_bool(Embryo_Program *ep, Embryo_Cell *params)
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
eep.i = 0;
_edje_external_param_get(rp->swallowed_object, &eep);
_edje_external_param_get(NULL, rp, &eep);
return eep.i;
}
@ -2900,7 +2900,7 @@ _edje_embryo_fn_external_param_set_bool(Embryo_Program *ep, Embryo_Cell *params)
eep.name = param_name;
eep.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
eep.i = params[3];
return _edje_external_param_set(rp->swallowed_object, &eep);
return _edje_external_param_set(NULL, rp, &eep);
}
void

View File

@ -125,7 +125,7 @@ edje_object_part_external_param_set(Evas_Object *obj, const char *part, const Ed
return EINA_FALSE;
}
return _edje_external_param_set(rp->swallowed_object, param);
return _edje_external_param_set(obj, rp, param);
}
/**
@ -174,7 +174,7 @@ edje_object_part_external_param_get(const Evas_Object *obj, const char *part, Ed
return EINA_FALSE;
}
return _edje_external_param_get(rp->swallowed_object, param);
return _edje_external_param_get(obj, rp, param);
}
@ -585,12 +585,23 @@ _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *s
}
Eina_Bool
_edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param)
_edje_external_param_set(Evas_Object *obj, Edje_Real_Part *rp, const Edje_External_Param *param)
{
Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type");
Evas_Object *swallowed_object = rp->swallowed_object;
Edje_External_Type *type = evas_object_data_get(swallowed_object, "Edje_External_Type");
if (!type)
{
ERR("no external type for object %p", obj);
if ((rp->part->type == EDJE_PART_TYPE_TEXT) ||
(rp->part->type == EDJE_PART_TYPE_TEXTBLOCK))
{
if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) &&
(!strcmp (param->name, "text")) && (obj))
{
return edje_object_part_text_set(obj, rp->part->name, param->s);
}
}
ERR("no external type for object %p", swallowed_object);
return EINA_FALSE;
}
if (!type->param_set)
@ -599,16 +610,28 @@ _edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param)
type->module_name, type->module);
return EINA_FALSE;
}
return type->param_set(type->data, obj, param);
return type->param_set(type->data, swallowed_object, param);
}
Eina_Bool
_edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param)
_edje_external_param_get(const Evas_Object *obj, Edje_Real_Part *rp, Edje_External_Param *param)
{
Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type");
Evas_Object *swallowed_object = rp->swallowed_object;
Edje_External_Type *type = evas_object_data_get(swallowed_object, "Edje_External_Type");
if (!type)
{
ERR("no external type for object %p", obj);
if ((rp->part->type == EDJE_PART_TYPE_TEXT) ||
(rp->part->type == EDJE_PART_TYPE_TEXTBLOCK))
{
const char *text;
param->type = EDJE_EXTERNAL_PARAM_TYPE_STRING;
param->name = "text";
text = edje_object_part_text_get(obj, rp->part->name);
strcpy (param->s, text);
return EINA_TRUE;
}
ERR("no external type for object %p", swallowed_object);
return EINA_FALSE;
}
if (!type->param_get)
@ -617,7 +640,7 @@ _edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param)
type->module_name, type->module);
return EINA_FALSE;
}
return type->param_get(type->data, obj, param);
return type->param_get(type->data, swallowed_object, param);
}
Evas_Object*

View File

@ -1770,8 +1770,8 @@ void _edje_external_init();
void _edje_external_shutdown();
Evas_Object *_edje_external_type_add(const char *type_name, Evas *evas, Evas_Object *parent, const Eina_List *params, const char *part_name);
void _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *source);
Eina_Bool _edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param) EINA_ARG_NONNULL(1, 2);
Eina_Bool _edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param) EINA_ARG_NONNULL(1, 2);
Eina_Bool _edje_external_param_set(Evas_Object *obj, Edje_Real_Part *rp, const Edje_External_Param *param) EINA_ARG_NONNULL(1, 2);
Eina_Bool _edje_external_param_get(const Evas_Object *obj, Edje_Real_Part *rp, Edje_External_Param *param) EINA_ARG_NONNULL(1, 2);
Evas_Object *_edje_external_content_get(const Evas_Object *obj, const char *content) EINA_ARG_NONNULL(1, 2);
void _edje_external_params_free(Eina_List *params, Eina_Bool free_strings);
void _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep,

View File

@ -1387,17 +1387,18 @@ _edje_external_param_info_get(const Evas_Object *obj, const char *name)
}
static Edje_External_Param *
_edje_param_external_get(const Evas_Object *obj, const char *name, Edje_External_Param *param)
_edje_param_external_get(Edje_Real_Part *rp, const char *name, Edje_External_Param *param)
{
Evas_Object *swallowed_object = rp->swallowed_object;
const Edje_External_Param_Info *info;
info = _edje_external_param_info_get(obj, name);
info = _edje_external_param_info_get(swallowed_object, name);
if (!info) return NULL;
memset(param, 0, sizeof(*param));
param->name = info->name;
param->type = info->type;
if (!_edje_external_param_get(obj, param)) return NULL;
if (!_edje_external_param_get(NULL, rp, param)) return NULL;
return param;
}
@ -1999,7 +2000,7 @@ _edje_param_copy(Edje_Real_Part *src_part, const char *src_param, Edje_Real_Part
if (src_part->part->type == EDJE_PART_TYPE_EXTERNAL)
{
if (!_edje_param_external_get
(src_part->swallowed_object, src_param, &val))
(src_part, src_param, &val))
{
ERR("cannot get parameter '%s' of part '%s'",
src_param, src_part->part->name);
@ -2034,7 +2035,7 @@ _edje_param_copy(Edje_Real_Part *src_part, const char *src_param, Edje_Real_Part
if (dst_part->part->type == EDJE_PART_TYPE_EXTERNAL)
{
val.name = dst_param;
if (!_edje_external_param_set(dst_part->swallowed_object, &val))
if (!_edje_external_param_set(NULL, dst_part, &val))
{
ERR("failed to set parameter '%s' (%s) of part '%s'",
dst_param, edje_external_param_type_str(dst_info->type),
@ -2099,7 +2100,7 @@ _edje_param_set(Edje_Real_Part *part, const char *param, const char *value)
if (part->part->type == EDJE_PART_TYPE_EXTERNAL)
{
val.name = param;
if (!_edje_external_param_set(part->swallowed_object, &val))
if (!_edje_external_param_set(NULL, part, &val))
{
ERR("failed to set parameter '%s' (%s) of part '%s'",
param, edje_external_param_type_str(info->type),