* edje: Add alias for part too. This should help designer to
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 2 Jul 2010 16:56:42 +0000 (16:56 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 2 Jul 2010 16:56:42 +0000 (16:56 +0000)
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
src/lib/edje_data.c
src/lib/edje_private.h
src/lib/edje_util.c

index 67e92cf..0cce8f6 100644 (file)
@@ -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 {
index a43d7a4..c7b997a 100644 (file)
@@ -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);
+   }
 }
index cd51e9a..f829943 100644 (file)
@@ -567,6 +567,8 @@ struct _Edje_Part_Collection
 
    int        id; /* the collection id */
 
+   Eina_Hash *alias; /* aliasing part*/
+
    struct {
       Edje_Size min, max;
    } prop;
index 821ec37..a9390c7 100644 (file)
@@ -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)
      {