Dear Aharon, After this commit, it's hard to read all the evas informations at a glance. Information such as min, max, size, position, ... are contracted and we have to expand them all by manual. In my opinion, previous output like "min size: -1 -1" looks better for users. How do you think?
Thanks in advance. Daniel Juyung Seo (SeoZ) On Tue, Jan 29, 2013 at 3:39 PM, Enlightenment SVN < no-re...@enlightenment.org> wrote: > Log: > Clouseau: Added EO info support > > The Clouseau client is compatible with old Clouseau applications > supporting EcoreConnEet. > > Signed-off-by: Aharon Hillel <a.hil...@samsung.com> > > Author: jackdanielz > Date: 2013-01-28 22:39:51 -0800 (Mon, 28 Jan 2013) > New Revision: 83412 > Trac: http://trac.enlightenment.org/e/changeset/83412 > > Modified: > trunk/clouseau/src/lib/Clouseau.h trunk/clouseau/src/lib/clouseau_data.c > trunk/clouseau/src/lib/clouseau_object_information.c > trunk/clouseau/src/lib/clouseau_private.h > > Modified: trunk/clouseau/src/lib/Clouseau.h > =================================================================== > --- trunk/clouseau/src/lib/Clouseau.h 2013-01-29 06:37:01 UTC (rev 83411) > +++ trunk/clouseau/src/lib/Clouseau.h 2013-01-29 06:39:51 UTC (rev 83412) > @@ -142,6 +142,7 @@ > struct _Clouseau_Tree_Item > { > Eina_List *children; > + Eina_List *eo_info; /* A list of Eo_Dbg_Info, to be shown */ > const char *name; > unsigned long long ptr; /* Just a ptr, we keep the value but not > accessing mem */ > Clouseau_Object *info; > > Modified: trunk/clouseau/src/lib/clouseau_data.c > =================================================================== > --- trunk/clouseau/src/lib/clouseau_data.c 2013-01-29 06:37:01 UTC > (rev 83411) > +++ trunk/clouseau/src/lib/clouseau_data.c 2013-01-29 06:39:51 UTC > (rev 83412) > @@ -22,11 +22,35 @@ > static Eet_Data_Descriptor *clouseau_protocol_edd = NULL; > static Eet_Data_Descriptor *clouseau_map_point_props_edd = NULL; > > +static Eet_Data_Descriptor *eo_string_edd = NULL; > +static Eet_Data_Descriptor *eo_int_edd = NULL; > +static Eet_Data_Descriptor *eo_bool_edd = NULL; > +static Eet_Data_Descriptor *eo_ptr_edd = NULL; > +static Eet_Data_Descriptor *eo_double_edd = NULL; > +static Eet_Data_Descriptor *eo_list_edd = NULL; > +static Eet_Data_Descriptor *eo_dbg_info_edd = NULL; > + > static void > +_clouseau_eo_info_free(Clouseau_Eo_Dbg_Info *parent) > +{ > + Clouseau_Eo_Dbg_Info *eo; > + > + if (parent->type == EO_DBG_INFO_TYPE_LIST) > + EINA_LIST_FREE(parent->un_dbg_info.dbg.list, eo) > + _clouseau_eo_info_free(eo); > + > + free(parent); > +} > + > +static void > _clouseau_tree_item_free(Clouseau_Tree_Item *parent) > { > Clouseau_Tree_Item *treeit; > + Clouseau_Eo_Dbg_Info *eo; > > + EINA_LIST_FREE(parent->eo_info, eo) > + _clouseau_eo_info_free(eo); > + > EINA_LIST_FREE(parent->children, treeit) > _clouseau_tree_item_free(treeit); > > @@ -132,6 +156,8 @@ > > EET_DATA_DESCRIPTOR_ADD_LIST(clouseau_tree_edd, Clouseau_Tree_Item, > "children", children, clouseau_tree_edd); > + EET_DATA_DESCRIPTOR_ADD_LIST(clouseau_tree_edd, Clouseau_Tree_Item, > + "eo_info", eo_info, eo_dbg_info_edd); > EET_DATA_DESCRIPTOR_ADD_BASIC(clouseau_tree_edd, Clouseau_Tree_Item, > "name", name, EET_T_STRING); > EET_DATA_DESCRIPTOR_ADD_BASIC(clouseau_tree_edd, Clouseau_Tree_Item, > @@ -476,9 +502,217 @@ > extra_props.type, clouseau_union_edd); > } > > +/* START EO descs */ > +struct _Clouseau_Eo_Dbg_Info_Mapping > +{ > + Eo_Dbg_Info_Type u; > + const char *name; > +}; > +typedef struct _Clouseau_Eo_Dbg_Info_Mapping Clouseau_Eo_Dbg_Info_Mapping; > + > +static Clouseau_Eo_Dbg_Info_Mapping eet_dbg_info_mapping[] = > +{ > + { EO_DBG_INFO_TYPE_STRING, EO_DBG_INFO_TYPE_STRING_STR }, > + { EO_DBG_INFO_TYPE_INT, EO_DBG_INFO_TYPE_INT_STR }, > + { EO_DBG_INFO_TYPE_BOOL, EO_DBG_INFO_TYPE_BOOL_STR }, > + { EO_DBG_INFO_TYPE_PTR, EO_DBG_INFO_TYPE_PTR_STR }, > + { EO_DBG_INFO_TYPE_DOUBLE, EO_DBG_INFO_TYPE_DOUBLE_STR }, > + { EO_DBG_INFO_TYPE_LIST, EO_DBG_INFO_TYPE_LIST_STR }, > + { EO_DBG_INFO_TYPE_UNKNOWN, NULL } > +}; > + > +static const char * > +_dbg_info_union_type_get(const void *data, Eina_Bool *unknow) > +{ /* _union_type_get */ > + const Eo_Dbg_Info_Type *u = data; > + int i; > + > + if (unknow) > + *unknow = EINA_FALSE; > + > + for (i = 0; eet_dbg_info_mapping[i].name != NULL; ++i) > + if (*u == eet_dbg_info_mapping[i].u) > + return eet_dbg_info_mapping[i].name; > + > + if (unknow) > + *unknow = EINA_TRUE; > + > + return NULL; > +} > + > +static Eina_Bool > +_dbg_info_union_type_set(const char *type, void *data, Eina_Bool unknow) > +{ /* same as _union_type_set */ > + Eo_Dbg_Info_Type *u = data; > + int i; > + > + if (unknow) > + return EINA_FALSE; > + > + for (i = 0; eet_dbg_info_mapping[i].name != NULL; ++i) > + if (strcmp(eet_dbg_info_mapping[i].name, type) == 0) > + { > + *u = eet_dbg_info_mapping[i].u; > + return EINA_TRUE; > + } > + > + return EINA_FALSE; > +} > + > +Eet_Data_Descriptor * > +clouseau_string_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_string); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_BASIC (d, Clouseau_st_string, "s", > + s, EET_T_STRING); > + > + return d; > +} > + > +Eet_Data_Descriptor * > +clouseau_int_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_int); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_BASIC (d, Clouseau_st_int, "i", > + i, EET_T_INT); > + > + return d; > +} > + > +Eet_Data_Descriptor * > +clouseau_bool_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_bool); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_BASIC (d, Clouseau_st_bool, "b", > + b, EET_T_UCHAR); > + > + return d; > +} > + > +Eet_Data_Descriptor * > +clouseau_ptr_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_ptr); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_BASIC (d, Clouseau_st_ptr, "p", > + p, EET_T_ULONG_LONG); > + > + return d; > +} > + > +Eet_Data_Descriptor * > +clouseau_double_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_double); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_BASIC (d, Clouseau_st_double, "d", > + d, EET_T_DOUBLE); > + > + return d; > +} > + > +Eet_Data_Descriptor * > +clouseau_list_desc_make(void) > +{ > + Eet_Data_Descriptor *d; > + > + Eet_Data_Descriptor_Class eddc; > + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_st_dbg_list); > + d = eet_data_descriptor_stream_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_LIST (d, Clouseau_st_dbg_list, > + "list", list, eo_dbg_info_edd); /* Carefull, has to be initiated > */ > + > + return d; > +} > + > static void > +_clouseau_eo_descs_make(void) > +{ > + Eet_Data_Descriptor_Class eddc; > + > + eo_string_edd = clouseau_string_desc_make(); > + eo_int_edd = clouseau_int_desc_make(); > + eo_bool_edd = clouseau_bool_desc_make(); > + eo_ptr_edd = clouseau_ptr_desc_make(); > + eo_double_edd = clouseau_double_desc_make(); > + > + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_Eo_Dbg_Info); > + eo_dbg_info_edd = eet_data_descriptor_file_new(&eddc); > + EET_DATA_DESCRIPTOR_ADD_BASIC (eo_dbg_info_edd, Clouseau_Eo_Dbg_Info, > + "name", name, EET_T_STRING); > + EET_DATA_DESCRIPTOR_ADD_BASIC (eo_dbg_info_edd, Clouseau_Eo_Dbg_Info, > + "type", type, EET_T_INT); > + > + /* Here because clouseau_list_desc_make() uses eo_dbg_info_edd */ > + eo_list_edd = clouseau_list_desc_make(); > + > + /* for union */ > + eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION; > + eddc.func.type_get = _dbg_info_union_type_get; > + eddc.func.type_set = _dbg_info_union_type_set; > + clouseau_union_edd = eet_data_descriptor_file_new(&eddc); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_STRING_STR > + ,eo_string_edd); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_INT_STR > + ,eo_int_edd); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_BOOL_STR > + ,eo_bool_edd); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_PTR_STR > + ,eo_ptr_edd); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_DOUBLE_STR > + ,eo_double_edd); > + > + EET_DATA_DESCRIPTOR_ADD_MAPPING( > + clouseau_union_edd, EO_DBG_INFO_TYPE_LIST_STR > + ,eo_list_edd); > + > + EET_DATA_DESCRIPTOR_ADD_UNION(eo_dbg_info_edd, > + Clouseau_Eo_Dbg_Info, > + "un_dbg_info", un_dbg_info, > + type, clouseau_union_edd); > +} > +/* END EO descs */ > + > + > + > +static void > clouseau_data_descriptors_init(void) > { > + _clouseau_eo_descs_make(); > _clouseau_bmp_req_desc_make(); > _clouseau_bmp_info_desc_make(); > _clouseau_shot_list_desc_make(); > @@ -495,6 +729,14 @@ > static void > clouseau_data_descriptors_shutdown(void) > { > + eet_data_descriptor_free(eo_string_edd); > + eet_data_descriptor_free(eo_int_edd); > + eet_data_descriptor_free(eo_bool_edd); > + eet_data_descriptor_free(eo_ptr_edd); > + eet_data_descriptor_free(eo_double_edd); > + eet_data_descriptor_free(eo_list_edd); > + eet_data_descriptor_free(eo_dbg_info_edd); > + > eet_data_descriptor_free(clouseau_connect_edd); > eet_data_descriptor_free(clouseau_app_add_edd); > eet_data_descriptor_free(clouseau_data_req_edd); > @@ -903,9 +1145,9 @@ > /* Add the bitmaps to the actuall app data struct */ > (*a)->view = eina_list_append((*a)->view, st); > } > - > free(t); > } > + > eet_close(fp); > > return EINA_TRUE; > > Modified: trunk/clouseau/src/lib/clouseau_object_information.c > =================================================================== > --- trunk/clouseau/src/lib/clouseau_object_information.c 2013-01-29 > 06:37:01 UTC (rev 83411) > +++ trunk/clouseau/src/lib/clouseau_object_information.c 2013-01-29 > 06:39:51 UTC (rev 83412) > @@ -1,17 +1,16 @@ > #include "Clouseau.h" > -typedef struct _Inf_Clouseau_Tree_Item Inf_Clouseau_Tree_Item; > -struct _Inf_Clouseau_Tree_Item > -{ > - Eina_List *children; > - Evas_Object *icon; > - const char *string; > -}; > +#include "clouseau_private.h" > +#define ELM_INTERNAL_API_ARGESFSDFEFC > +#include <elm_widget.h> > > -static Eina_List *information_tree = NULL; > static Evas_Object *prop_list = NULL; > static Elm_Genlist_Item_Class itc; > > static void > +_clouseau_object_dbg_string_build(Clouseau_Eo_Dbg_Info *eo, > + char *buf, int buf_size); > + > +static void > _gl_selected(void *data EINA_UNUSED, Evas_Object *pobj EINA_UNUSED, > void *event_info EINA_UNUSED) > { > @@ -23,15 +22,15 @@ > gl_exp(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void > *event_info) > { > Elm_Object_Item *glit = event_info; > - Inf_Clouseau_Tree_Item *parent = elm_object_item_data_get(glit); > - Inf_Clouseau_Tree_Item *tit; > Eina_List *itr; > > - EINA_LIST_FOREACH(parent->children, itr, tit) > + Clouseau_Eo_Dbg_Info *eo = elm_object_item_data_get(glit); > + Clouseau_Eo_Dbg_Info *child; > + EINA_LIST_FOREACH(eo->un_dbg_info.dbg.list, itr, child) > { > - Elm_Genlist_Item_Type iflag = (tit->children) ? > + Elm_Genlist_Item_Type iflag = (child->type == > EO_DBG_INFO_TYPE_LIST) ? > ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE; > - elm_genlist_item_append(prop_list, &itc, tit, glit, > + elm_genlist_item_append(prop_list, &itc, child, glit, > iflag, _gl_selected, NULL); > } > } > @@ -68,8 +67,10 @@ > item_text_get(void *data, Evas_Object *obj EINA_UNUSED, > const char *part EINA_UNUSED) > { > - Inf_Clouseau_Tree_Item *tit = data; > - return strdup(tit->string); > + Clouseau_Eo_Dbg_Info *eo = data; > + char buf[1024]; > + _clouseau_object_dbg_string_build(eo, (char*)buf, 1024); > + return strdup(buf); > } > > EAPI Evas_Object * > @@ -93,31 +94,6 @@ > return prop_list; > } > > -static void > -_clouseau_item_tree_item_free(Inf_Clouseau_Tree_Item *parent) > -{ > - Inf_Clouseau_Tree_Item *treeit; > - > - EINA_LIST_FREE(parent->children, treeit) > - { > - _clouseau_item_tree_item_free(treeit); > - } > - > - eina_stringshare_del(parent->string); > - free(parent); > -} > - > -static void > -_clouseau_item_tree_free(void) > -{ > - Inf_Clouseau_Tree_Item *treeit; > - > - EINA_LIST_FREE(information_tree, treeit) > - { > - _clouseau_item_tree_item_free(treeit); > - } > -} > - > EAPI void > clouseau_object_information_free(Clouseau_Object *oinfo) > { > @@ -166,151 +142,81 @@ > free(oinfo); > } > > -EAPI Clouseau_Object * > -clouseau_object_information_get(Clouseau_Tree_Item *treeit) > -{ > - Clouseau_Object *oinfo; > - Evas_Object *obj = (void*) (uintptr_t) treeit->ptr; > - const Evas_Map *map = NULL; > +static Eina_List * > +_clouseau_eo_list_convert(Eo_Dbg_Info *root) > +{ /* This function converts a list of Eo_Dbg_Info > + * to a list of Clouseau_Eo_Dbg_Info. > + * This is required because we would like to keep the def of > + * Eo_Dbg_Info in EO code. Thus, avoiding API/ABI error if user > + * does not do a full update of Clouseau and EO */ > + Eina_List *l; > + Eina_List *new_list = NULL; > + void *eo; > > - if (!treeit->is_obj) > - return NULL; > + if (!root && eo_dbg_type_get(root) != EO_DBG_INFO_TYPE_LIST) > + return new_list; > + Eina_List *root_list = eo_dbg_union_get(root)->list; > > - oinfo = calloc(1, sizeof(Clouseau_Object)); > + EINA_LIST_FOREACH(root_list, l, eo) > + { > + Eo_Dbg_Info_Union *un = eo_dbg_union_get(eo); > + Clouseau_Eo_Dbg_Info *info = calloc(1, sizeof(*info)); > + info->type = eo_dbg_type_get(eo); > + info->name = eo_dbg_name_get(eo); > > - oinfo->evas_props.pass_events = evas_object_pass_events_get(obj); > - oinfo->evas_props.repeat_events = evas_object_repeat_events_get(obj); > - oinfo->evas_props.propagate_events = > evas_object_propagate_events_get(obj); > - oinfo->evas_props.has_focus = evas_object_focus_get(obj); > - oinfo->evas_props.is_visible = evas_object_visible_get(obj); > - oinfo->evas_props.name = > eina_stringshare_add(evas_object_name_get(obj)); > - oinfo->evas_props.layer = evas_object_layer_get(obj); > - evas_object_geometry_get(obj, &oinfo->evas_props.x, > &oinfo->evas_props.y, > - &oinfo->evas_props.w, &oinfo->evas_props.h); > - oinfo->evas_props.scale = evas_object_scale_get(obj); > + switch(info->type) > + { > + case EO_DBG_INFO_TYPE_STRING: > + info->un_dbg_info.text.s = un->text; > + break; > > - evas_object_size_hint_min_get(obj, &oinfo->evas_props.min_w, > - &oinfo->evas_props.min_h); > - evas_object_size_hint_max_get(obj, &oinfo->evas_props.max_w, > - &oinfo->evas_props.max_h); > - evas_object_size_hint_request_get(obj, &oinfo->evas_props.req_w, > - &oinfo->evas_props.req_h); > + case EO_DBG_INFO_TYPE_INT: > + info->un_dbg_info.intg.i = un->i; > + break; > > - evas_object_size_hint_align_get(obj, &oinfo->evas_props.align_x, > - &oinfo->evas_props.align_y); > - evas_object_size_hint_weight_get(obj, &oinfo->evas_props.weight_x, > - &oinfo->evas_props.weight_y); > + case EO_DBG_INFO_TYPE_BOOL: > + info->un_dbg_info.bl.b = un->b; > + break; > > - evas_object_color_get(obj, &oinfo->evas_props.r, &oinfo->evas_props.g, > - &oinfo->evas_props.b, &oinfo->evas_props.a); > + case EO_DBG_INFO_TYPE_PTR: > + info->un_dbg_info.ptr.p = (unsigned long long) (unsigned > long) > + un->ptr; > + break; > > - oinfo->evas_props.mode = evas_object_pointer_mode_get(obj); > + case EO_DBG_INFO_TYPE_DOUBLE: > + info->un_dbg_info.dbl.d = un->dbl; > + break; > > - oinfo->evas_props.is_clipper = !!evas_object_clipees_get(obj); > - oinfo->evas_props.clipper = (uintptr_t) evas_object_clip_get(obj); > - oinfo->evas_props.bt = eina_stringshare_ref(evas_object_data_get(obj, > ".clouseau.bt")); > + case EO_DBG_INFO_TYPE_LIST: > + info->un_dbg_info.dbg.list = > + _clouseau_eo_list_convert(eo); > + break; > > - map = evas_object_map_get(obj); > - if (map) > - { /* Save map coords count info if object has map */ > - oinfo->evas_props.points_count = evas_map_count_get(map); > - if (oinfo->evas_props.points_count) > - { > - int i; > - Clouseau_Evas_Map_Point_Props *p; > - oinfo->evas_props.points = > calloc(oinfo->evas_props.points_count, > - sizeof(Clouseau_Evas_Map_Point_Props)); > - > - for(i = 0 ; i < oinfo->evas_props.points_count; i++) > - { > - p = &oinfo->evas_props.points[i]; > - evas_map_point_coord_get(map, i, &p->x, &p->y, &p->z); > - } > + default: /* Unknown Type, keep zero */ > + break; > } > - } > > - if (elm_widget_is(obj)) > - { > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_ELM; > - > - oinfo->extra_props.u.elm.type = > - eina_stringshare_add(elm_widget_type_get(obj)); > - oinfo->extra_props.u.elm.style = > - eina_stringshare_add(elm_widget_style_get(obj)); > - oinfo->extra_props.u.elm.scale = elm_widget_scale_get(obj); > - oinfo->extra_props.u.elm.has_focus = elm_object_focus_get(obj); > - oinfo->extra_props.u.elm.is_disabled = > elm_widget_disabled_get(obj); > - oinfo->extra_props.u.elm.is_mirrored = > elm_widget_mirrored_get(obj); > - oinfo->extra_props.u.elm.is_mirrored_automatic = > - elm_widget_mirrored_automatic_get(obj); > + new_list = eina_list_append(new_list, info); > } > - else if (!strcmp("text", evas_object_type_get(obj))) > - { > - const char *font; > - int size; > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_TEXT; > > - evas_object_text_font_get(obj, &font, &size); > - oinfo->extra_props.u.text.font = eina_stringshare_add(font); > - oinfo->extra_props.u.text.size = size; > - oinfo->extra_props.u.text.source = > - eina_stringshare_add(evas_object_text_font_source_get(obj)); > - oinfo->extra_props.u.text.text = > eina_stringshare_add(evas_object_text_text_get(obj)); > - } > - else if (!strcmp("image", evas_object_type_get(obj))) > - { > - const char *file, *key; > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_IMAGE; > + return new_list; > +} > > - evas_object_image_file_get(obj, &file, &key); > - oinfo->extra_props.u.image.file = eina_stringshare_add(file); > - oinfo->extra_props.u.image.key = eina_stringshare_add(key); > - oinfo->extra_props.u.image.source = > evas_object_image_source_get(obj); > +EAPI Clouseau_Object * > +clouseau_object_information_get(Clouseau_Tree_Item *treeit) > +{ > + Evas_Object *obj = (void*) (uintptr_t) treeit->ptr; > + Eo_Dbg_Info *eo_dbg_info = EO_DBG_INFO_LIST_APPEND(NULL, ""); > > - if (evas_object_image_load_error_get(obj) != EVAS_LOAD_ERROR_NONE) > - { > - oinfo->extra_props.u.image.load_err = eina_stringshare_add( > - > evas_load_error_str(evas_object_image_load_error_get(obj))); > - } > - } > - else if (!strcmp("edje", evas_object_type_get(obj))) > - { > - const char *file, *group; > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_EDJE; > + if (!treeit->is_obj) > + return NULL; > > - edje_object_file_get(obj, &file, &group); > - oinfo->extra_props.u.edje.file = eina_stringshare_add(file); > - oinfo->extra_props.u.edje.group = eina_stringshare_add(group); > + eo_do(obj, eo_dbg_info_get(eo_dbg_info)); > + treeit->eo_info = _clouseau_eo_list_convert(eo_dbg_info); > > - if (edje_object_load_error_get(obj) != EDJE_LOAD_ERROR_NONE) > - { > - oinfo->extra_props.u.edje.load_err = eina_stringshare_add( > - edje_load_error_str(edje_object_load_error_get(obj))); > - } > - } > - else if (!strcmp("textblock", evas_object_type_get(obj))) > - { > - const char *style; > - const char *text; > - char shorttext[48]; > - const Evas_Textblock_Style *ts; > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_TEXTBLOCK; > + eo_dbg_info_free(eo_dbg_info); /* Free original list */ > > - ts = evas_object_textblock_style_get(obj); > - style = evas_textblock_style_get(ts); > - text = evas_object_textblock_text_markup_get(obj); > - strncpy(shorttext, text, 38); > - if (shorttext[37]) > - strcpy(shorttext + 37, "\xe2\x80\xa6"); /* HORIZONTAL ELLIPSIS > */ > - > - oinfo->extra_props.u.textblock.style = > eina_stringshare_add(style); > - oinfo->extra_props.u.textblock.text = > eina_stringshare_add(shorttext); > - } > - else > - { > - oinfo->extra_props.type = CLOUSEAU_OBJ_TYPE_OTHER; > - } > - return oinfo; > + return NULL; > } > > static const struct { > @@ -324,82 +230,6 @@ > # undef POINTER_MODE > }; > > -static void > -_clouseau_information_buffer_to_tree(Inf_Clouseau_Tree_Item *parent, > const char *buffer) > -{ > - Inf_Clouseau_Tree_Item *item; > - > - item = calloc(1, sizeof (Inf_Clouseau_Tree_Item)); > - if (!item) return ; > - item->string = eina_stringshare_add(buffer); > - > - parent->children = eina_list_append(parent->children, item); > -} > - > -static void > -_clouseau_information_string_to_tree(Inf_Clouseau_Tree_Item *parent, > const char *name, const char *value) > -{ > - char *buffer; > - int length; > - > - if (!value) return ; > - > - length = strlen(name) + 5; > - length += strlen(value); > - buffer = alloca(length); > - > - snprintf(buffer, length, "%s: '%s'", name, value); > - _clouseau_information_buffer_to_tree(parent, buffer); > -} > - > -static void > -_clouseau_information_geometry_to_tree(Inf_Clouseau_Tree_Item *parent, > const char *name, int xw, int yh) > -{ > - char *buffer; > - int length; > - > - length = strlen(name) + 4 + 20; > - buffer = alloca(length); > - > - snprintf(buffer, length, "%s: %d %d", name, xw, yh); > - > - _clouseau_information_buffer_to_tree(parent, buffer); > -} > - > -static void > -_clouseau_information_bool_to_tree(Inf_Clouseau_Tree_Item *parent, const > char *name, Eina_Bool value) > -{ > - _clouseau_information_string_to_tree(parent, name, value ? "EINA_TRUE" > : "EINA_FALSE"); > -} > - > -static void > -_clouseau_information_double_to_tree(Inf_Clouseau_Tree_Item *parent, > const char *name, double d) > -{ > - char *buffer; > - int length; > - > - length = strlen(name) + 3 + 64; > - buffer = alloca(length); > - > - snprintf(buffer, length, "%s: %.6lg", name, d); > - > - _clouseau_information_buffer_to_tree(parent, buffer); > -} > - > -static void > -_clouseau_information_hint_to_tree(Inf_Clouseau_Tree_Item *parent, const > char *name, double xw, double yh) > -{ > - char *buffer; > - int length; > - > - length = strlen(name) + 3 + 128; > - buffer = alloca(length); > - > - snprintf(buffer, length, "%s: %.6lg %.61g", name, xw, yh); > - > - _clouseau_information_buffer_to_tree(parent, buffer); > -} > - > static const struct { > Clouseau_Object_Type type; > const char *name; > @@ -411,40 +241,66 @@ > { CLOUSEAU_OBJ_TYPE_TEXTBLOCK, "Textblock" } > }; > > -static const char * > -_clouseau_type_to_string(Clouseau_Object_Type type) > -{ > - unsigned int i; > +static void > +_clouseau_object_dbg_string_build(Clouseau_Eo_Dbg_Info *eo, > + char *buf, int buf_size) > +{ /* Build a string from dbg-info in buffer, or return empty buffer */ > + int i; > + *buf = '\0'; > + switch(eo->type) > + { > + case EO_DBG_INFO_TYPE_STRING: > + { /* First set flags to say if got info from eo */ > + snprintf(buf, buf_size, "%s", > + eo->un_dbg_info.text.s); > > - for (i = 0; i < sizeof (_clouseau_types) / sizeof > (_clouseau_types[0]); ++i) > - if (_clouseau_types[i].type == type) > - return eina_stringshare_add(_clouseau_types[i].name); > + for(i = 0; buf[i]; i++) > + buf[i] = tolower(buf[i]); > > - return NULL; > -} > + snprintf(buf, buf_size, "%s: %s", > + eo->name, eo->un_dbg_info.text.s); > + } > + break; > > -static Inf_Clouseau_Tree_Item * > -_clouseau_type_to_parent(Eina_List **main, const char *name) > -{ > - Inf_Clouseau_Tree_Item *item; > + case EO_DBG_INFO_TYPE_INT: > + { > + snprintf(buf, buf_size, "%s: %d", > + eo->name, eo->un_dbg_info.intg.i); > + } > + break; > > - if (!name) return NULL; > + case EO_DBG_INFO_TYPE_BOOL: > + snprintf(buf, buf_size, "%s: %s", > + eo->name, (eo->un_dbg_info.bl.b) ? > + "TRUE" : "FALSE"); > + break; > > - item = calloc(1, sizeof(Inf_Clouseau_Tree_Item)); > - item->string = eina_stringshare_add(name); > + case EO_DBG_INFO_TYPE_PTR: > + snprintf(buf, buf_size, "%s: %llx", > + eo->name, eo->un_dbg_info.ptr.p); > + break; > > - *main = eina_list_append(*main, item); > + case EO_DBG_INFO_TYPE_DOUBLE: > + snprintf(buf, buf_size, "%s: %.2f", > + eo->name, eo->un_dbg_info.dbl.d); > + break; > > - return item; > + case EO_DBG_INFO_TYPE_LIST: /* Just copy class-name */ > + snprintf(buf, buf_size, "%s", eo->name); > + break; > + > + default: > + break; > + } > } > > EAPI void > clouseau_object_information_list_populate(Clouseau_Tree_Item *treeit, > Evas_Object *lb) > { > - Inf_Clouseau_Tree_Item *main_tit; > Clouseau_Object *oinfo; > char buf[1024]; > unsigned int i; > + Eo_Dbg_Info *root = EO_DBG_INFO_LIST_APPEND(NULL, ""); > > clouseau_object_information_list_clear(); > > @@ -453,193 +309,189 @@ > > oinfo = treeit->info; > > - /* Populate evas properties list */ > - main_tit = _clouseau_type_to_parent(&information_tree, "Evas"); > + /* This code is here only for backward compatibility and will be > removed soon */ > + if (!treeit->eo_info) > + { > + /* Populate evas properties list */ > + Eo_Dbg_Info *group = EO_DBG_INFO_LIST_APPEND(root, "Evas"); > + Eo_Dbg_Info *node; > > - _clouseau_information_bool_to_tree(main_tit, "Visibility", > - oinfo->evas_props.is_visible); > - _clouseau_information_string_to_tree(main_tit, "Name", oinfo-> > evas_props.name); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Visibility", > oinfo->evas_props.is_visible); > + EO_DBG_INFO_INTEGER_APPEND(group, "Layer", > oinfo->evas_props.layer); > > - snprintf(buf, sizeof(buf), "Layer: %hd", oinfo->evas_props.layer); > - _clouseau_information_buffer_to_tree(main_tit, buf); > + node = EO_DBG_INFO_LIST_APPEND(group, "Position"); > + EO_DBG_INFO_INTEGER_APPEND(node, "x", oinfo->evas_props.x); > + EO_DBG_INFO_INTEGER_APPEND(node, "y", oinfo->evas_props.y); > > - _clouseau_information_geometry_to_tree(main_tit, "Position", > - oinfo->evas_props.x, > - oinfo->evas_props.y); > - _clouseau_information_geometry_to_tree(main_tit, "Size", > - oinfo->evas_props.w, > - oinfo->evas_props.h); > - _clouseau_information_double_to_tree(main_tit, "Scale", > oinfo->evas_props.scale); > + node = EO_DBG_INFO_LIST_APPEND(group, "Size"); > + EO_DBG_INFO_INTEGER_APPEND(node, "w", oinfo->evas_props.w); > + EO_DBG_INFO_INTEGER_APPEND(node, "h", oinfo->evas_props.h); > > + EO_DBG_INFO_DOUBLE_APPEND(group, "Scale", > oinfo->evas_props.scale); > + > #if 0 > - if (evas_object_clip_get(obj)) > - { > - evas_object_geometry_get(evas_object_clip_get(obj), &x, &y, &w, > &h); > - _clouseau_information_geometry_to_tree(main_tit, "Clipper > position", x, y); > - _clouseau_information_geometry_to_tree(main_tit, "Clipper size", > w, h); > - } > + if (evas_object_clip_get(obj)) > + { > + evas_object_geometry_get(evas_object_clip_get(obj), &x, &y, > &w, &h); > + _clouseau_information_geometry_to_tree(main_tit, "Clipper > position", x, y); > + _clouseau_information_geometry_to_tree(main_tit, "Clipper > size", w, h); > + } > #endif > > - _clouseau_information_geometry_to_tree(main_tit, "Min size", > - oinfo->evas_props.min_w, > - oinfo->evas_props.min_h); > - _clouseau_information_geometry_to_tree(main_tit, "Max size", > - oinfo->evas_props.max_w, > - oinfo->evas_props.max_h); > - _clouseau_information_geometry_to_tree(main_tit, "Request size", > - oinfo->evas_props.req_w, > - oinfo->evas_props.req_h); > - _clouseau_information_hint_to_tree(main_tit, "Align", > - oinfo->evas_props.align_x, > - oinfo->evas_props.align_y); > - _clouseau_information_hint_to_tree(main_tit, "Weight", > - oinfo->evas_props.weight_x, > - oinfo->evas_props.weight_y); > + node = EO_DBG_INFO_LIST_APPEND(group, "Min size"); > + EO_DBG_INFO_INTEGER_APPEND(node, "w", oinfo->evas_props.min_w); > + EO_DBG_INFO_INTEGER_APPEND(node, "h", oinfo->evas_props.min_h); > + node = EO_DBG_INFO_LIST_APPEND(group, "Max size"); > + EO_DBG_INFO_INTEGER_APPEND(node, "w", oinfo->evas_props.max_w); > + EO_DBG_INFO_INTEGER_APPEND(node, "h", oinfo->evas_props.max_h); > + node = EO_DBG_INFO_LIST_APPEND(group, "Request size"); > + EO_DBG_INFO_INTEGER_APPEND(node, "w", oinfo->evas_props.req_w); > + EO_DBG_INFO_INTEGER_APPEND(node, "h", oinfo->evas_props.req_h); > + node = EO_DBG_INFO_LIST_APPEND(group, "Align"); > + EO_DBG_INFO_DOUBLE_APPEND(node, "w", oinfo->evas_props.align_x); > + EO_DBG_INFO_DOUBLE_APPEND(node, "h", oinfo->evas_props.align_y); > + node = EO_DBG_INFO_LIST_APPEND(group, "Weight"); > + EO_DBG_INFO_DOUBLE_APPEND(node, "w", oinfo->evas_props.weight_x); > + EO_DBG_INFO_DOUBLE_APPEND(node, "h", oinfo->evas_props.weight_y); > > #if 0 > - evas_object_size_hint_aspect_get(obj, &w, &h); > - _clouseau_information_geometry_to_tree(main_tit, "Aspect", w, h); > + evas_object_size_hint_aspect_get(obj, &w, &h); > + _clouseau_information_geometry_to_tree(main_tit, "Aspect", w, h); > #endif > > - snprintf(buf, sizeof(buf), "Color: %d %d %d %d", > - oinfo->evas_props.r, oinfo->evas_props.g, oinfo->evas_props.b, > - oinfo->evas_props.a); > - _clouseau_information_buffer_to_tree(main_tit, buf); > + node = EO_DBG_INFO_LIST_APPEND(group, "Color"); > + EO_DBG_INFO_INTEGER_APPEND(node, "r", oinfo->evas_props.r); > + EO_DBG_INFO_INTEGER_APPEND(node, "g", oinfo->evas_props.g); > + EO_DBG_INFO_INTEGER_APPEND(node, "b", oinfo->evas_props.b); > + EO_DBG_INFO_INTEGER_APPEND(node, "a", oinfo->evas_props.a); > > - _clouseau_information_bool_to_tree(main_tit, "Has focus", > - oinfo->evas_props.has_focus); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Has focus", > oinfo->evas_props.has_focus); > > - for (i = 0; i < sizeof (pointer_mode) / sizeof (pointer_mode[0]); ++i) > - if (pointer_mode[i].mode == oinfo->evas_props.mode) > - { > - _clouseau_information_string_to_tree(main_tit, "Pointer mode", > - pointer_mode[i].text); > - break; > - } > + for (i = 0; i < sizeof (pointer_mode) / sizeof (pointer_mode[0]); > ++i) > + if (pointer_mode[i].mode == oinfo->evas_props.mode) > + { > + EO_DBG_INFO_TEXT_APPEND(group, "Pointer Mode", > pointer_mode[i].text); > + break; > + } > > - _clouseau_information_bool_to_tree(main_tit, "Pass events", > - oinfo->evas_props.pass_events); > - _clouseau_information_bool_to_tree(main_tit, "Repeat events", > - oinfo->evas_props.repeat_events); > - _clouseau_information_bool_to_tree(main_tit, "Propagate events", > - oinfo->evas_props.propagate_events); > - _clouseau_information_bool_to_tree(main_tit, "Has clipees", > - oinfo->evas_props.is_clipper); > - if (oinfo->evas_props.clipper) > - { > - snprintf(buf, sizeof(buf), "%llx", oinfo->evas_props.clipper); > - _clouseau_information_string_to_tree(main_tit, "Clipper", buf); > - } > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Pass Events", > oinfo->evas_props.pass_events); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Repeat Events", > oinfo->evas_props.repeat_events); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Propagate Events", > oinfo->evas_props.propagate_events); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Has clipees", > oinfo->evas_props.is_clipper); > + if (oinfo->evas_props.clipper) > + { > + snprintf(buf, sizeof(buf), "%llx", > oinfo->evas_props.clipper); > + EO_DBG_INFO_TEXT_APPEND(group, "Clipper", buf); > + } > > - if (oinfo->evas_props.points_count) > - { > - main_tit = _clouseau_type_to_parent(&main_tit->children, "Evas > Map"); > - Clouseau_Evas_Map_Point_Props *p; > - for(i = 0 ; (int) i < oinfo->evas_props.points_count; i++) > + if (oinfo->evas_props.points_count) > { > - p = &oinfo->evas_props.points[i]; > + node = EO_DBG_INFO_LIST_APPEND(group, "Evas Map"); > + Clouseau_Evas_Map_Point_Props *p; > + for(i = 0 ; (int) i < oinfo->evas_props.points_count; i++) > + { > + p = &oinfo->evas_props.points[i]; > > - snprintf(buf, sizeof(buf), "Coords: %d %d %d", p->x, p->y, > p->z); > - _clouseau_information_buffer_to_tree(main_tit, buf); > + Eo_Dbg_Info *point = EO_DBG_INFO_LIST_APPEND(node, > "Coords"); > + EO_DBG_INFO_INTEGER_APPEND(point, "x", p->x); > + EO_DBG_INFO_INTEGER_APPEND(point, "y", p->y); > + EO_DBG_INFO_INTEGER_APPEND(point, "z", p->z); > + } > } > - } > > - main_tit = _clouseau_type_to_parent(&information_tree, > - > _clouseau_type_to_string(oinfo->extra_props.type)); > - if (main_tit) > - { > if (oinfo->extra_props.type == CLOUSEAU_OBJ_TYPE_ELM) > { > - _clouseau_information_string_to_tree(main_tit, "Wid-Type", > oinfo->extra_props.u.elm.type); > + group = EO_DBG_INFO_LIST_APPEND(root, "Elm"); > + EO_DBG_INFO_TEXT_APPEND(group, "Wid-Type", > oinfo->extra_props.u.elm.type); > #if 0 > /* Extract actual data from theme? */ > _clouseau_information_string_to_tree(main_tit, "Theme", > elm_widget_theme_get(obj)); > #endif > - _clouseau_information_string_to_tree(main_tit, "Style", > oinfo->extra_props.u.elm.style); > - _clouseau_information_double_to_tree(main_tit, "Scale", > - > oinfo->extra_props.u.elm.scale); > - _clouseau_information_bool_to_tree(main_tit, "Disabled", > - > oinfo->extra_props.u.elm.is_disabled); > - _clouseau_information_bool_to_tree(main_tit, "Has focus", > - > oinfo->extra_props.u.elm.has_focus); > - _clouseau_information_bool_to_tree(main_tit, "Mirrored", > - > oinfo->extra_props.u.elm.is_mirrored); > - _clouseau_information_bool_to_tree(main_tit, "Automatic > mirroring", > - > oinfo->extra_props.u.elm.is_mirrored_automatic); > + EO_DBG_INFO_TEXT_APPEND(group, "Style", > oinfo->extra_props.u.elm.style); > + EO_DBG_INFO_DOUBLE_APPEND(group, "Scale", > oinfo->extra_props.u.elm.scale); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Disabled", > oinfo->extra_props.u.elm.is_disabled); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Has focus", > oinfo->extra_props.u.elm.has_focus); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Mirrored", > oinfo->extra_props.u.elm.is_mirrored); > + EO_DBG_INFO_BOOLEAN_APPEND(group, "Automatic mirroring", > oinfo->extra_props.u.elm.is_mirrored_automatic); > } > else if (oinfo->extra_props.type == CLOUSEAU_OBJ_TYPE_TEXT) > - { > - _clouseau_information_string_to_tree(main_tit, "Font", > oinfo->extra_props.u.text.font); > + { /* EVAS_OBJ_TEXT_CLASS */ > + group = EO_DBG_INFO_LIST_APPEND(root, "Text"); > + EO_DBG_INFO_TEXT_APPEND(group, "Font", > oinfo->extra_props.u.text.font); > > - snprintf(buf, sizeof(buf), "Size: %d", > oinfo->extra_props.u.text.size); > - _clouseau_information_buffer_to_tree(main_tit, buf); > + EO_DBG_INFO_INTEGER_APPEND(group, "Size", > oinfo->extra_props.u.text.size); > > - _clouseau_information_string_to_tree(main_tit, "Source", > oinfo->extra_props.u.text.source); > - _clouseau_information_string_to_tree(main_tit, "Text", > oinfo->extra_props.u.text.text); > + EO_DBG_INFO_TEXT_APPEND(group, "Source", > oinfo->extra_props.u.text.source); > + EO_DBG_INFO_TEXT_APPEND(group, "Text", > oinfo->extra_props.u.text.text); > } > else if (oinfo->extra_props.type == CLOUSEAU_OBJ_TYPE_IMAGE) > - { > - _clouseau_information_string_to_tree(main_tit, "Filename", > oinfo->extra_props.u.image.file); > - _clouseau_information_string_to_tree(main_tit, "File key", > oinfo->extra_props.u.image.key); > - snprintf(buf, sizeof(buf), "Source: %p", > oinfo->extra_props.u.image.source); > - _clouseau_information_buffer_to_tree(main_tit, buf); > + { /* EVAS_OBJ_IMAGE_CLASS */ > + group = EO_DBG_INFO_LIST_APPEND(root, "Image"); > + EO_DBG_INFO_TEXT_APPEND(group, "Filename", > oinfo->extra_props.u.image.file); > + EO_DBG_INFO_TEXT_APPEND(group, "File key", > oinfo->extra_props.u.image.key); > + EO_DBG_INFO_PTR_APPEND(group, "Source", > oinfo->extra_props.u.image.source); > > - _clouseau_information_string_to_tree(main_tit, "Load error", > oinfo->extra_props.u.image.load_err); > + if (oinfo->extra_props.u.image.load_err) > + EO_DBG_INFO_TEXT_APPEND(group, "Load error", > oinfo->extra_props.u.image.load_err); > } > else if (oinfo->extra_props.type == CLOUSEAU_OBJ_TYPE_EDJE) > - { > - _clouseau_information_string_to_tree(main_tit, "File", > oinfo->extra_props.u.edje.file); > - _clouseau_information_string_to_tree(main_tit, "Group", > oinfo->extra_props.u.edje.group); > - _clouseau_information_string_to_tree(main_tit, "Load error", > oinfo->extra_props.u.edje.load_err); > + { /* EDJE_OBJ_CLASS */ > + group = EO_DBG_INFO_LIST_APPEND(root, "Edje"); > + EO_DBG_INFO_TEXT_APPEND(group, "File", > oinfo->extra_props.u.edje.file); > + EO_DBG_INFO_TEXT_APPEND(group, "Group", > oinfo->extra_props.u.edje.group); > + if (oinfo->extra_props.u.image.load_err) > + EO_DBG_INFO_TEXT_APPEND(group, "Load error", > oinfo->extra_props.u.edje.load_err); > } > else if (oinfo->extra_props.type == CLOUSEAU_OBJ_TYPE_TEXTBLOCK) > - { > - _clouseau_information_string_to_tree(main_tit, "Style", > oinfo->extra_props.u.textblock.style); > - _clouseau_information_string_to_tree(main_tit, "Text", > oinfo->extra_props.u.textblock.text); > + { /* EVAS_OBJ_TEXTBLOCK_CLASS */ > + group = EO_DBG_INFO_LIST_APPEND(root, "Text Block"); > + EO_DBG_INFO_TEXT_APPEND(group, "Style", > oinfo->extra_props.u.textblock.style); > + EO_DBG_INFO_TEXT_APPEND(group, "Text", > oinfo->extra_props.u.textblock.text); > } > - } > > - /* Update backtrace text */ > - if (oinfo->evas_props.bt) > - { /* Build backtrace label */ > - char *k = malloc(strlen("Creation backtrace:\n\n") + > - strlen(oinfo->evas_props.bt) + 1); > + /* Update backtrace text */ > + if (oinfo->evas_props.bt) > + { /* Build backtrace label */ > + char *k = malloc(strlen("Creation backtrace:\n\n") + > + strlen(oinfo->evas_props.bt) + 1); > > - sprintf(k, "Creation backtrace:\n\n%s", oinfo->evas_props.bt); > - char *p = elm_entry_utf8_to_markup(k); > - elm_object_text_set(lb, p); > - free(p); > - free(k); > + sprintf(k, "Creation backtrace:\n\n%s", oinfo->evas_props.bt > ); > + char *p = elm_entry_utf8_to_markup(k); > + elm_object_text_set(lb, p); > + free(p); > + free(k); > + } > + else > + elm_object_text_set(lb, NULL); > + > + /* Convert Old format to Clouseau_eo */ > + treeit->eo_info = _clouseau_eo_list_convert(root); > + eo_dbg_info_free(root); > } > - else > - elm_object_text_set(lb, NULL); > > - > - /* Actually populate the genlist */ > - { > - Eina_List *itr, *expand_list = NULL, *l, *l_prev; > - Inf_Clouseau_Tree_Item *tit; > - Elm_Object_Item *expand_it = NULL; > - > - EINA_LIST_FOREACH(information_tree, itr, tit) > - { > - Elm_Object_Item *git; > - git = elm_genlist_item_append(prop_list, &itc, tit, NULL, > - ELM_GENLIST_ITEM_TREE, > _gl_selected, NULL); > - expand_list = eina_list_append(expand_list, git); > - > - } > - EINA_LIST_REVERSE_FOREACH_SAFE(expand_list, l, l_prev, expand_it) > - { > - elm_genlist_item_expanded_set(expand_it, EINA_TRUE); > - expand_list = eina_list_remove_list(expand_list, l); > - } > - } > + { > + /* Fetch properties of eo object */ > + Clouseau_Eo_Dbg_Info *eo; > + Eina_List *expand_list = NULL, *l, *l_prev; > + Elm_Object_Item *eo_it; > + EINA_LIST_FOREACH(treeit->eo_info,l, eo) > + { > + Elm_Genlist_Item_Type iflag = (eo->type == > EO_DBG_INFO_TYPE_LIST) ? > + ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE; > + eo_it = elm_genlist_item_append(prop_list, &itc, eo, NULL, > + iflag, _gl_selected, NULL); > + expand_list = eina_list_append(expand_list, eo_it); > + } > + EINA_LIST_REVERSE_FOREACH_SAFE(expand_list, l, l_prev, eo_it) > + { > + elm_genlist_item_expanded_set(eo_it, EINA_TRUE); > + expand_list = eina_list_remove_list(expand_list, l); > + } > + } > } > > EAPI void > clouseau_object_information_list_clear(void) > { > - _clouseau_item_tree_free(); > elm_genlist_clear(prop_list); > } > > Modified: trunk/clouseau/src/lib/clouseau_private.h > =================================================================== > --- trunk/clouseau/src/lib/clouseau_private.h 2013-01-29 06:37:01 UTC > (rev 83411) > +++ trunk/clouseau/src/lib/clouseau_private.h 2013-01-29 06:39:51 UTC > (rev 83412) > @@ -1,5 +1,6 @@ > #ifndef EET_DATA_H > #define EET_DATA_H > +#include <Eo.h> > #include "Clouseau.h" > #include <Ecore_Con_Eet.h> > /* Global constants */ > @@ -12,13 +13,13 @@ > > #define CLOUSEAU_GUI_CLIENT_CONNECT_STR "CLOUSEAU_GUI_CLIENT_CONNECT" > #define CLOUSEAU_APP_CLIENT_CONNECT_STR "CLOUSEAU_APP_CLIENT_CONNECT" > -#define CLOUSEAU_APP_ADD_STR "CLOUSEAU_APP_ADD" > -#define CLOUSEAU_DATA_REQ_STR "CLOUSEAU_DATA_REQ" > -#define CLOUSEAU_TREE_DATA_STR "CLOUSEAU_TREE_DATA" > -#define CLOUSEAU_APP_CLOSED_STR "CLOUSEAU_APP_CLOSED" > -#define CLOUSEAU_HIGHLIGHT_STR "CLOUSEAU_HIGHLIGHT" > -#define CLOUSEAU_BMP_REQ_STR "CLOUSEAU_BMP_REQ" > -#define CLOUSEAU_BMP_DATA_STR "CLOUSEAU_BMP_DATA" > +#define CLOUSEAU_APP_ADD_STR "CLOUSEAU_APP_ADD" > +#define CLOUSEAU_DATA_REQ_STR "CLOUSEAU_DATA_REQ" > +#define CLOUSEAU_TREE_DATA_STR "CLOUSEAU_TREE_DATA" > +#define CLOUSEAU_APP_CLOSED_STR "CLOUSEAU_APP_CLOSED" > +#define CLOUSEAU_HIGHLIGHT_STR "CLOUSEAU_HIGHLIGHT" > +#define CLOUSEAU_BMP_REQ_STR "CLOUSEAU_BMP_REQ" > +#define CLOUSEAU_BMP_DATA_STR "CLOUSEAU_BMP_DATA" > > /* Private function */ > #define CLOUSEAU_APP_ADD_ENTRY "clouseau/app" > @@ -26,6 +27,16 @@ > #define CLOUSEAU_BMP_LIST_ENTRY "clouseau/app/shot_list" > #define CLOUSEAU_BMP_DATA_ENTRY "clouseau/app/screenshot" > > +/* START - EO EET defs */ > +#define EO_DBG_INFO_TYPE_UNKNOWN_STR "EO_DBG_INFO_TYPE_UNKNOWN" > +#define EO_DBG_INFO_TYPE_STRING_STR "EO_DBG_INFO_TYPE_STRING" > +#define EO_DBG_INFO_TYPE_INT_STR "EO_DBG_INFO_TYPE_INT" > +#define EO_DBG_INFO_TYPE_BOOL_STR "EO_DBG_INFO_TYPE_BOOL" > +#define EO_DBG_INFO_TYPE_PTR_STR "EO_DBG_INFO_TYPE_PTR" > +#define EO_DBG_INFO_TYPE_DOUBLE_STR "EO_DBG_INFO_TYPE_DOUBLE" > +#define EO_DBG_INFO_TYPE_LIST_STR "EO_DBG_INFO_TYPE_LIST" > +/* END - EO EET defs */ > + > struct _connect_st > { /* This will be used for APP, GUI client connect */ > unsigned int pid; > @@ -129,6 +140,64 @@ > }; > typedef struct _data_desc data_desc; > > +/* START - EO - debug structs */ > +struct _Clouseau_st_string > +{ > + const char *s; > +}; > + > +struct _Clouseau_st_int > +{ > + int i; > +}; > + > +struct _Clouseau_st_bool > +{ > + Eina_Bool b; > +}; > + > +struct _Clouseau_st_ptr > +{ > + unsigned long long p; /* For pointer value */ > +}; > + > +struct _Clouseau_st_double > +{ > + double d; > +}; > + > +struct _Clouseau_st_dbg_list > +{ > + Eina_List *list; /* Sub-List of (Eo_Dbg_Info *) if needed */ > +}; > + > +/* START - EO - debug structs */ > +typedef struct _Clouseau_st_string Clouseau_st_string; > +typedef struct _Clouseau_st_int Clouseau_st_int; > +typedef struct _Clouseau_st_bool Clouseau_st_bool; > +typedef struct _Clouseau_st_ptr Clouseau_st_ptr; > +typedef struct _Clouseau_st_double Clouseau_st_double; > +typedef struct _Clouseau_st_dbg_list Clouseau_st_dbg_list; > +typedef struct _Clouseau_Eo_Dbg_Info Clouseau_Eo_Dbg_Info; > +/* END - EO - debug structs */ > + > +struct _Clouseau_Eo_Dbg_Info > +{ /* Debug info composed of a list of Eo_Dbg_Info */ > + const char *name; > + Eo_Dbg_Info_Type type; > + > + union _un_dbg_info > + { > + Clouseau_st_string text; > + Clouseau_st_int intg; > + Clouseau_st_bool bl; > + Clouseau_st_ptr ptr; > + Clouseau_st_double dbl; > + Clouseau_st_dbg_list dbg; /* Sub-List of (Eo_Dbg_Info *) if > needed */ > + } un_dbg_info; > +}; > +/* END - EO - debug structs */ > + > /* Exported From Object information */ > EAPI void clouseau_object_information_free(Clouseau_Object *oinfo); > EAPI Clouseau_Object * clouseau_object_information_get(Clouseau_Tree_Item > *treeit); > > > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnnow-d2d > _______________________________________________ > enlightenment-svn mailing list > enlightenment-...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > ------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel