From 1635c864cf3da0bb3b6d4146f4ac6038eb9a4b44 Mon Sep 17 00:00:00 2001 From: cedric Date: Fri, 2 Jul 2010 16:56:42 +0000 Subject: [PATCH] * edje: Add alias for part too. This should help designer to provide the right part name and still use GROUP and BOX. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@50001 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/bin/edje_cc_handlers.c | 33 +++++++++++++++++++++++++++++++++ src/lib/edje_data.c | 9 +++++++++ src/lib/edje_private.h | 2 ++ src/lib/edje_util.c | 18 +++++++++++++++--- 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/bin/edje_cc_handlers.c b/src/bin/edje_cc_handlers.c index 67e92cf..0cce8f6 100644 --- a/src/bin/edje_cc_handlers.c +++ b/src/bin/edje_cc_handlers.c @@ -114,6 +114,8 @@ static void st_collections_group_data_item(void); static void ob_collections_group_script(void); static void ob_collections_group_lua_script(void); +static void st_collections_group_parts_alias(void); + static void ob_collections_group_parts_part(void); static void st_collections_group_parts_part_name(void); static void st_collections_group_parts_part_type(void); @@ -325,6 +327,7 @@ New_Statement_Handler statement_handlers[] = {"collections.group.color_classes.color_class.color", st_color_class_color}, /* dup */ {"collections.group.color_classes.color_class.color2", st_color_class_color2}, /* dup */ {"collections.group.color_classes.color_class.color3", st_color_class_color3}, /* dup */ + {"collections.group.parts.alias", st_collections_group_parts_alias }, {"collections.group.parts.image", st_images_image}, /* dup */ {"collections.group.parts.set.name", st_images_set_name}, {"collections.group.parts.set.image.image", st_images_set_image_image}, @@ -1994,6 +1997,36 @@ st_collections_group_data_item(void) /** @page edcref @block + parts + @context + group { + parts { + alias: "theme_part_path" "real_part_path"; + .. + } + } + @description + Alias of part give a chance to let the designer put the real one + in a box or reuse one from a GROUP or inside a BOX. + @endblock +*/ +static void +st_collections_group_parts_alias(void) +{ + Edje_Part_Collection *pc; + + check_arg_count(2); + + pc = eina_list_data_get(eina_list_last(edje_collections)); + + if (!pc->alias) pc->alias = eina_hash_string_small_new(NULL); + eina_hash_add(pc->alias, parse_str(0), parse_str(1)); +} + + +/** + @page edcref + @block part @context group { diff --git a/src/lib/edje_data.c b/src/lib/edje_data.c index a43d7a4..c7b997a 100644 --- a/src/lib/edje_data.c +++ b/src/lib/edje_data.c @@ -476,4 +476,13 @@ _edje_edd_init(void) EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "script_only", script_only, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "lua_script_only", lua_script_only, EET_T_UCHAR); + + { + Edje_Part_Collection epc; + + eet_data_descriptor_element_add(_edje_edd_edje_part_collection, + "alias", EET_T_STRING, EET_G_HASH, + (char *)(&(epc.alias)) - (char *)(&(epc)), + 0, /* 0, */NULL, NULL); + } } diff --git a/src/lib/edje_private.h b/src/lib/edje_private.h index cd51e9a..f829943 100644 --- a/src/lib/edje_private.h +++ b/src/lib/edje_private.h @@ -567,6 +567,8 @@ struct _Edje_Part_Collection int id; /* the collection id */ + Eina_Hash *alias; /* aliasing part*/ + struct { Edje_Size min, max; } prop; diff --git a/src/lib/edje_util.c b/src/lib/edje_util.c index 821ec37..a9390c7 100644 --- a/src/lib/edje_util.c +++ b/src/lib/edje_util.c @@ -4280,6 +4280,7 @@ _edje_real_part_recursive_get_helper(Edje *ed, char **path) { Edje_Real_Part *rp; Evas_Object *child; + const char *alias = NULL; char *idx = NULL; //printf(" lookup: %s on %s\n", path[0], ed->parent ? ed->parent : "-"); @@ -4298,9 +4299,20 @@ _edje_real_part_recursive_get_helper(Edje *ed, char **path) } } - rp = _edje_real_part_get(ed, path[0]); - if (path[1] == NULL) return rp; - if (!rp) return NULL; + if (ed->file->collection) + alias = eina_hash_find(ed->file->collection, path[0]); + if (alias) + { + rp = _edje_real_part_recursive_get(ed, alias); + if (path[1] == NULL) return rp; + if (!rp) return NULL; + } + else + { + rp = _edje_real_part_get(ed, path[0]); + if (path[1] == NULL) return rp; + if (!rp) return NULL; + } switch (rp->part->type) { -- 2.7.4