allow to edje_object_part_external_param_set/edje_object_part_external_param_get...
authorandreas <andreas@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Nov 2010 22:50:33 +0000 (22:50 +0000)
committerandreas <andreas@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Nov 2010 22:50:33 +0000 (22:50 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@54727 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_embryo.c
src/lib/edje_external.c
src/lib/edje_private.h
src/lib/edje_program.c

index fc46102..e95359f 100644 (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
index dbb87e1..c4bd80d 100644 (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*
index 7dee495..98c293b 100644 (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,
index 03328de..2472409 100644 (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),