Am Wed, 17 Nov 2010 22:42:34 -0200 schrieb Gustavo Sverzut Barbieri:

> On Wed, Nov 17, 2010 at 10:26 PM, Andreas Volz <[email protected]>
> wrote:
> > ...
> > It would be nice to access params from build in types the same way.
> > Currently my application framework has a generic data model API. I
> > just reference widgets in an edje by name and set params to modify
> > them in my application.
> >
> > But if there's no param access for internal types I've to hide this
> > fact and simulate a property API like with param_set/get. Would be
> > nice to have it in the edje API.
> 
> Although I did it, my memory is known to be really bad. So look at the
> code. It shouldn't be hard to expose that the way you want.

I just hacked a prototype to fit my needs. This code diff below just
allows to set internal text Evas_Object text property just like for
externals. I think this is really useful.

If nobody complains with this changes I'll start to support more
internal objects and parameters and also implement the get function for
it and simply commit it.

(Sorry for the line breaks, I transfered it with dump MS Outlook from another 
pc.)

Regards
        Andreas

> svn diff  
Index: src/lib/edje_program.c
===================================================================
--- src/lib/edje_program.c      (Revision 54623)
+++ src/lib/edje_program.c      (Arbeitskopie)
@@ -2034,7 +2034,7 @@
    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 +2099,7 @@
    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),
Index: src/lib/edje_private.h
===================================================================
--- src/lib/edje_private.h      (Revision 54623)
+++ src/lib/edje_private.h      (Arbeitskopie)
@@ -1770,7 +1770,7 @@
 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_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_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);
Index: src/lib/edje_external.c
===================================================================
--- src/lib/edje_external.c     (Revision 54623)
+++ src/lib/edje_external.c     (Arbeitskopie)
@@ -125,7 +125,7 @@
        return EINA_FALSE;
      }
 
-   return _edje_external_param_set(rp->swallowed_object, param);
+   return _edje_external_param_set(obj, rp, param);
 }
 
 /**
@@ -585,12 +585,23 @@
 }
 
 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,7 +610,7 @@
            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
Index: src/lib/edje_embryo.c
===================================================================
--- src/lib/edje_embryo.c       (Revision 54623)
+++ src/lib/edje_embryo.c       (Arbeitskopie)
@@ -2594,7 +2594,7 @@
    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[]) */
@@ -2647,7 +2647,7 @@
    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[]) */
@@ -2748,7 +2748,7 @@
    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[]) */
@@ -2849,7 +2849,7 @@
    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[]) */
@@ -2900,7 +2900,7 @@
    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

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to