Enlightenment CVS committal

Author  : davemds
Project : e17
Module  : proto/edje_editor

Dir     : e17/proto/edje_editor


Modified Files:
        TODO edje_edit.patch 


Log Message:
 * implemented edje_edit_[group/part/state/prog]_exist() funcions
 * some char* in edje_private.h declared static
 * Create a unique name when creating group/part/state/prog
 * Fix Fakewin placement when moving
 * Fix Fakewin size on first show
 * some bugs fixed 

 * and some cosmetic change that make the commit unreadable :P

===================================================================
RCS file: /cvs/e/e17/proto/edje_editor/TODO,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- TODO        18 Feb 2008 16:44:21 -0000      1.9
+++ TODO        20 Feb 2008 19:31:38 -0000      1.10
@@ -1,25 +1,25 @@
 TODO edje_editor (not a complete list...only the first in my mind)
 =======================================
 
-* Tooltips EVERYWERE  :)
-
-* A new object add must be take a progressive (and unique) number (newrect1, 
newrect2...etc)
-
+EDJE:
 * Font and image can't be removed
-
-* Clipping
-
 * Save back the updated edc source to the edje file
-
 * Embryo scripting
+* Use a value in the edje data field to store the editor version
+  If no version information found alert the user
+* Edje gradient
+* Edje draggies
 
+EDITOR:
+* Tooltips EVERYWERE  :)
+* Add keybinding
+* Add a handler to move the 2 points togheter
+* A new object add must be take a progressive (and unique) number (newrect1, 
newrect2...etc)
 * Make the visible checkbox work (should the visibility apply to the EDC also? 
not only in the editor?)
-
 * Duplicate objects (copy/cut/paste??)
-
 * Fix strange alpha premul on text with effect
-
-* Use a value in the edje data field to store the editor version
-  If no version information found alert the user
-  
 * In the Add/Remove menus disable 'not in context' choice
+* Add CheckBox(radio) in Options Menu
+* Make groups combobox searchable (using a Combo_Entry)
+* gradient
+* draggies
===================================================================
RCS file: /cvs/e/e17/proto/edje_editor/edje_edit.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- edje_edit.patch     19 Feb 2008 23:44:41 -0000      1.9
+++ edje_edit.patch     20 Feb 2008 19:31:38 -0000      1.10
@@ -4,7 +4,7 @@
 retrieving revision 1.4
 diff -u -r1.4 Doxyfile
 --- Doxyfile   6 Dec 2007 23:40:48 -0000       1.4
-+++ Doxyfile   19 Feb 2008 23:41:27 -0000
++++ Doxyfile   20 Feb 2008 19:23:00 -0000
 @@ -1,7 +1,7 @@
  PROJECT_NAME           = Edje
  PROJECT_NUMBER         =
@@ -29,7 +29,7 @@
 retrieving revision 1.93
 diff -u -r1.93 configure.in
 --- configure.in       25 Jan 2008 03:35:46 -0000      1.93
-+++ configure.in       19 Feb 2008 23:41:27 -0000
++++ configure.in       20 Feb 2008 19:23:00 -0000
 @@ -66,6 +66,7 @@
    evas >= 0.9.9
    ecore-evas >= 0.9.9
@@ -44,7 +44,7 @@
 retrieving revision 1.6
 diff -u -r1.6 gendoc
 --- gendoc     6 Dec 2007 23:42:38 -0000       1.6
-+++ gendoc     19 Feb 2008 23:41:27 -0000
++++ gendoc     20 Feb 2008 19:23:00 -0000
 @@ -1,7 +1,7 @@
  #!/bin/sh
  cp ./edje.c.in ./edje.c
@@ -68,8 +68,8 @@
 RCS file: src/lib/Edje_Edit.h
 diff -N src/lib/Edje_Edit.h
 --- /dev/null  1 Jan 1970 00:00:00 -0000
-+++ src/lib/Edje_Edit.h        19 Feb 2008 23:41:28 -0000
-@@ -0,0 +1,1277 @@
++++ src/lib/Edje_Edit.h        20 Feb 2008 19:23:00 -0000
+@@ -0,0 +1,1342 @@
 +#ifndef _EDJE_EDIT_H
 +#define _EDJE_EDIT_H
 +
@@ -213,6 +213,14 @@
 +   Evas_Object *obj        ///< The edje object
 +);
 +   
++/**Check if a group with the given name exist in the edje.
++ */
++EAPI unsigned char         ///< 1 if the group exist, 0 otherwise.
++edje_edit_group_exist(
++   Evas_Object *obj,       ///< The edje object 
++   const char *group       ///< The name of the group
++);
++
 +/**Set a new name for the current open group.
 + * You can only rename a group that is currently loaded
 + * Note that the relative getter function don't exist as it don't make sense 
;)
@@ -286,12 +294,21 @@
 +   const char *part        ///< The name of the part to remove
 +);
 +
++/**Check if a part with the given name exist in the edje object.
++ */
++EAPI unsigned char         ///< 1 if the part exist, 0 otherwise.
++edje_edit_part_exist(
++   Evas_Object *obj,       ///< The edje object 
++   const char *part        ///< The name of the part
++);
++
 +/**Move the given part below the previous one.*/
 +EAPI unsigned char         ///@return 1 on success, 0 on failure
 +edje_edit_part_restack_below(
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part to restack
 +);
++
 +/**Move the given part above the next one.*/
 +EAPI unsigned char         ///@return 1 on success, 0 on failure
 +edje_edit_part_restack_above(
@@ -324,6 +341,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part
 +);
++
 +/**Set a part to clip part to.
 + * If clip_to is NULL then the clipping value will be cancelled (unset 
clipping)
 + */
@@ -340,6 +358,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part
 +);
++
 +/**Set the effect for a given part. */
 +EAPI void
 +edje_edit_part_effect_set(
@@ -354,6 +373,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part
 +);
++
 +/**Set the current state in part.*/
 +EAPI unsigned char         ///@return 1 on success, 0 otherwise.
 +edje_edit_part_selected_state_set(
@@ -368,6 +388,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part
 +);
++
 +/**Set mouse_events for part.*/
 +EAPI void                  
 +edje_edit_part_mouse_events_set(
@@ -382,6 +403,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part        ///< The name of the part
 +);
++
 +/**Set repeat_events for part. */
 +EAPI void
 +edje_edit_part_repeat_events_set(
@@ -417,7 +439,7 @@
 +   Evas_Object *obj,       ///< The edje object 
 +   const char *part,       ///< The name of the part that contain state
 +   const char *state,      ///< The current name of the state
-+   const char *new_name    ///< The new name to assign
++   const char *new_name    ///< The new name to assign (including the value)
 +);
 +
 +/**Create a new state to the give part
@@ -426,7 +448,7 @@
 +edje_edit_state_add(
 +   Evas_Object *obj,       ///< The edje object
 +   const char *part,       ///< The name of the part
-+   const char *name        ///< The name for the new state
++   const char *name        ///< The name for the new state (not including the 
state value)
 +);
 +
 +/**Delete the given part state from the edje
@@ -435,7 +457,16 @@
 +edje_edit_state_del(
 +   Evas_Object *obj,       ///< The edje object 
 +   const char *part,       ///< The name of the part that contain state
-+   const char *state       ///< The current name of the state
++   const char *state       ///< The current name of the state (including the 
state value)
++);
++
++/**Check if a part state with the given name exist.
++ */
++EAPI unsigned char         ///< 1 if the part state exist, 0 otherwise.
++edje_edit_state_exist(
++   Evas_Object *obj,       ///< The edje object 
++   const char *part,       ///< The name of the part
++   const char *state       ///< The name of the state to check (including the 
state value)
 +);
 +
 +/**Get the rel1 relative x value of state*/
@@ -846,6 +877,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Set the text of a part state.*/
 +EAPI void
 +edje_edit_state_text_set(
@@ -862,6 +894,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Set the text size of a part state.*/
 +EAPI void
 +edje_edit_state_text_size_set(
@@ -878,6 +911,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Get the text vertical align of a part state. The value range is from 
0.0(top) to 1.0(bottom)*/
 +EAPI double                ///@return The text align Y value
 +edje_edit_state_text_align_y_get(
@@ -885,6 +919,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Set the text horizontal align of a part state. The value range is from 
0.0(right) to 1.0(left)*/
 +EAPI void
 +edje_edit_state_text_align_x_set(
@@ -893,6 +928,7 @@
 +   const char *state,      ///< The name of the 'part state' (ex. "default 
0.00")
 +   double align            ///< The new text align X value
 +);
++   
 +/**Set the text vertical align of a part state. The value range is from 
0.0(top) to 1.0(bottom)*/
 +EAPI void
 +edje_edit_state_text_align_y_set(
@@ -929,6 +965,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Set font name for a given part state. */
 +EAPI void
 +edje_edit_state_font_set(
@@ -980,6 +1017,7 @@
 +   const char *part,       ///< The name of the part
 +   const char *state       ///< The name of the 'part state' (ex. "default 
0.00")
 +);
++   
 +/**Set normal image for a given part state.*/
 +EAPI void
 +edje_edit_state_image_set(
@@ -1007,6 +1045,7 @@
 +   int *t,                 ///< A pointer to store the top value
 +   int *b                  ///< A pointer to store the bottom value
 +);
++   
 +/**Set the image border of a part state. Pass -1 to any of [l,r,t,b] to leave 
the value untouched.*/
 +EAPI void
 +edje_edit_state_image_border_set(
@@ -1069,6 +1108,7 @@
 +edje_edit_programs_list_get(
 +   Evas_Object *obj       ///< The edje object
 +);
++   
 +/**Add a new program to the edje file
 + * If a program with the same name just exist the function will fail.
 + */
@@ -1077,6 +1117,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *name        ///< The name of the new program
 +);
++   
 +/**Remove the given program from the edje file.
 + */
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
@@ -1085,6 +1126,14 @@
 +   const char *prog        ///< The name of the program to remove
 +);   
 +
++/**Check if a program with the given name exist in the edje object.
++ */
++EAPI unsigned char         ///< 1 if the program exist, 0 otherwise.
++edje_edit_program_exist(
++   Evas_Object *obj,       ///< The edje object 
++   const char *prog        ///< The name of the program
++);
++
 +/**Set a new name for the given program */
 +EAPI unsigned char        ///@return 1 on success or 0 on errors
 +edje_edit_program_name_set(
@@ -1099,6 +1148,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set source of the given program. */
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_source_set(
@@ -1113,6 +1163,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set signal of the given program. */
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_signal_set(
@@ -1127,6 +1178,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set in.from of a given program.*/
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_in_from_set(
@@ -1141,6 +1193,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set in.range of a given program.*/
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_in_range_set(
@@ -1157,6 +1210,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the action of a given program.
 + * Action can be one of EDJE_ACTION_TYPE_NONE, _STATE_SET, ACTION_STOP, 
SIGNAL_EMIT, DRAG_VAL_SET, _DRAG_VAL_STEP, _DRAG_VAL_PAGE, _SCRIPT
 + */
@@ -1176,6 +1230,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Add a new target name to the list of 'targets' in the given program.
 + * If program action is EDJE_ACTION_TYPE_ACTION_STOP then 'target' must be an 
existing program name.
 + * If action is EDJE_ACTION_TYPE_STATE_SET then 'target' must be an existing 
part name.
@@ -1186,12 +1241,14 @@
 +   const char *prog,       ///< The program name
 +   const char *target      ///< The name of another program or another part
 +);
++   
 +/**Clear the 'targets' list of the given program */
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_targets_clear(
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Get the list of action that will be run after the give program
 + * Return a list of program name.
 + * Use edje_edit_string_list_free() when you don't need it anymore.
@@ -1201,6 +1258,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Add a new program name to the list of 'afters' in the given program.
 + * All the programs listed in 'afters' will be executed after program 
execution.
 + */
@@ -1210,6 +1268,7 @@
 +   const char *prog,       ///< The program name
 +   const char *after       ///< The name of another program to add to the 
afters list
 +);
++   
 +/**Clear the 'afters' list of the given program */
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_afters_clear(
@@ -1226,6 +1285,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the state for the given program
 + * In a STATE_SET action this is the name of state to set.
 + * In a SIGNAL_EMIT action is the name of the signal to emit.
@@ -1246,6 +1306,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the value of state for the given program.
 + * In a STATE_SET action this is the value of state to set.
 + * Not used on SIGNAL_EMIT action.
@@ -1266,6 +1327,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the state2 for the given program
 + * In a STATE_SET action is not used
 + * In a SIGNAL_EMIT action is the source of the emitted signal.
@@ -1285,6 +1347,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the value2 of state for the given program.
 + * This is used in DRAG_ACTION
 + */
@@ -1303,6 +1366,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the type of transition to use when apply animations.
 + * Can be one of: EDJE_TWEEN_MODE_NONE, EDJE_TWEEN_MODE_LINEAR, 
EDJE_TWEEN_MODE_SINUSOIDAL, EDJE_TWEEN_MODE_ACCELERATE or 
EDJE_TWEEN_MODE_DECELERATE.
 + */
@@ -1319,6 +1383,7 @@
 +   Evas_Object *obj,       ///< The edje object
 +   const char *prog        ///< The program name
 +);
++   
 +/**Set the duration of the transition in seconds.*/
 +EAPI unsigned char         ///@return 1 on success or 0 on errors
 +edje_edit_program_transition_time_set(
@@ -1353,7 +1418,7 @@
 retrieving revision 1.39
 diff -u -r1.39 Makefile.am
 --- src/lib/Makefile.am        18 Jan 2008 06:38:46 -0000      1.39
-+++ src/lib/Makefile.am        19 Feb 2008 23:41:28 -0000
++++ src/lib/Makefile.am        20 Feb 2008 19:23:00 -0000
 @@ -14,7 +14,8 @@
  libedje.la
  
@@ -1379,8 +1444,8 @@
 RCS file: src/lib/edje_edit.c
 diff -N src/lib/edje_edit.c
 --- /dev/null  1 Jan 1970 00:00:00 -0000
-+++ src/lib/edje_edit.c        19 Feb 2008 23:41:28 -0000
-@@ -0,0 +1,3184 @@
++++ src/lib/edje_edit.c        20 Feb 2008 19:23:01 -0000
+@@ -0,0 +1,3205 @@
 +/*
 + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
 + */
@@ -1467,7 +1532,7 @@
 +/* INTERNALS */
 +/*************/
 +
-+Edje_Part_Description *
++static Edje_Part_Description *
 +_edje_part_description_find_byname(Edje *ed, const char *part, const char 
*state) //state include the value in the string (ex. "default 0.00")
 +{
 +   Edje_Real_Part *rp;
@@ -1505,7 +1570,7 @@
 +   return pd;
 +}
 +
-+int
++static int
 +_edje_image_id_find(Evas_Object *obj, const char *image_name)
 +{
 +   Edje_Image_Directory_Entry *i;
@@ -1533,7 +1598,7 @@
 +   return -1;
 +}
 +
-+const char*
++static const char*
 +_edje_image_name_find(Evas_Object *obj, int image_id)
 +{
 +   Edje_Image_Directory_Entry *i;
@@ -1710,6 +1775,226 @@
 +   return -1;
 +}
 +
++static void
++_edje_part_id_set(Edje *ed, Edje_Real_Part *rp, int new_id)
++{
++   /* This function change the id of a given real_part.
++    * All the depedency will be updated too.
++    * Also the table_parts is updated, and the current *rp in the table 
++    * is lost.
++    * If new Id = -1 then all the depencies will be deleted
++    */
++   int old_id;
++   Edje_Part *part;
++   Evas_List *l, *ll;
++   
++   part = rp->part;
++   
++   if (!part) return;
++   printf("CHANGE ID OF PART %s TO %d\n", part->name, new_id);
++   
++   if (!ed || !part || new_id < -1) return;
++   
++   if (part->id == new_id) return;
++   
++   old_id = part->id;
++   part->id = new_id;
++   
++   /* Fix all the dependecies in all parts... */
++   for (l = ed->collection->parts; l; l = l->next)
++   {
++      Edje_Part *p;
++      p = l->data;
++      //printf("   search id: %d in %s\n", old_id, p->name);
++      if (p->clip_to_id == old_id) p->clip_to_id = new_id;
++      if (p->dragable.confine_id == old_id) p->dragable.confine_id = new_id;
++      
++      /* ...in default description */
++      Edje_Part_Description *d;
++      d = p->default_desc;
++      //printf("      search in %s (%s)\n", p->name, d->state.name);
++      if (d->rel1.id_x == old_id) d->rel1.id_x = new_id;
++      if (d->rel1.id_y == old_id) d->rel1.id_y = new_id;
++      if (d->rel2.id_x == old_id) d->rel2.id_x = new_id;
++      if (d->rel2.id_y == old_id) d->rel2.id_y = new_id;
++      if (d->text.id_source == old_id) d->text.id_source = new_id;
++      if (d->text.id_text_source == old_id) d->text.id_text_source = new_id;
++      /* ...and in all other descriptions */
++      for (ll = p->other_desc; ll; ll = ll->next)
++      {
++         d = ll->data;
++         //printf("      search in %s (%s)\n", p->name, d->state.name);
++         if (d->rel1.id_x == old_id) d->rel1.id_x = new_id;
++         if (d->rel1.id_y == old_id) d->rel1.id_y = new_id;
++         if (d->rel2.id_x == old_id) d->rel2.id_x = new_id;
++         if (d->rel2.id_y == old_id) d->rel2.id_y = new_id;
++         if (d->text.id_source == old_id) d->text.id_source = new_id;
++         if (d->text.id_text_source == old_id) d->text.id_text_source = 
new_id;
++      }
++   }
++   
++   /*...and also in programs targets */
++   for (l = ed->collection->programs; l; l = l->next)
++   {
++      Edje_Program *epr;
++      
++      epr = l->data;
++      if (epr->action != EDJE_ACTION_TYPE_STATE_SET)
++         continue;
++      
++      for (ll = epr->targets; ll; ll = ll->next)
++      {
++         Edje_Program_Target *pt;
++         
++         pt = ll->data;
++         if (pt->id == old_id)
++            if (new_id == -1)
++               epr->targets = evas_list_remove(epr->targets, pt);
++            else
++               pt->id = new_id;
++      }
++   }
++   
++   /* Adjust table_parts */
++   if (new_id >= 0)
++      ed->table_parts[new_id] = rp;
++}
++
++static void
++_edje_parts_id_switch(Edje *ed, Edje_Real_Part *rp1, Edje_Real_Part *rp2)
++{
++   /* This function switch the id of two parts.
++    * All the depedency will be updated too.
++    * Also the table_parts is updated,
++    * The parts list isn't touched
++    */
++   int id1;
++   int id2;
++   Evas_List *l, *ll;
++   
++   printf("SWITCH ID OF PART %d AND %d\n", rp1->part->id, rp2->part->id);
++   
++   if (!ed || !rp1 || !rp2) return;
++   if (rp1 == rp2) return;
++   
++   id1 = rp1->part->id;
++   id2 = rp2->part->id;
++   
++   /* Switch ids */
++   rp1->part->id = id2;
++   rp2->part->id = id1;
++   
++   /* adjust table_parts */
++   ed->table_parts[id1] = rp2;
++   ed->table_parts[id2] = rp1;
++   
++   // Fix all the dependecies in all parts...
++   for (l = ed->collection->parts; l; l = l->next)
++   {
++      Edje_Part *p;
++      p = l->data;
++      //printf("   search id: %d in %s\n", old_id, p->name);
++      if (p->clip_to_id == id1) p->clip_to_id = id2;
++      else if (p->clip_to_id == id2) p->clip_to_id = id1;
++      if (p->dragable.confine_id == id1) p->dragable.confine_id = id2;
++      else if (p->dragable.confine_id == id2) p->dragable.confine_id = id1;
++      
++      // ...in default description
++      Evas_List *ll;
++      Edje_Part_Description *d;
++      d = p->default_desc;
++     // printf("      search in %s (%s)\n", p->name, d->state.name);
++      if (d->rel1.id_x == id1) d->rel1.id_x = id2;
++      else if (d->rel1.id_x == id2) d->rel1.id_x = id1;
++      if (d->rel1.id_y == id1) d->rel1.id_y = id2;
++      else if (d->rel1.id_y == id2) d->rel1.id_y = id1;
++      if (d->rel2.id_x == id1) d->rel2.id_x = id2;
++      else if (d->rel2.id_x == id2) d->rel2.id_x = id1;
++      if (d->rel2.id_y == id1) d->rel2.id_y = id2;
++      else if (d->rel2.id_y == id2) d->rel2.id_y = id1;
++      if (d->text.id_source == id1) d->text.id_source = id2;
++      else if (d->text.id_source == id2) d->text.id_source = id1;
++      if (d->text.id_text_source == id1) d->text.id_text_source = id2;
++      else if (d->text.id_text_source == id2) d->text.id_text_source = id2;
++      // ...and in all other descriptions
++      for (ll = p->other_desc; ll; ll = ll->next)
++      {
++         d = ll->data;
++         //printf("      search in %s (%s)\n", p->name, d->state.name);
++         if (d->rel1.id_x == id1) d->rel1.id_x = id2;
++         else if (d->rel1.id_x == id2) d->rel1.id_x = id1;
++         if (d->rel1.id_y == id1) d->rel1.id_y = id2;
++         else if (d->rel1.id_y == id2) d->rel1.id_y = id1;
++         if (d->rel2.id_x == id1) d->rel2.id_x = id2;
++         else if (d->rel2.id_x == id2) d->rel2.id_x = id1;
++         if (d->rel2.id_y == id1) d->rel2.id_y = id2;
++         else if (d->rel2.id_y == id2) d->rel2.id_y = id1;
++         if (d->text.id_source == id1) d->text.id_source = id2;
++         else if (d->text.id_source == id2) d->text.id_source = id1;
++         if (d->text.id_text_source == id1) d->text.id_text_source = id2;
++         else if (d->text.id_text_source == id2) d->text.id_text_source = id2;
++      }
++   }
++   //...and also in programs targets
++   for (l = ed->collection->programs; l; l = l->next)
++   {
++      Edje_Program *epr;
++      
++      epr = l->data;
++      if (epr->action != EDJE_ACTION_TYPE_STATE_SET)
++         continue;
++      
++      for (ll = epr->targets; ll; ll = ll->next)
++      {
++         Edje_Program_Target *pt;
++         
++         pt = ll->data;
++         if (pt->id == id1) pt->id = id2;
++         else if (pt->id == id2) pt->id = id1;
++      }
++   }
++   //TODO Real part dependencies are ok?
++}
++
++static void
++_edje_fix_parts_id(Edje *ed)
++{
++   /* We use this to clear the id hole leaved when a part is removed.
++    * After the execution of this function all parts will have a right
++    * (uniqe & ordered) id. The table_parts is also updated.
++    */
++   Evas_List *l;
++   int correct_id;
++   int count;
++   printf("FIXING PARTS ID \n");
++   
++   //TODO order the list first to be more robust
++   
++   /* Give a correct id to all the parts */
++   correct_id = 0;
++   for (l = ed->collection->parts; l; l = l->next)
++   {
++      Edje_Part *p;
++      
++      p = l->data;
++      //printf(" [%d]Checking part: %s id: %d\n", correct_id, p->name, p->id);
++      if (p->id != correct_id)
++         _edje_part_id_set(ed, ed->table_parts[p->id], correct_id);
++      
++      correct_id++;
++   }
++   
++   /* If we have removed some parts realloc table_parts */
++   count = evas_list_count(ed->collection->parts);
++   if (count != ed->table_parts_size)
++   {
++      ed->table_parts = realloc(ed->table_parts, SZ(Edje_Real_Part *) * 
count);
++      ed->table_parts_size = count;
++   }
++   
++   //printf("\n");
++}
++
 +/*****************/
 +/*  GENERAL API  */
 +/*****************/
@@ -1884,6 +2169,23 @@
 +   return 1;
 +}
 +
++
++EAPI unsigned char
++edje_edit_group_exist(Evas_Object *obj, const char *group)
++{
++   Evas_List *l;
++   GET_ED_OR_RETURN(0)
++   for (l = ed->file->collection_dir->entries; l; l = l->next)
++   {
++      Edje_Part_Collection_Directory_Entry *e;
++      
++      e = l->data;
++      if (e->entry && !strcmp(e->entry, group))
++         return 1;
++   }
++   return 0;
++}
++
 +EAPI void
 +edje_edit_group_name_set(Evas_Object *obj, const char *new_name)
 +{
@@ -2001,336 +2303,125 @@
 +   if (_edje_real_part_get(ed, name))
 +      return FALSE;
 +   
-+   /* Alloc Edje_Part or return */
-+   ep = mem_alloc(sizeof(Edje_Part));
-+   if (!ep) return FALSE;
-+   
-+   /* Alloc Edje_Real_Part or return */
-+   rp = mem_alloc(sizeof(Edje_Real_Part));
-+   if (!rp)
-+   {
-+      free(ep);
-+      return FALSE;
-+   }
-+   
-+   /* Init Edje_Part */
-+   pc = ed->collection;
-+   pc->parts = evas_list_append(pc->parts, ep);
-+   
-+   ep->id = evas_list_count(pc->parts) - 1;
-+   ep->type = type;
-+   ep->name = evas_stringshare_add(name);
-+   ep->mouse_events = 1;
-+   ep->repeat_events = 0;
-+   ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
-+   ep->precise_is_inside = 0;
-+   ep->use_alternate_font_metrics = 0;
-+   ep->clip_to_id = -1;
-+   ep->dragable.confine_id = -1;
-+   ep->dragable.events_id = -1;
-+   
-+   ep->default_desc = NULL;
-+   ep->other_desc = NULL;
-+   
-+   /* Init Edje_Real_Part */
-+   rp->edje = ed;
-+   _edje_ref(rp->edje);
-+   rp->part = ep;
-+   
-+   if (ep->type == EDJE_PART_TYPE_RECTANGLE)
-+      rp->object = evas_object_rectangle_add(ed->evas);
-+   else if (ep->type == EDJE_PART_TYPE_IMAGE)
-+      rp->object = evas_object_image_add(ed->evas);
-+   else if (ep->type == EDJE_PART_TYPE_TEXT)
-+   {
-+      _edje_text_part_on_add(ed, rp);
-+      rp->object = evas_object_text_add(ed->evas);
-+      evas_object_text_font_source_set(rp->object, ed->path);
-+   }
-+   else if (ep->type == EDJE_PART_TYPE_SWALLOW ||
-+            ep->type == EDJE_PART_TYPE_GROUP)
-+   {
-+      rp->object = evas_object_rectangle_add(ed->evas);
-+      evas_object_color_set(rp->object, 0, 0, 0, 0);
-+      evas_object_pass_events_set(rp->object, 1);
-+      evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-+   }
-+   else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK)
-+      rp->object = evas_object_textblock_add(ed->evas);
-+   else if (ep->type == EDJE_PART_TYPE_GRADIENT)
-+      rp->object = evas_object_gradient_add(ed->evas);
-+   else
-+   {
-+      printf("EDJE ERROR: wrong part type %i!\n", ep->type);
-+   }
-+   if (rp->object)
-+   {
-+      evas_object_smart_member_add(rp->object, ed->obj);
-+      evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj));
-+      if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != 
EDJE_PART_TYPE_GROUP)
-+      {
-+         if (ep->mouse_events)
-+         {
-+            _edje_callbacks_add(rp->object, ed, rp);
-+            if (ep->repeat_events)
-+               evas_object_repeat_events_set(rp->object, 1);
-+
-+            if (ep->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB)
-+               evas_object_pointer_mode_set(rp->object, ep->pointer_mode);
-+         }
-+         else
-+         {
-+            evas_object_pass_events_set(rp->object, 1);
-+            evas_object_pointer_mode_set(rp->object,
-+                                         EVAS_OBJECT_POINTER_MODE_NOGRAB);
-+         }
-+         if (ep->precise_is_inside)
-+            evas_object_precise_is_inside_set(rp->object, 1);
-+      }
-+      evas_object_clip_set(rp->object, ed->clipper);
-+   }
-+   rp->drag.step.x = ep->dragable.step_x;
-+   rp->drag.step.y = ep->dragable.step_y;
-+   rp->gradient_id = -1;
-+
-+   
-+   /* Update table_parts */
-+   ed->table_parts_size++;
-+   ed->table_parts = realloc(ed->table_parts,
-+                             sizeof(Edje_Real_Part *) * ed->table_parts_size);
-+   
-+   ed->table_parts[ep->id % ed->table_parts_size] = rp;
-+   
-+   
-+   /* Create default description */
-+   edje_edit_state_add(obj, name, "default");
-+   
-+   rp->param1.description = ep->default_desc;
-+   rp->chosen_description = rp->param1.description;
-+   
-+   edje_object_calc_force(obj);
-+   
-+   return TRUE;
-+}
-+
-+static void
-+_edje_part_id_set(Edje *ed, Edje_Real_Part *rp, int new_id)
-+{
-+   /* This function change the id of a given real_part.
-+    * All the depedency will be updated too.
-+    * Also the table_parts is updated, and the current *rp in the table 
-+    * is lost.
-+    */
-+   int old_id;
-+   Edje_Part *part;
-+   Evas_List *l, *ll;
-+   
-+   part = rp->part;
-+   
-+   if (!part) return;
-+   printf("CHANGE ID OF PART %s TO %d\n", part->name, new_id);
-+   
-+   if (!ed || !part || new_id < 0) return;
-+   
-+   if (part->id == new_id) return;
-+   
-+   old_id = part->id;
-+   part->id = new_id;
-+   
-+   /* Fix all the dependecies in all parts... */
-+   for (l = ed->collection->parts; l; l = l->next)
-+   {
-+      Edje_Part *p;
-+      p = l->data;
-+      //printf("   search id: %d in %s\n", old_id, p->name);
-+      if (p->clip_to_id == old_id) p->clip_to_id = new_id;
-+      if (p->dragable.confine_id == old_id) p->dragable.confine_id = new_id;
-+      
-+      /* ...in default description */
-+      Edje_Part_Description *d;
-+      d = p->default_desc;
-+      //printf("      search in %s (%s)\n", p->name, d->state.name);
-+      if (d->rel1.id_x == old_id) d->rel1.id_x = new_id;
-+      if (d->rel1.id_y == old_id) d->rel1.id_y = new_id;
-+      if (d->rel2.id_x == old_id) d->rel2.id_x = new_id;
-+      if (d->rel2.id_y == old_id) d->rel2.id_y = new_id;
-+      if (d->text.id_source == old_id) d->text.id_source = new_id;
-+      if (d->text.id_text_source == old_id) d->text.id_text_source = new_id;
-+      /* ...and in all other descriptions */
-+      for (ll = p->other_desc; ll; ll = ll->next)
-+      {
-+         d = ll->data;
-+         //printf("      search in %s (%s)\n", p->name, d->state.name);
-+         if (d->rel1.id_x == old_id) d->rel1.id_x = new_id;
-+         if (d->rel1.id_y == old_id) d->rel1.id_y = new_id;
-+         if (d->rel2.id_x == old_id) d->rel2.id_x = new_id;
-+         if (d->rel2.id_y == old_id) d->rel2.id_y = new_id;
-+         if (d->text.id_source == old_id) d->text.id_source = new_id;
-+         if (d->text.id_text_source == old_id) d->text.id_text_source = 
new_id;
-+      }
-+   }
-+   
-+   /*...and also in programs targets */
-+   for (l = ed->collection->programs; l; l = l->next)
-+   {
-+      Edje_Program *epr;
-+      
-+      epr = l->data;
-+      if (epr->action != EDJE_ACTION_TYPE_STATE_SET)
-+         continue;
-+      
-+      for (ll = epr->targets; ll; ll = ll->next)
-+      {
-+         Edje_Program_Target *pt;
-+         
-+         pt = ll->data;
-+         if (pt->id == old_id) pt->id = new_id;
-+      }
-+   }
-+   
-+   /* Adjust table_parts */
-+   ed->table_parts[new_id] = rp;
-+}
-+
-+static void
-+_edje_part_id_switch(Edje *ed, Edje_Real_Part *rp1, Edje_Real_Part *rp2)
-+{
-+   /* This function switch the id of two parts.
-+    * All the depedency will be updated too.
-+    * Also the table_parts is updated,
-+    * The parts list isn't touched
-+    */
-+   int id1;
-+   int id2;
-+   Evas_List *l, *ll;
++   /* Alloc Edje_Part or return */
++   ep = mem_alloc(sizeof(Edje_Part));
++   if (!ep) return FALSE;
 +   
-+   printf("SWITCH ID OF PART %d AND %d\n", rp1->part->id, rp2->part->id);
++   /* Alloc Edje_Real_Part or return */
++   rp = mem_alloc(sizeof(Edje_Real_Part));
++   if (!rp)
++   {
++      free(ep);
++      return FALSE;
++   }
 +   
-+   if (!ed || !rp1 || !rp2) return;
-+   if (rp1 == rp2) return;
++   /* Init Edje_Part */
++   pc = ed->collection;
++   pc->parts = evas_list_append(pc->parts, ep);
 +   
-+   id1 = rp1->part->id;
-+   id2 = rp2->part->id;
++   ep->id = evas_list_count(pc->parts) - 1;
++   ep->type = type;
++   ep->name = evas_stringshare_add(name);
++   ep->mouse_events = 1;
++   ep->repeat_events = 0;
++   ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
++   ep->precise_is_inside = 0;
++   ep->use_alternate_font_metrics = 0;
++   ep->clip_to_id = -1;
++   ep->dragable.confine_id = -1;
++   ep->dragable.events_id = -1;
 +   
-+   /* Switch ids */
-+   rp1->part->id = id2;
-+   rp2->part->id = id1;
++   ep->default_desc = NULL;
++   ep->other_desc = NULL;
 +   
-+   /* adjust table_parts */
-+   ed->table_parts[id1] = rp2;
-+   ed->table_parts[id2] = rp1;
++   /* Init Edje_Real_Part */
++   rp->edje = ed;
++   _edje_ref(rp->edje);
++   rp->part = ep;
 +   
-+   // Fix all the dependecies in all parts...
-+   for (l = ed->collection->parts; l; l = l->next)
++   if (ep->type == EDJE_PART_TYPE_RECTANGLE)
++      rp->object = evas_object_rectangle_add(ed->evas);
++   else if (ep->type == EDJE_PART_TYPE_IMAGE)
++      rp->object = evas_object_image_add(ed->evas);
++   else if (ep->type == EDJE_PART_TYPE_TEXT)
 +   {
-+      Edje_Part *p;
-+      p = l->data;
-+      //printf("   search id: %d in %s\n", old_id, p->name);
-+      if (p->clip_to_id == id1) p->clip_to_id = id2;
-+      else if (p->clip_to_id == id2) p->clip_to_id = id1;
-+      if (p->dragable.confine_id == id1) p->dragable.confine_id = id2;
-+      else if (p->dragable.confine_id == id2) p->dragable.confine_id = id1;
-+      
-+      // ...in default description
-+      Evas_List *ll;
-+      Edje_Part_Description *d;
-+      d = p->default_desc;
-+     // printf("      search in %s (%s)\n", p->name, d->state.name);
-+      if (d->rel1.id_x == id1) d->rel1.id_x = id2;
-+      else if (d->rel1.id_x == id2) d->rel1.id_x = id1;
-+      if (d->rel1.id_y == id1) d->rel1.id_y = id2;
-+      else if (d->rel1.id_y == id2) d->rel1.id_y = id1;
-+      if (d->rel2.id_x == id1) d->rel2.id_x = id2;
-+      else if (d->rel2.id_x == id2) d->rel2.id_x = id1;
-+      if (d->rel2.id_y == id1) d->rel2.id_y = id2;
-+      else if (d->rel2.id_y == id2) d->rel2.id_y = id1;
-+      if (d->text.id_source == id1) d->text.id_source = id2;
-+      else if (d->text.id_source == id2) d->text.id_source = id1;
-+      if (d->text.id_text_source == id1) d->text.id_text_source = id2;
-+      else if (d->text.id_text_source == id2) d->text.id_text_source = id2;
-+      // ...and in all other descriptions
-+      for (ll = p->other_desc; ll; ll = ll->next)
-+      {
-+         d = ll->data;
-+         //printf("      search in %s (%s)\n", p->name, d->state.name);
-+         if (d->rel1.id_x == id1) d->rel1.id_x = id2;
-+         else if (d->rel1.id_x == id2) d->rel1.id_x = id1;
-+         if (d->rel1.id_y == id1) d->rel1.id_y = id2;
-+         else if (d->rel1.id_y == id2) d->rel1.id_y = id1;
-+         if (d->rel2.id_x == id1) d->rel2.id_x = id2;
-+         else if (d->rel2.id_x == id2) d->rel2.id_x = id1;
-+         if (d->rel2.id_y == id1) d->rel2.id_y = id2;
-+         else if (d->rel2.id_y == id2) d->rel2.id_y = id1;
-+         if (d->text.id_source == id1) d->text.id_source = id2;
-+         else if (d->text.id_source == id2) d->text.id_source = id1;
-+         if (d->text.id_text_source == id1) d->text.id_text_source = id2;
-+         else if (d->text.id_text_source == id2) d->text.id_text_source = id2;
-+      }
++      _edje_text_part_on_add(ed, rp);
++      rp->object = evas_object_text_add(ed->evas);
++      evas_object_text_font_source_set(rp->object, ed->path);
 +   }
-+   //...and also in programs targets
-+   for (l = ed->collection->programs; l; l = l->next)
++   else if (ep->type == EDJE_PART_TYPE_SWALLOW ||
++            ep->type == EDJE_PART_TYPE_GROUP)
 +   {
-+      Edje_Program *epr;
-+      
-+      epr = l->data;
-+      if (epr->action != EDJE_ACTION_TYPE_STATE_SET)
-+         continue;
-+      
-+      for (ll = epr->targets; ll; ll = ll->next)
++      rp->object = evas_object_rectangle_add(ed->evas);
++      evas_object_color_set(rp->object, 0, 0, 0, 0);
++      evas_object_pass_events_set(rp->object, 1);
++      evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
++   }
++   else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK)
++      rp->object = evas_object_textblock_add(ed->evas);
++   else if (ep->type == EDJE_PART_TYPE_GRADIENT)
++      rp->object = evas_object_gradient_add(ed->evas);
++   else
++   {
++      printf("EDJE ERROR: wrong part type %i!\n", ep->type);
++   }
++   if (rp->object)
++   {
++      evas_object_smart_member_add(rp->object, ed->obj);
++      evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj));
++      if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != 
EDJE_PART_TYPE_GROUP)
 +      {
-+         Edje_Program_Target *pt;
-+         
-+         pt = ll->data;
-+         if (pt->id == id1) pt->id = id2;
-+         else if (pt->id == id2) pt->id = id1;
++         if (ep->mouse_events)
++         {
++            _edje_callbacks_add(rp->object, ed, rp);
++            if (ep->repeat_events)
++               evas_object_repeat_events_set(rp->object, 1);
++
++            if (ep->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB)
++               evas_object_pointer_mode_set(rp->object, ep->pointer_mode);
++         }
++         else
++         {
++            evas_object_pass_events_set(rp->object, 1);
++            evas_object_pointer_mode_set(rp->object,
++                                         EVAS_OBJECT_POINTER_MODE_NOGRAB);
++         }
++         if (ep->precise_is_inside)
++            evas_object_precise_is_inside_set(rp->object, 1);
 +      }
++      evas_object_clip_set(rp->object, ed->clipper);
 +   }
-+   //TODO Real part dependencies are ok?
-+}
-+static void
-+_edje_fix_parts_id(Edje *ed)
-+{
-+   /* We use this to clear the id hole leaved when a part is removed.
-+    * After the execution of this function all parts will have a right
-+    * (uniqe & ordered) id. The table_parts is also updated.
-+    */
-+   Evas_List *l;
-+   int correct_id;
-+   int count;
-+   printf("FIXING PARTS ID \n");
++   rp->drag.step.x = ep->dragable.step_x;
++   rp->drag.step.y = ep->dragable.step_y;
++   rp->gradient_id = -1;
++
 +   
-+   //TODO order the list first to be more robust
++   /* Update table_parts */
++   ed->table_parts_size++;
++   ed->table_parts = realloc(ed->table_parts,
++                             sizeof(Edje_Real_Part *) * ed->table_parts_size);
 +   
-+   /* Give a correct id to all the parts */
-+   correct_id = 0;
-+   for (l = ed->collection->parts; l; l = l->next)
-+   {
-+      Edje_Part *p;
-+      
-+      p = l->data;
-+      //printf(" [%d]Checking part: %s id: %d\n", correct_id, p->name, p->id);
-+      if (p->id != correct_id)
-+         _edje_part_id_set(ed, ed->table_parts[p->id], correct_id);
-+      
-+      correct_id++;
-+   }
++   ed->table_parts[ep->id % ed->table_parts_size] = rp;
 +   
-+   /* If we have removed some parts realloc table_parts */
-+   count = evas_list_count(ed->collection->parts);
-+   if (count != ed->table_parts_size)
-+   {
-+      ed->table_parts = realloc(ed->table_parts, SZ(Edje_Real_Part *) * 
count);
-+      ed->table_parts_size = count;
-+   }
 +   
-+   //printf("\n");
++   /* Create default description */
++   edje_edit_state_add(obj, name, "default");
++   
++   rp->param1.description = ep->default_desc;
++   rp->chosen_description = rp->param1.description;
++   
++   edje_object_calc_force(obj);
++   
++   return TRUE;
 +}
 +
++
++
 +EAPI unsigned char
 +edje_edit_part_del(Evas_Object *obj, const char* part)
 +{
 +   printf("REMOVE PART: %s\n", part);
-+   Evas_List *l;
++   Evas_List *l, *ll;
 +   Edje_Part *ep;
 +   int id;
 +   
@@ -2340,7 +2431,7 @@
 +   
 +   if (ed->table_parts_size <= 1) return FALSE; //don't remove the last part
 +      
-+   /* Clear Edje_Real_Parts that link to the removed one */
++   /* Unlik Edje_Real_Parts that link to the removed one */
 +   int i;
 +   for (i = 0; i < ed->table_parts_size; i++)
 +   {
@@ -2374,37 +2465,9 @@
 +      //TODO confine ??
 +   }
 +   
-+   /* Clear all the parts and descriptions that refer to id */
-+   for (l = ed->collection->parts; l; l = l->next)
-+   {
-+      Edje_Part *p;
-+      
-+      p = l->data;
-+      if (p->clip_to_id == id) p->clip_to_id = -1;
-+      if (p->dragable.confine_id == id) p->dragable.confine_id = 0; //TODO is 
0 right?? don't tink so
-+      
-+      Evas_List *ll;
-+      Edje_Part_Description *d;
-+      d = p->default_desc;
-+      if (d->rel1.id_x == id) d->rel1.id_x = -1;
-+      if (d->rel1.id_y == id) d->rel1.id_y = -1;
-+      if (d->rel2.id_x == id) d->rel2.id_x = -1;
-+      if (d->rel2.id_y == id) d->rel2.id_y = -1;
-+      if (d->text.id_source == id) d->text.id_source = -1;
-+      if (d->text.id_text_source == id) d->text.id_text_source = -1;
-+      
-+      for (ll = p->other_desc; ll; ll = ll->next)
-+      {
-+         d = ll->data;
-+         if (d->rel1.id_x == id) d->rel1.id_x = -1;
-+         if (d->rel1.id_y == id) d->rel1.id_y = -1;
-+         if (d->rel2.id_x == id) d->rel2.id_x = -1;
-+         if (d->rel2.id_y == id) d->rel2.id_y = -1;
-+         if (d->text.id_source == id) d->text.id_source = -1;
-+         if (d->text.id_text_source == id) d->text.id_text_source = -1;
-+      }
-+   }
-+  
++   /* Unlink all the parts and descriptions that refer to id */
++   _edje_part_id_set(ed, rp, -1);
++
 +   /* Remove part from parts list */
 +   Edje_Part_Collection *pc;
 +   pc = ed->collection;
@@ -2428,7 +2491,7 @@
 +   }
 +   free(ep);
 +   
-+   /* Free real_part */
++   /* Free Edje_Real_Part */
 +   _edje_real_part_free(rp);
 +   
 +   
@@ -2437,6 +2500,14 @@
 +}
 +
 +
++
++EAPI unsigned char
++edje_edit_part_exist(Evas_Object *obj, const char *part)
++{
++   GET_RP_OR_RETURN(0)
++   return 1;
++}
++
 +EAPI unsigned char
 +edje_edit_part_restack_below(Evas_Object *obj, const char* part)
 +{
@@ -2453,7 +2524,7 @@
 +   group->parts = evas_list_remove(group->parts, rp->part);
 +   group->parts = evas_list_prepend_relative(group->parts, rp->part, 
prev->part);
 +   
-+   _edje_part_id_switch(ed, rp, prev);
++   _edje_parts_id_switch(ed, rp, prev);
 +   
 +   evas_object_stack_below(rp->object, prev->object);
 +   
@@ -2478,7 +2549,7 @@
 +   group->parts = evas_list_append_relative(group->parts, rp->part, 
next->part);
 +   
 +   /* update ids */
-+   _edje_part_id_switch(ed, rp, next);
++   _edje_parts_id_switch(ed, rp, next);
 +   
 +   evas_object_stack_above(rp->object, next->object);
 +   
@@ -2833,6 +2904,13 @@
 +   pd->gradient.rel2.offset_y = -1;
 +}
 +
++
++EAPI unsigned char
++edje_edit_state_exist(Evas_Object *obj, const char *part, const char *state)
++{
++   GET_PD_OR_RETURN(0)
++   return 1;
++}
 +//relative
 +EAPI double
 +edje_edit_state_rel1_relative_x_get(Evas_Object *obj, const char *part, const 
char *state)
@@ -4034,6 +4112,14 @@
 +   return 1;
 +}
 +
++
++EAPI unsigned char
++edje_edit_program_exist(Evas_Object *obj, const char *prog)
++{
++   GET_EPR_OR_RETURN(0)
++   return 1;
++}
++
 +EAPI unsigned char
 +edje_edit_program_name_set(Evas_Object *obj, const char *prog, const char* 
new_name)
 +{
@@ -4565,13 +4651,29 @@
 +   
 +   printf("******************  END  ************************\n\n");
 +}
+Index: src/lib/edje_embryo.c
+===================================================================
+RCS file: /cvs/e/e17/libs/edje/src/lib/edje_embryo.c,v
+retrieving revision 1.58
+diff -u -r1.58 edje_embryo.c
+--- src/lib/edje_embryo.c      25 Jan 2008 03:35:46 -0000      1.58
++++ src/lib/edje_embryo.c      20 Feb 2008 19:23:01 -0000
+@@ -847,7 +847,7 @@
+    Edje *ed;
+    int part_id = 0;
+    Edje_Real_Part *rp;
+-   char *s;
++   const char *s;
+ 
+    CHKPARAM(4);
+    ed = embryo_program_data_get(ep);
 Index: src/lib/edje_load.c
 ===================================================================
 RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v
 retrieving revision 1.111
 diff -u -r1.111 edje_load.c
 --- src/lib/edje_load.c        18 Jan 2008 06:34:04 -0000      1.111
-+++ src/lib/edje_load.c        19 Feb 2008 23:41:28 -0000
++++ src/lib/edje_load.c        20 Feb 2008 19:23:01 -0000
 @@ -5,7 +5,7 @@
  #include "Edje.h"
  #include "edje_private.h"
@@ -4590,3 +4692,75 @@
  _edje_collection_free_part_description_free(Edje_Part_Description *desc)
  {
     if (desc->state.name) evas_stringshare_del(desc->state.name);
+Index: src/lib/edje_private.h
+===================================================================
+RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v
+retrieving revision 1.137
+diff -u -r1.137 edje_private.h
+--- src/lib/edje_private.h     19 Jan 2008 01:00:14 -0000      1.137
++++ src/lib/edje_private.h     20 Feb 2008 19:23:01 -0000
+@@ -328,31 +328,31 @@
+ 
+ struct _Edje_Program /* a conditional program to be run */
+ {
+-   int        id; /* id of program */
+-   char      *name; /* name of the action */
++   int         id; /* id of program */
++   const char *name; /* name of the action */
+ 
+-   char      *signal; /* if signal emission name matches the glob here... */
+-   char      *source; /* if part that emitted this (name) matches this glob */
++   const char *signal; /* if signal emission name matches the glob here... */
++   const char *source; /* if part that emitted this (name) matches this glob 
*/
+ 
+    struct {
+-      double  from;
+-      double  range;
++      double   from;
++      double   range;
+    } in;
+ 
+-   int        action; /* type - set state, stop action, set drag pos etc. */
+-   char      *state; /* what state of alternates to apply, NULL = default */
+-   char      *state2; /* what other state to use - for signal emit action */
+-   double     value; /* value of state to apply (if multiple names match) */
+-   double     value2; /* other value for drag actions */
++   int         action; /* type - set state, stop action, set drag pos etc. */
++   const char *state; /* what state of alternates to apply, NULL = default */
++   const char *state2; /* what other state to use - for signal emit action */
++   double      value; /* value of state to apply (if multiple names match) */
++   double      value2; /* other value for drag actions */
+ 
+    struct {
+-      int     mode; /* how to tween - linear, sinusoidal etc. */
+-      double  time; /* time to graduate between current and new state */
++      int      mode; /* how to tween - linear, sinusoidal etc. */
++      double   time; /* time to graduate between current and new state */
+    } tween;
+ 
+-   Evas_List *targets; /* list of target parts to apply the state to */
++   Evas_List  *targets; /* list of target parts to apply the state to */
+ 
+-   Evas_List *after; /* list of actions to run at the end of this, for 
looping */
++   Evas_List  *after; /* list of actions to run at the end of this, for 
looping */
+ };
+ 
+ struct _Edje_Program_Target /* the target of an action */
+@@ -411,7 +411,7 @@
+ 
+ struct _Edje_Part
+ {
+-   char                  *name; /* the name if any of the part */
++   const char            *name; /* the name if any of the part */
+    Edje_Part_Description *default_desc; /* the part descriptor for default */
+    Evas_List             *other_desc; /* other possible descriptors */
+    char                  *source;
+@@ -450,7 +450,7 @@
+ {
+    struct {
+       double         value; /* the value of the state (for ranges) */
+-      char          *name; /* the named state if any */
++      const char    *name; /* the named state if any */
+    } state;
+ 
+    struct {



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to