Edje Edit: Now inherits the smart from Edje and has stuff of its own in there.
authorsachiel <sachiel@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 22 Apr 2010 17:56:00 +0000 (17:56 +0000)
committersachiel <sachiel@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 22 Apr 2010 17:56:00 +0000 (17:56 +0000)
To use the Edje Edit API now you need to add the object to the canvas with edje_edit_object_add().
Normal edje functions will work as usual, but it's no longer possible to tamper with the standard objects internals.
Also, big reformat of Edje_Edit.h while fixing docs. Yes, monster commit.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@48220 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Edje_Edit.h
src/lib/edje_edit.c

index b9802f6..28a8a17 100644 (file)
@@ -49,11 +49,6 @@ typedef enum _Edje_Edit_Image_Comp
  * is contained in the edje file. For a reference of what all parameter means
  * look at the complete @ref edcref.
  *
- * All the functions that deals with part states include the state value inside
- * the returned strings (ex: "defaut 0.00"). For this reason there aren't
- * functions to set/get a state value, you have to pass the value inside the
- * name string (always in the form "state x.xx").
- *
  * Don't forget to free all the strings and the lists returned by any edje_edit_*()
  * functions using edje_edit_string_free() and edje_edit_string_list_free() when
  * you don't need anymore.
@@ -61,11 +56,12 @@ typedef enum _Edje_Edit_Image_Comp
  * Example: print all the part in a loaded edje_object
  * @code
  *  Eina_List *parts, *l;
+ *  char *part;
  *
  *  parts = edje_edit_parts_list_get(edje_object);
- *  while(l = parts; l; l = eina_list_nexst(l))
+ *  EINA_LIST_FOREACH(parts, l, part)
  *  {
- *     printf("Part: %s\n", (char*)eina_list_data_get(l));
+ *     printf("Part: %s\n", part);
  *  }
  *  edje_edit_string_list_free(parts);
  * @endcode
@@ -74,9 +70,9 @@ typedef enum _Edje_Edit_Image_Comp
  * @code
  * Evas_Object *edje;
  *
- * edje = edje_object_add(evas);
- * edje_object_file_set(edje,"edj/file/name", "group to load");
- * edje_edit_state_color_set(edje, "MyRectName", "default 0.00", 255, 255, 0, 255);
+ * edje = edje_edit_object_add(evas);
+ * edje_object_file_set(edje, "edj/file/name", "group to load");
+ * edje_edit_state_color_set(edje, "MyRectName", "default", 0.00, 255, 255, 0, 255);
  * edje_edit_save(edje);
  * @endcode
  *
@@ -94,55 +90,73 @@ extern "C" {
  *  General functions that don't fit in other cateories.
  */ //@{
 
-/** Free a generic Eina_List of (char *) allocated by an edje_edit_*_get() function.*/
-EAPI void
-edje_edit_string_list_free(
-   Eina_List *lst          ///< The list to free. Will also free all the strings.
-);
+/** Adds an editable Edje object to the canvas.
+ *
+ * An Edje_Edit object is, for the most part, a standard Edje object. Only
+ * difference is you can use the Edje_Edit API on them.
+ *
+ * @param e Evas canvas where to add the object.
+ *
+ * @return An Evas_Object of type Edje_Edit, or NULL if an error occurred.
+ */
+EAPI Evas_Object * edje_edit_object_add(Evas *e);
+
+/** Free a generic Eina_List of (char *) allocated by an edje_edit_*_get() function.
+ *
+ * @param lst List of strings to free.
+ */
+EAPI void edje_edit_string_list_free(Eina_List *lst);
 
-/** Free a generic string (char *) allocated by an edje_edit_*_get() function.*/
-EAPI void
-edje_edit_string_free(
-   const char *str         ///< The string to free.
-);
+/** Free a generic string (char *) allocated by an edje_edit_*_get() function.
+ *
+ * @param str String to free.
+ */
+EAPI void edje_edit_string_free(const char *str);
 
-/** Get the name of the program that compiled the edje file.@n
+/** Get the name of the program that compiled the edje file.
   * Can be 'edje_cc' or 'edje_edit'
+  *
+  * @param obj Object being edited.
+  *
+  * @return Compiler stored in the Edje file
   */
-EAPI const char*           ///@return The compiler name. Don't forget to free the string with edje_edit_string_free()
-edje_edit_compiler_get(
-   Evas_Object *obj        ///< The edje object
-);
+EAPI const char * edje_edit_compiler_get(Evas_Object *obj);
 
-/**Save the modified edje object back to his file.
+/** Save the modified edje object back to his file.
+ *
  * Use this function when you are done with your editing, all the change made
  * to the current loaded group will be saved back to the original file.
  *
- * NOTE: for now this as 2 limitations
- *    -you will lost your #define in the edc source
+ * @note Source for the whole file will be auto generated and will overwrite
+ * any previously stored source.
+ *
+ * @param obj Object to save back to the file it was loaded from.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ *
+ * @todo Add a way to check what the error actually was, the way Edje Load does.
  */
-EAPI Eina_Bool             ///@return 1 on success, 0 on failure
-edje_edit_save(
-   Evas_Object *obj        ///< The edje object to save
-);
+EAPI Eina_Bool edje_edit_save(Evas_Object *obj);
 
-/**Saves every group back into the file.
+/** Saves every group back into the file.
+ *
+ * @param obj Object to save.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  *
- * Same limitations as edje_edit_save
+ * @see edje_edit_save()
  */
-EAPI Eina_Bool             ///@return 1 on success, 0 on failure
-edje_edit_save_all(
-   Evas_Object *obj        ///< The edje object to save
-);
+EAPI Eina_Bool edje_edit_save_all(Evas_Object *obj);
 
-/**Print on standard output many information about the internal status
+/** Print on standard output many information about the internal status
  * of the edje object.
- * This is probably only usefull to debug.
+ *
+ * This is probably only useful to debug.
+ *
+ * @param obj Object being edited.
  */
-EAPI void
-edje_edit_print_internal_status(
-   Evas_Object *obj        ///< The edje object to inspect
-);
+EAPI void edje_edit_print_internal_status(Evas_Object *obj);
+
 
 //@}
 /******************************************************************************/
@@ -152,87 +166,111 @@ edje_edit_print_internal_status(
  *  Functions to deal with groups property (see @ref edcref).
  */ //@{
 
-/**Create a new empty group in the given edje.
+/** Create a new empty group in the given edje.
+ *
  * If a group with the same name exist none is created.
+ *
+ * @param obj Object being edited.
+ * @param name Name of the new group.
+ *
+ * @return EINA_TRUE if succesfully added the group, EINA_FALSE if an error
+ * occurred or if a group with the same name exists.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 on failure
-edje_edit_group_add(
-   Evas_Object *obj,       ///< The edje object
-   const char  *name       ///< The name for the new empty group
-);
+EAPI Eina_Bool edje_edit_group_add(Evas_Object *obj, const char *name);
 
-/**Delete the specified group from the given edje.
+/** Delete the specified group from the given edje.
+ *
  * You can only delete a currently unused group.
  * All the parts and the programs inside the group will be deleted as well,
  * but not image or font embedded in the edje.
+ *
+ * @param obj Object being edited.
+ * @param group_name Name of group to delete.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 on failure
-edje_edit_group_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *group_name  ///< Group to delete
-);
+EAPI Eina_Bool edje_edit_group_del(Evas_Object *obj, const char *group_name);
 
-/**Check if a group with the given name exist in the edje.
+/** Check if a group with the given name exist in the edje.
+ *
+ * @param obj Object being edited.
+ * @param group Group name to check for.
+ *
+ * @return EINA_TRUE if group exists, EINA_FALSE if not.
  */
-EAPI Eina_Bool         ///< 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
-);
+EAPI Eina_Bool edje_edit_group_exist(Evas_Object *obj, const char *group);
 
-/**Set a new name for the current open 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 ;)
+ * Note that the relative getter function don't exist as it doesn't make sense ;)
+ * @param obj Object being edited.
+ * @param new_name New name for the group.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_group_name_set(Evas_Object *obj, const char *new_name);
+
+/** Get the group minimum width.
+ *
+ * @param obj Object being edited.
+ *
+ * @return The minimum width set for the group. -1 if an error occurred.
+ */
+EAPI int edje_edit_group_min_w_get(Evas_Object *obj);
+
+/** Set the group minimum width.
+ *
+ * @param obj Object being edited.
+ * @param w New minimum width for the group.
+ */
+EAPI void edje_edit_group_min_w_set(Evas_Object *obj, int w);
+
+/** Get the group minimum height.
+ *
+ * @param obj Object being edited.
+ *
+ * @return The minimum height set for the group. -1 if an error occurred.
+ */
+EAPI int edje_edit_group_min_h_get(Evas_Object *obj);
+
+/** Set the group minimum height.
+ *
+ * @param obj Object being edited.
+ * @param h New minimum height for the group.
+ */
+EAPI void edje_edit_group_min_h_set(Evas_Object *obj, int h);
+
+/** Get the group maximum width.
+ *
+ * @param obj Object being edited.
+ *
+ * @return The maximum width set for the group. -1 if an error occurred.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 on failure
-edje_edit_group_name_set(
-   Evas_Object *obj,       ///< The edje object
-   const char  *new_name   ///< The new name for the group
-);
-/**Get the group min width*/
-EAPI int                  ///@return The minw value or -1 on errors
-edje_edit_group_min_w_get(
-   Evas_Object *obj       ///< The edje object
-);
-/**Set the group min width*/
-EAPI void
-edje_edit_group_min_w_set(
-   Evas_Object *obj,       ///< The edje object
-   int w                   ///< The new group minimum width in pixel
-);
-/**Get the group min height*/
-EAPI int                  ///@return The minh value or -1 on errors
-edje_edit_group_min_h_get(
-   Evas_Object *obj       ///< The edje object
-);
-/**Set the group min height*/
-EAPI void
-edje_edit_group_min_h_set(
-   Evas_Object *obj,       ///< The edje object
-   int h                   ///< The new group minimum height in pixel
-);
-/**Get the group max width*/
-EAPI int                  ///@return The maxw value or -1 on errors
-edje_edit_group_max_w_get(
-   Evas_Object *obj       ///< The edje object
-);
-/**Set the group max width*/
-EAPI void
-edje_edit_group_max_w_set(
-   Evas_Object *obj,       ///< The edje object
-   int w                   ///< The new group maximum width in pixel
-);
-/**Get the group max height*/
-EAPI int                  ///@return The maxh value or -1 on errors
-edje_edit_group_max_h_get(
-   Evas_Object *obj       ///< The edje object
-);
-/**Set the group max height*/
-EAPI void
-edje_edit_group_max_h_set(
-   Evas_Object *obj,       ///< The edje object
-   int h                   ///< The new group maximum height in pixel
-);
+EAPI int edje_edit_group_max_w_get(Evas_Object *obj);
+
+/** Set the group maximum width.
+ *
+ * @param obj Object being edited.
+ * @param w New maximum width for the group.
+ */
+EAPI void edje_edit_group_max_w_set(Evas_Object *obj, int w);
+
+/** Get the group maximum height.
+ *
+ * @param obj Object being edited.
+ *
+ * @return The maximum height set for the group. -1 if an error occurred.
+ */
+EAPI int edje_edit_group_max_h_get(Evas_Object *obj);
+
+/** Set the group maximum height.
+ *
+ * @param obj Object being edited.
+ * @param h New maximum height for the group.
+ */
+EAPI void edje_edit_group_max_h_set(Evas_Object *obj, int h);
+
 
 //@}
 /******************************************************************************/
@@ -242,101 +280,124 @@ edje_edit_group_max_h_set(
  *  Functions to deal with data embedded in the edje (see @ref edcref).
  */ //@{
 
-/** Retrieves a list with the item names inside the data block **/
-EAPI Eina_List *          ///@return An Eina_List* of string (char *)containing all the data names.
-edje_edit_data_list_get(
-   Evas_Object *obj       ///< The edje object
-);
+/** Retrieves a list with the item names inside the data block.
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being a name entry in the global data block for the file.
+ */
+EAPI Eina_List * edje_edit_data_list_get(Evas_Object *obj);
 
-/** Create a new *global* data object in the given edje file. If
- * another data entry with the same name exists, nothing is created and
+/** Create a new *global* data object in the given edje file.
+ *
+ * If another data entry with the same name exists, nothing is created and
  * EINA_FALSE is returned.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name for the new data entry.
+ * @param value Value for the new data entry.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_data_add(Evas_Object *obj, const char *itemname, const char *value);
+
+/** Delete the given data object from edje.
+ *
+ * @param obj Object being edited.
+ * @param itemname Data entry to remove from the global data block.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_data_del(Evas_Object *obj, const char *itemname);
+
+/** Get the data associated with the given itemname.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of the data entry to fetch the value for.
+ *
+ * @return Value of the given entry, or NULL if not found.
+ */
+EAPI const char * edje_edit_data_value_get(Evas_Object *obj, char *itemname);
+
+/** Set the data associated with the given itemname.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of data entry to change the value.
+ * @param value New value for the entry.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_data_value_set(Evas_Object *obj, const char *itemname, const char *value);
+
+/** Change the name of the given data object.
+ *
+ * @param obj Object being edited.
+ * @param itemname Data entry to rename.
+ * @param newname New name for the data entry.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_data_name_set(Evas_Object *obj, const char *itemname, const char *newname);
+
+/** Retrieves a list with the item names inside the data block at the group level.
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being a name entry in the data block for the group.
  */
+EAPI Eina_List * edje_edit_group_data_list_get(Evas_Object *obj);
 
-EAPI Eina_Bool         ///@return EINA_TRUE on success
-edje_edit_data_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *itemname,   ///< The name for the new data
-   const char *value       ///< The value for the new data
-);
-
-/**Delete the given data object from edje */
-EAPI Eina_Bool         ///@return EINA_TRUE on success
-edje_edit_data_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *itemname    ///< The name of the data to remove
-);
-
-/** Get the data associated with the given itemname **/
-EAPI const char *         ///@return The data value
-edje_edit_data_value_get(
-   Evas_Object * obj,     ///< The edje object
-   char *itemname         ///< The name of the data item
-);
-
-/** Set the data associated with the given itemname **/
-EAPI Eina_Bool        ///@return EINA_TRUE on success
-edje_edit_data_value_set(
-   Evas_Object * obj,     ///< The edje object
-   const char *itemname,  ///< The name of the data item
-   const char *value      ///< The new value to set
-);
-
-/** Change the name of the given data object */
-EAPI Eina_Bool        ///@return EINA_TRUE on success
-edje_edit_data_name_set(
-   Evas_Object *obj,     ///< The edje object
-   const char *itemname, ///< The name of the data item
-   const char *newname   ///< The new name to set
-);
-
-/** Create a new data object in the given edje file *belonging to the
- * current group*. If another data entry with the same name exists,
+/** Create a new data object in the given edje file *belonging to the current group*.
+ *
+ * If another data entry with the same name exists,
  * nothing is created and EINA_FALSE is returned.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name for the new data entry.
+ * @param value Value for the new data entry.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_group_data_add(Evas_Object *obj, const char *itemname, const char *value);
+
+/** Delete the given data object from the group.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of the data entry to remove.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_group_data_del(Evas_Object *obj, const char *itemname);
+
+/** Get the data associated with the given itemname.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of the data entry.
+ *
+ * @return Value of the data entry or NULL if not found.
  */
+EAPI const char * edje_edit_group_data_value_get(Evas_Object *obj, char *itemname);
+
+/** Set the data associated with the given itemname.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of the data entry to set the value.
+ * @param value Value to set for the data entry.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_group_data_value_set(Evas_Object *obj, const char *itemname, const char *value);
+
+/** Change the name of the given data object.
+ *
+ * @param obj Object being edited.
+ * @param itemname Name of the data entry to rename.
+ * @param newname New name for the data entry.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_group_data_name_set(Evas_Object *obj, const char *itemname, const char *newname);
 
-/** Retrieves a list with the item names inside the data block **/
-EAPI Eina_List *          ///@return An Eina_List* of string (char *) containing all the data names.
-edje_edit_group_data_list_get(
-   Evas_Object *obj       ///< The edje object
-);
-
-EAPI Eina_Bool             ///@return EINA_TRUE on success
-edje_edit_group_data_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *itemname,   ///< The name for the new data
-   const char *value       ///< The value for the new data
-);
-
-/** Delete the given data object from edje */
-EAPI Eina_Bool             ///@return EINA_TRUE on success
-edje_edit_group_data_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *itemname    ///< The name of the data to remove
-);
-
-/** Get the data associated with the given itemname **/
-EAPI const char *         ///@return The data value
-edje_edit_group_data_value_get(
-   Evas_Object * obj,     ///< The edje object
-   char *itemname         ///< The name of the data item
-);
-
-/** Set the data associated with the given itemname **/
-EAPI Eina_Bool            ///@return EINA_TRUE on success
-edje_edit_group_data_value_set(
-   Evas_Object * obj,     ///< The edje object
-   const char *itemname,  ///< The name of the data item
-   const char *value      ///< The new value to set
-);
-
-/** Change the name of the given data object */
-EAPI Eina_Bool           ///@return EINA_TRUE on success
-edje_edit_group_data_name_set(
-   Evas_Object *obj,     ///< The edje object
-   const char *itemname, ///< The name of the data item
-   const char *newname   ///< The new name to set
-);
 
 //@}
 /******************************************************************************/
@@ -347,80 +408,91 @@ edje_edit_group_data_name_set(
  */ //@{
 
 /** Get the list of all the Color Classes in the given edje object.
- *  Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being one color class.
  */
-EAPI Eina_List *           ///@return An Eina_List* of string (char *)containing all the classes names.
-edje_edit_color_classes_list_get(
-   Evas_Object * obj       ///< The edje object
-);
+EAPI Eina_List * edje_edit_color_classes_list_get(Evas_Object *obj);
 
-/** Create a new color class object in the given edje
- *  If another class with the same name exists nothing is created and EINA_FALSE is returned.
+/** Create a new color class object in the given edje.
+ *
+ * If another class with the same name exists nothing is created and EINA_FALSE is returned.
+ *
+ * @param obj Object being edited.
+ * @param name Name for the new color class.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool        ///@return EINA_TRUE on success
-edje_edit_color_class_add(
-   Evas_Object *obj,      ///< The edje object
-   const char *name       ///< The name of the new color class
-);
+EAPI Eina_Bool edje_edit_color_class_add(Evas_Object *obj, const char *name);
 
-/** Delete the given class object from edje */
-EAPI Eina_Bool        ///@return EINA_TRUE on success
-edje_edit_color_class_del(
-   Evas_Object *obj,      ///< The edje object
-   const char *name       ///< The name of the color class to delete
-);
+/** Delete the given class object from edje.
+ *
+ * @param obj Object being edited.
+ * @param name Color class to delete.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_color_class_del(Evas_Object *obj, const char *name);
 
 /** Get all the colors that compose the class.
- *  You can pass NULL to colors you are not intrested in
- */
-EAPI Eina_Bool         ///@return EINA_TRUE on success
-edje_edit_color_class_colors_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *class_name, ///< The name of the color class
-   int *r,  ///< Where to store the red component of the standard color
-   int *g,  ///< Where to store the green component of the standard color
-   int *b,  ///< Where to store the blue component of the standard color
-   int *a,  ///< Where to store the alpha component of the standard color
-   int *r2, ///< Where to store the red component of the second color
-   int *g2, ///< Where to store the green component of the second color
-   int *b2, ///< Where to store the green component of the second color
-   int *a2, ///< Where to store the green component of the second color
-   int *r3, ///< Where to store the red component of the third color
-   int *g3, ///< Where to store the green component of the third color
-   int *b3, ///< Where to store the blue component of the third color
-   int *a3  ///< Where to store the alpha component of the third color
-);
+ *
+ * You can pass NULL to colors you are not intrested in.
+ *
+ * @param obj Object being edited.
+ * @param class_name Color class to fetch values.
+ * @param r Red component of main color.
+ * @param g Green component of main color.
+ * @param b Blue component of main color.
+ * @param a Alpha component of main color.
+ * @param r2 Red component of secondary color.
+ * @param g2 Green component of secondary color.
+ * @param b2 Blue component of secondary color.
+ * @param a2 Alpha component of secondary color.
+ * @param r3 Red component of tertiary color.
+ * @param g3 Green component of tertiary color.
+ * @param b3 Blue component of tertiary color.
+ * @param a3 Alpha component of tertiary color.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_color_class_colors_get(Evas_Object *obj, const char *class_name, int *r, int *g, int *b, int *a, int *r2, int *g2, int *b2, int *a2, int *r3, int *g3, int *b3, int *a3);
 
 /** Set the colors for the given color class.
- *  If you set a color to -1 it will not be touched
- */
-EAPI Eina_Bool         ///@return EINA_TRUE on success
-edje_edit_color_class_colors_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *class_name, ///< The name of the color class
-   int r,    ///< The red component of the standard color
-   int g,    ///< The green component of the standard color
-   int b,    ///< The blue component of the standard color
-   int a,    ///< The alpha component of the standard color
-   int r2,   ///< The red component of the second color
-   int g2,   ///< The green component of the second color
-   int b2,   ///< The blue component of the second color
-   int a2,   ///< The alpha component of the second color
-   int r3,   ///< The red component of the third color
-   int g3,   ///< The green component of the third color
-   int b3,   ///< The blue component of the third color
-   int a3    ///< The alpha component of the third color
-);
-
-/** Change the name of a color class */
-EAPI Eina_Bool        ///@return EINA_TRUE on success
-edje_edit_color_class_name_set(
-   Evas_Object *obj,      ///< The edje object
-   const char *name,      ///< The name of the color class
-   const char *newname    ///< The new name to assign
-);
+ *
+ * If you set a color to -1 it will not be touched.
+ *
+ * @param obj Object being edited.
+ * @param class_name Color class to fetch values.
+ * @param r Red component of main color.
+ * @param g Green component of main color.
+ * @param b Blue component of main color.
+ * @param a Alpha component of main color.
+ * @param r2 Red component of secondary color.
+ * @param g2 Green component of secondary color.
+ * @param b2 Blue component of secondary color.
+ * @param a2 Alpha component of secondary color.
+ * @param r3 Red component of tertiary color.
+ * @param g3 Green component of tertiary color.
+ * @param b3 Blue component of tertiary color.
+ * @param a3 Alpha component of tertiary color.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_color_class_colors_set(Evas_Object *obj, const char *class_name, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3);
+
+/** Change the name of a color class.
+ *
+ * @param obj Object being edited.
+ * @param name Color class to rename.
+ * @param newname New name for the color class.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_color_class_name_set(Evas_Object *obj, const char *name, const char *newname);
 
 //@}
+
 /******************************************************************************/
 /**************************   TEXT STYLES *************************************/
 /******************************************************************************/
@@ -429,83 +501,88 @@ edje_edit_color_class_name_set(
  */ //@{
 
 /** Get the list of all the text styles in the given edje object.
- *  Use edje_edit_string_list_free() when you don't need it anymore.
- */
-EAPI Eina_List *           ///@return An Eina_List* of string (char *)containing all the styles name.
-edje_edit_styles_list_get(
-   Evas_Object *obj        ///< The edje object
-);
-
-/** Create a new text style object in the given edje
- *  If another style with the same name exists nothing is created and EINA_FALSE is returned.
- */
-EAPI Eina_Bool        ///@return EINA_TRUE on success, EINA_FALSE if the tag can't be created
-edje_edit_style_add(
-   Evas_Object *obj,      ///< The edje object
-   const char *style      ///< The new name for the style
-);
-
-/** Delete the given text style and all the child tags. */
-EAPI void
-edje_edit_style_del(
-   Evas_Object *obj,      ///< The edje object
-   const char *style      ///< The name for the style to delete
-);
-   
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being the name for a text style.
+ */
+EAPI Eina_List * edje_edit_styles_list_get(Evas_Object *obj);
+
+/** Create a new text style object in the given edje.
+ *
+ * If another style with the same name exists nothing is created and EINA_FALSE is returned.
+ *
+ * @param obj Object being edited.
+ * @param style Name for the new style.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_style_add(Evas_Object *obj, const char *style);
+
+/** Delete the given text style and all the child tags.
+ *
+ * @param obj Object being edited.
+ * @param style Style to delete.
+ */
+EAPI void edje_edit_style_del(Evas_Object *obj, const char *style);
+
 /** Get the list of all the tags name in the given text style.
- *  Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ * @param style Style to get the tags for.
+ *
+ * @return List of strings, each being one tag in the given style.
  */
-EAPI Eina_List *           ///@return An Eina_List* of string (char *)containing all the tags name.
-edje_edit_style_tags_list_get(
-  Evas_Object *obj,       ///< The edje object
-  const char *style       ///< The name of the style to inspect
-);
+EAPI Eina_List * edje_edit_style_tags_list_get(Evas_Object *obj, const char *style);
 
 /** Get the value of the given tag.
- *  Use edje_edit_string_free() when you don't need it anymore.
- */
-EAPI const char*           ///@return The value of the tag.
-edje_edit_style_tag_value_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *style,      ///< The name of the style to inspect
-   const char *tag         ///< The name of the tag
-);
-
-/** Set the value of the given tag. */
-EAPI void
-edje_edit_style_tag_value_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *style,      ///< The name of the style to inspect
-   const char *tag,        ///< The name of the tag
-   const char *new_value   ///< The new tag value
-);
-
-/** Set the name of the given tag. */
-EAPI void
-edje_edit_style_tag_name_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *style,      ///< The name of the style
-   const char *tag,        ///< The name of the tag
-   const char *new_name    ///< The new name for tag
-);
+ *
+ * @param obj Object being edited.
+ * @param style Style containing the tag being.
+ * @param tag Tag to get the value for.
+ *
+ * @param Value of the given tag.
+ */
+EAPI const char * edje_edit_style_tag_value_get(Evas_Object *obj, const char *style, const char *tag);
+
+/** Set the value of the given tag.
+ *
+ * @param obj Object being edited.
+ * @param style Style containing the tag to change.
+ * @param tag Name of the tag to set the value for.
+ * @param new_value Value for the tag.
+ */
+EAPI void edje_edit_style_tag_value_set(Evas_Object *obj, const char *style, const char *tag, const char *new_value);
+
+/** Set the name of the given tag.
+ *
+ * @param obj Object being edited.
+ * @param style Style containing the tag to rename.
+ * @param tag Tag to rename.
+ * @param new_name New name for the tag.
+ */
+EAPI void edje_edit_style_tag_name_set(Evas_Object *obj, const char *style, const char *tag, const char *new_name);
 
 /** Add a new tag to the given text style.
- *  If another tag with the same name exists nothing is created and EINA_FALSE is returned.
- */
-EAPI Eina_Bool         ///@return EINA_TRUE on success, EINA_FALSE if the tag can't be created
-edje_edit_style_tag_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *style,      ///< The name of the style
-   const char* tag_name    ///< The name of the new tag
-);
-
-/** Delete the given tag. */
-EAPI void
-edje_edit_style_tag_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *style,      ///< The name of the style
-   const char* tag         ///< The name of the tag to remove
-);
+ *
+ * If another tag with the same name exists nothing is created and EINA_FALSE is returned.
+ *
+ * @param obj Object being edited.
+ * @param style Style where to add the new tag.
+ * @param tag_name Name for the new tag.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_style_tag_add(Evas_Object *obj, const char *style, const char *tag_name);
+
+/** Delete the given tag.
+ *
+ * @param obj Object being edited.
+ * @param style Style from where to remove the tag.
+ * @param tag Tag to delete.
+ */
+EAPI void edje_edit_style_tag_del(Evas_Object *obj, const char *style, const char *tag);
+
 
 //@}
 /******************************************************************************/
@@ -516,28 +593,31 @@ edje_edit_style_tag_del(
  */ //@{
 
 /** Get the list of all the externals requested in the given edje object.
- *  Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being an entry in the block of automatically loaded external modules.
+ */
+EAPI Eina_List * edje_edit_externals_list_get(Evas_Object *obj);
+
+/** Add an external module to be requested on edje load.
+ *
+ * @param obj Object being edited.
+ * @param external Name of the external module to add to the list of autoload.
+ *
+ * @return EINA_TRUE on success (or it was already there), EINA_FALSE otherwise.
  */
-EAPI Eina_List *           ///@return An Eina_List* of string (char *)containing all the externals names.
-edje_edit_externals_list_get(
-   Evas_Object *obj        ///< The edje object
-);
+EAPI Eina_Bool edje_edit_external_add(Evas_Object *obj, const char *external);
 
-/** Add an external module to be requested on edje load
- *  If one with the same name exists nothing is created and EINA_FALSE is returned.
+/** Delete the given external from the list.
+ *
+ * @param obj Object being edited.
+ * @param external Name of the external module to remove from the autoload list.
+ *
+ * @return EINA_TRUE on success, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool        ///@return EINA_TRUE on success, EINA_FALSE otherwise
-edje_edit_external_add(
-   Evas_Object *obj,      ///< The edje object
-   const char *external   ///< The new name for the extermal
-);
+EAPI Eina_Bool edje_edit_external_del(Evas_Object *obj, const char *external);
 
-/** Delete the given external from the list. */
-EAPI Eina_Bool
-edje_edit_external_del(
-   Evas_Object *obj,      ///< The edje object
-   const char *external   ///< The name for the external to delete
-);
 
 //@}
 /******************************************************************************/
@@ -547,1532 +627,1791 @@ edje_edit_external_del(
  *  Functions to deal with part objects (see @ref edcref).
  */ //@{
 
-/**Get the list of all the parts in the given edje object.
- * Use edje_edit_string_list_free() when you don't need it anymore.
+/** Get the list of all the parts in the given edje object.
+ *
+ * @param obj Object being edited.
+ *
+ * @return List of strings, each being the name for a part in the open group.
  */
-EAPI Eina_List *           ///@return An Eina_List* of string (char *)containing all the part names.
-edje_edit_parts_list_get(
-   Evas_Object *obj        ///< The edje object
-);
+EAPI Eina_List * edje_edit_parts_list_get(Evas_Object *obj);
 
-/**Create a new part in the given edje
+/** Create a new part in the given edje.
+ *
  * If another part with the same name just exists nothing is created and EINA_FALSE is returned.
  * Note that this function also create a default description for the part.
+ *
+ * @param obj Object being edited.
+ * @param name Name for the new part.
+ * @param type Type of the new part. See @ref edcref for more info on this.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return EINA_TRUE on success, EINA_FALSE if the part can't be created
-edje_edit_part_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *name,       ///< The name for the new part
-   Edje_Part_Type type      ///< The type of the part to create (One of: EDJE_PART_TYPE_NONE, EDJE_PART_TYPE_RECTANGLE, EDJE_PART_TYPE_TEXT,EDJE_PART_TYPE_IMAGE, EDJE_PART_TYPE_SWALLOW, EDJE_PART_TYPE_TEXTBLOCK,EDJE_PART_TYPE_GRADIENT or EDJE_PART_TYPE_GROUP)
-);
+EAPI Eina_Bool edje_edit_part_add(Evas_Object *obj, const char *name, Edje_Part_Type type);
 
-/**Create a new part of type EXTERNAL in the given edje
+/** Create a new part of type EXTERNAL in the given edje.
+ *
  * If another part with the same name just exists nothing is created and EINA_FALSE is returned.
  * Note that this function also create a default description for the part.
+ *
+ * @param obj Object being edited.
+ * @param name Name for the new part.
+ * @param source The registered external type to use for this part.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return EINA_TRUE on success, EINA_FALSE if the part can't be created
-edje_edit_part_external_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *name,       ///< The name for the new part
-   const char *source      ///< External type of the part
-);
+EAPI Eina_Bool edje_edit_part_external_add(Evas_Object *obj, const char *name, const char *source);
 
-/**Delete the given part from the edje
+/** Delete the given part from the edje.
+ *
  * All the reference to this part will be zeroed.
- * A group must have at least one part, so it's not possible to
- * remove the last remaining part.
- */
-EAPI Eina_Bool         ///@return 1 on success, 0 if the part can't be removed
-edje_edit_part_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part to remove
-);
-
-/**Check if a part with the given name exist in the edje object.
- */
-EAPI Eina_Bool         ///< 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
-);
-
-/** Get the name of part above this one.*/
-EAPI const char*
-edje_edit_part_above_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part of reference
-);
-
-/** Get the name of part below this one.*/
-EAPI const char*
-edje_edit_part_below_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part of reference
-);
-
-/**Move the given part below the previous one.*/
-EAPI Eina_Bool         ///@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 Eina_Bool         ///@return 1 on success, 0 on failure
-edje_edit_part_restack_above(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part to restack
-);
-
-/**Set a new name for part.
- * Note that the relative getter function don't exist as it don't make sense ;)
- */
-EAPI Eina_Bool         ///@return 1 on success, 0 on failure
-edje_edit_part_name_set(
-   Evas_Object *obj,       ///< The edje object
-   const char  *part,      ///< The name of the part to rename
-   const char  *new_name   ///< The new name for the part
-);
-
-/**Get the type of a part */
-EAPI Edje_Part_Type         ///@return One of: EDJE_PART_TYPE_NONE, EDJE_PART_TYPE_RECTANGLE, EDJE_PART_TYPE_TEXT,EDJE_PART_TYPE_IMAGE, EDJE_PART_TYPE_SWALLOW, EDJE_PART_TYPE_TEXTBLOCK,EDJE_PART_TYPE_GRADIENT or EDJE_PART_TYPE_GROUP
-edje_edit_part_type_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Get the clip_to part.
- * NULL is returned on errors and if the part don't have a clip.
- */
-EAPI const char *          ///@return The name of the part to clip part to. Use edje_edit_string_free() when you don't need it anymore.
-edje_edit_part_clip_to_get(
-   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)
- */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise.
-edje_edit_part_clip_to_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *clip_to     ///< The name of the part to clip part to.
-);
-
-/**Get the source of part.
- * Source is used in part of type EDJE_PART_TYPE_GROUP to specify the group to
- * 'autoswallow' inside the given part.
- */
-EAPI const char *          ///@return The name of the group to source the given part. Use edje_edit_string_free() when you don't need it anymore.
-edje_edit_part_source_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set the source of part.
- * Source is used in part of type EDJE_PART_TYPE_GROUP to specify the group to
- * 'autoswallow' inside the given part.
- * NOTE: This is not applied now. You must reload the edje to see the change.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to delete.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise.
-edje_edit_part_source_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *source      ///< The name of the group to autoswallow in the given part
-);
-
-/**Get the effect for a given part. */
-EAPI Edje_Text_Effect         ///@return One of: EDJE_TEXT_EFFECT_NONE, _PLAIN, _OUTLINE, _SOFT_OUTLINE, _SHADOW, _SOFT_SHADOW, _OUTLINE_SHADOW, _OUTLINE_SOFT_SHADOW, _FAR_SHADOW, _FAR_SOFT_SHADOW, _GLOW.
-edje_edit_part_effect_get(
-   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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   Edje_Text_Effect effect    ///< The effect to set. See edje_edit_part_effect_get() for possible value
-);
-
-/**Get the current selected state in part. */
-EAPI const char *          ///@return The name of the selected state including the float value. Use edje_edit_string_free() when you don't need it anymore.
-edje_edit_part_selected_state_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   double *value           ///< Returns value of the state here
-);
-
-/**Set the current state in part.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise.
-edje_edit_part_selected_state_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,       ///< The name of the state to set (not including the float value)
-   double value
-);
-
-/**Get mouse_events for part.*/
-EAPI Eina_Bool         ///@return 1 if part accept mouse events, 0 if not
-edje_edit_part_mouse_events_get(
-   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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   Eina_Bool mouse_events ///< If set to 1 part will accept mouse events, 0 to ignore all mouse events from part.
-);
-
-/**Get repeat_events for part.*/
-EAPI Eina_Bool         ///@return 1 if part will pass all events to the other parts, 0 if not
-edje_edit_part_repeat_events_get(
-   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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   Eina_Bool repeat_events /**< If set to 1 part will repeat
-                                 * all the received mouse events to other parts.
-                                 * If set to 0 the events received will not propagate to other parts.*/
-);
-
-/**Get ignore_flags for part.*/
-EAPI Evas_Event_Flags        ///@return event flags ignored
-edje_edit_part_ignore_flags_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set repeat_events for part. */
-EAPI void
-edje_edit_part_ignore_flags_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   Evas_Event_Flags ignore_flags ///< event flags to be ignored
-);
-
-/**Get horizontal dragable state for part.(1, -1 or 0) */
-EAPI int                   ///@return 1 (or -1) if the part can be dragged horizontally
-edje_edit_part_drag_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set horizontal dragable state for part.(1, -1 or 0) */
-EAPI void
-edje_edit_part_drag_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int drag                ///< Set to 1 (or -1) if the part should be dragged horizontally
-);
-
-/**Get vertical dragable state for part.(1, -1 or 0) */
-EAPI int                   ///@return 1 (or -1) if the part can be dragged vertically
-edje_edit_part_drag_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set vertical dragable state for part.(1, -1 or 0) */
-EAPI void
-edje_edit_part_drag_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int drag                ///< Set to 1 (or -1) if the part should be dragged vertically
-);
-
-/**Get horizontal dragable step for part.*/
-EAPI int                   ///@return The drag horizontal step value
-edje_edit_part_drag_step_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set horizontal dragable state for part.*/
-EAPI void
-edje_edit_part_drag_step_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int step                ///< The step value
-);
-
-/**Get vertical dragable step for part.*/
-EAPI int                   ///@return The drag vertical step value
-edje_edit_part_drag_step_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set vertical dragable state for part.*/
-EAPI void
-edje_edit_part_drag_step_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int step                ///< The step value
-);
-
-/**Get horizontal dragable count for part.*/
-EAPI int                   ///@return The drag horizontal count value
-edje_edit_part_drag_count_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set horizontal dragable count for part.*/
-EAPI void
-edje_edit_part_drag_count_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int count               ///< The count value
-);
-
-/**Get vertical dragable count for part.*/
-EAPI int                   ///@return The drag vertical count value
-edje_edit_part_drag_count_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set vertical dragable count for part.*/
-EAPI void
-edje_edit_part_drag_count_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   int count               ///< The count value
-);
-
-/**Get the name of the part that is used as 'confine' for the given draggies.*/
-EAPI const char*
-edje_edit_part_drag_confine_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the drag part
-);
-
-/**Set the name of the part that is used as 'confine' for the given draggies.*/
-EAPI void
-edje_edit_part_drag_confine_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the drag part
-   const char *confine     ///< The name of the confine part, or NULL to unset confine
-);
-
-/**Get the name of the part that is used as the receiver of the drag event.*/
-EAPI const char*
-edje_edit_part_drag_event_get(
-   Evas_Object *obj,      ///< The edje object
-   const char *part       ///< The name of the drag part
-);
-
-/**Set the name of the part that will recive events from the given draggies.*/
-EAPI void
-edje_edit_part_drag_event_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the drag part
-   const char *event       ///< The name of the part that will receive events, or NULL to unset.
-);
+EAPI Eina_Bool edje_edit_part_del(Evas_Object *obj, const char *part);
 
-//@}
-/******************************************************************************/
-/**************************   STATES API   ************************************/
-/******************************************************************************/
-/** @name States API
- *  Functions to deal with part states (see @ref edcref).
- */ //@{
+/** Check if a part with the given name exist in the edje object.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to check for its existance.
+ *
+ * @return EINA_TRUE if the part exists, EINA_FALSE if not.
+ */
+EAPI Eina_Bool edje_edit_part_exist(Evas_Object *obj, const char *part);
 
-/**Get the list of all the states in the given part.*/
-EAPI Eina_List *           /**@return An Eina_List* of string (char *)containing all the states names found
-                            * in part, including the float value (ex: "default 0.00").
-                            * Use edje_edit_string_list_free() when you don't need it anymore. */
-edje_edit_part_states_list_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part        ///< The name of the part
-);
-
-/**Set a new name for the given state in the given part.
- * Note that state and new_name must include the floating value inside the string (ex. "default 0.00")
- */
-EAPI int
-edje_edit_state_name_set(
-   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
-   double value,
-   const char *new_name,    ///< The new name to assign
-   double new_value
-);
-
-/**Create a new state to the give part
- */
-EAPI void
-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 (not including the state value)
-   double value            ///< State value
-);
-
-/**Delete the given part state from the edje
- */
-EAPI void
-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 (not including the state value)
-   double value
-);
-
-/**Check if a part state with the given name exist.
- */
-EAPI Eina_Bool         ///< 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 (not including the state value)
-   double value
-);
-
-/**Copies the state @p from into @p to. If @p to doesn't exist it will be created.
- */
-EAPI Eina_Bool        ///< 1 if it could be copied, 0 if something went wrong.
-edje_edit_state_copy(
-   Evas_Object *obj,      ///< The edje object
-   const char *part,      ///< The name of the part
-   const char *from,      ///< State to copy from (not including state value)
-   double val_from,
-   const char *to,        ///< State to copy into (not including state value)
-   double val_to
-);
-
-/**Get the rel1 relative x value of state*/
-EAPI double                ///@return The 'rel1 relative X' value of the part state
-edje_edit_state_rel1_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the part state (ex. "default")
-   double value
-);
-/**Get the rel1 relative y value of state*/
-EAPI double                ///@return The 'rel1 relative Y' value of the part state
-edje_edit_state_rel1_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the rel2 relative x value of state*/
-EAPI double                ///@return The 'rel2 relative X' value of the part state
-edje_edit_state_rel2_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the rel2 relative y value of state*/
-EAPI double                ///@return The 'rel2 relative Y' value of the part state
-edje_edit_state_rel2_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the rel1 relative x value of state*/
-EAPI void
-edje_edit_state_rel1_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new 'rel1 relative X' value to set
-);
-/**Set the rel1 relative y value of state*/
-EAPI void
-edje_edit_state_rel1_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new 'rel1 relative Y' value to set
-);
-/**Set the rel2 relative x value of state*/
-EAPI void
-edje_edit_state_rel2_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new 'rel2 relative X' value to set
-);
-/**Set the rel2 relative y value of state*/
-EAPI void
-edje_edit_state_rel2_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new 'rel2 relative Y' value to set
-);
-
-/**Get the rel1 offset x value of state*/
-EAPI int                   /// @return The 'rel1 offset X' value of the part state
-edje_edit_state_rel1_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the rel1 offset y value of state*/
-EAPI int                   /// @return The 'rel1 offset Y' value of the part state
-edje_edit_state_rel1_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the rel2 offset x value of state*/
-EAPI int                   /// @return The 'rel2 offset X' value of the part state
-edje_edit_state_rel2_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the rel2 offset y value of state*/
-EAPI int                   /// @return The 'rel2 offset Y' value of the part state
-edje_edit_state_rel2_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the rel1 offset x value of state*/
-EAPI void
-edje_edit_state_rel1_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new 'rel1 offset X' value to set
-);
-/**Get the rel1 offset y value of state*/
-EAPI void
-edje_edit_state_rel1_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new 'rel1 offset Y' value to set
-);
-/**Get the rel2 offset x value of state*/
-EAPI void
-edje_edit_state_rel2_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new 'rel2 offset X' value to set
-);
-/**Get the rel2 offset y value of state*/
-EAPI void
-edje_edit_state_rel2_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new 'rel2 offset Y' value to set
-);
-
-/**Get the part name rel1x is relative to. The function return NULL if the part is relative to the whole interface.*/
-EAPI const char *          ///@return The name of the part to apply the relativity
-edje_edit_state_rel1_to_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the part name rel1y is relative to. The function return NULL if the part is relative to the whole interface.*/
-EAPI const char *          ///@return The name of the part to apply the relativity
-edje_edit_state_rel1_to_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the part name rel2x is relative to. The function return NULL if the part is relative to the whole interface.*/
-EAPI const char *         ///@return The name of the part to apply the relativity
-edje_edit_state_rel2_to_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the part name rel2y is relative to. The function return NULL if the part is relative to the whole interface.*/
-EAPI const char *         ///@return The name of the part to apply the relativity
-edje_edit_state_rel2_to_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the part rel1x is relative to. Set rel_to to NULL make the part relative to the whole interface.*/
-EAPI void
-edje_edit_state_rel1_to_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *rel_to      ///< The name of the part that is used as container/parent
-);
-/**Set the part rel1y is relative to. Set rel_to to NULL make the part relative to the whole interface.*/
-EAPI void
-edje_edit_state_rel1_to_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *rel_to      ///< The name of the part that is used as container/parent
-);
-/**Set the part rel2x is relative to. Set rel_to to NULL make the part relative to the whole interface.*/
-EAPI void
-edje_edit_state_rel2_to_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *rel_to      ///< The name of the part that is used as container/parent
-);
-/**Set the part rel2y is relative to. Set rel_to to NULL make the part relative to the whole interface.*/
-EAPI void
-edje_edit_state_rel2_to_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *rel_to      ///< The name of the part that is used as container/parent
-);
-
-/**Get the color of a part state. Pass NULL to any of [r,g,b,a] to get only the others.*/
-EAPI void
-edje_edit_state_color_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int *r,                 ///< A pointer to store the red value
-   int *g,                 ///< A pointer to store the green value
-   int *b,                 ///< A pointer to store the blue value
-   int *a                  ///< A pointer to store the alpha value
-);
-/**Get the color2 of a part state. Pass NULL to any of [r,g,b,a] to get only the others.*/
-EAPI void
-edje_edit_state_color2_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int *r,                 ///< A pointer to store the red value
-   int *g,                 ///< A pointer to store the green value
-   int *b,                 ///< A pointer to store the blue value
-   int *a                  ///< A pointer to store the alpha value
-);
-/**Get the color3 of a part state. Pass NULL to any of [r,g,b,a] to get only the others.*/
-EAPI void
-edje_edit_state_color3_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int *r,                 ///< A pointer to store the red value
-   int *g,                 ///< A pointer to store the green value
-   int *b,                 ///< A pointer to store the blue value
-   int *a                  ///< A pointer to store the alpha value
-);
-
-/**Set the color of a part state. Pass -1 to any of [r,g,b,a] to leave the value untouched.*/
-EAPI void
-edje_edit_state_color_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int r,                  ///< The red value of the color
-   int g,                  ///< The green value of the color
-   int b,                  ///< The blue value of the color
-   int a                   ///< The alpha value of the color
-);
-/**Set the color2 of a part state. Pass -1 to any of [r,g,b,a] to leave the value untouched.*/
-EAPI void
-edje_edit_state_color2_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int r,                  ///< The red value of the color
-   int g,                  ///< The green value of the color
-   int b,                  ///< The blue value of the color
-   int a                   ///< The alpha value of the color
-);
-/**Set the color3 of a part state. Pass -1 to any of [r,g,b,a] to leave the value untouched.*/
-EAPI void
-edje_edit_state_color3_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int r,                  ///< The red value of the color
-   int g,                  ///< The green value of the color
-   int b,                  ///< The blue value of the color
-   int a                   ///< The alpha value of the color
-);
-
-/**Get the align_x value of a part state.*/
-EAPI double                ///@return The horizontal align value for the given state
-edje_edit_state_align_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the align_y value of a part state.*/
-EAPI double                ///@return The vertical align value for the given state
-edje_edit_state_align_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the align_x value of a part state.*/
-EAPI void
-edje_edit_state_align_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double align            ///< The new horizontal align to set
-);
-/**Set the align_y value of a part state.*/
-EAPI void
-edje_edit_state_align_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double align            ///< The new vertical align to set
-);
-/**Get the min_w value of a part state.*/
-EAPI int                   ///@return The minimum width of a part state
-edje_edit_state_min_w_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the min_w value of a part state.*/
-EAPI void
-edje_edit_state_min_w_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int min_w               ///< The new minimum width to set for the part state
-);
-/**Get the min_h value of a part state.*/
-EAPI int                   ///@return The minimum height of a part state
-edje_edit_state_min_h_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the min_h value of a part state.*/
-EAPI void
-edje_edit_state_min_h_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int min_h               ///< The new minimum height to set for the part state
-);
-
-/**Get the max_w value of a part state.*/
-EAPI int                   ///@return The maximum width of a part state
-edje_edit_state_max_w_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the max_w value of a part state.*/
-EAPI void
-edje_edit_state_max_w_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int max_w               ///< The new maximum width to set for the part state
-);
-/**Get the max_h value of a part state.*/
-EAPI int                   ///@return The maximum height of a part state
-edje_edit_state_max_h_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the max_h value of a part state.*/
-EAPI void
-edje_edit_state_max_h_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int max_h               ///< The new maximum height to set for the part state
-);
-
-/**Get the minimum aspect value of a part state.*/
-EAPI double                ///@return The aspect minimum value of a part state
-edje_edit_state_aspect_min_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Get the maximum aspect value of a part state.*/
-EAPI double                ///@return The aspect maximum value of a part state
-edje_edit_state_aspect_max_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the minimum aspect value of a part state.*/
-EAPI void
-edje_edit_state_aspect_min_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double aspect           ///< The new minimum aspect value to set
-);
-/**Set the maximum aspect value of a part state.*/
-EAPI void
-edje_edit_state_aspect_max_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double aspect           ///< The new maximum aspect value to set
-);
-/**Get the aspect preference value of a part state.*/
-EAPI unsigned char         ///@return The aspect preference (0=none, 1=vertical, 2=horizontal, 3=both)
-edje_edit_state_aspect_pref_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-/**Set the aspect preference value of a part state.*/
-EAPI void
-edje_edit_state_aspect_pref_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   unsigned char pref      ///< The new aspect preference to set (0=none, 1=vertical, 2=horizontal, 3=both)
-);
-
-/**Get the fill origin relative x value of a part state.*/
-EAPI double                ///@return The fill offset x relative to area
-edje_edit_state_fill_origin_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill origin relative y value of a part state.*/
-EAPI double                ///@return The fill origin y relative to area
-edje_edit_state_fill_origin_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill origin offset x value of a part state.*/
-EAPI int                   ///@return The fill origin offset x relative to area
-edje_edit_state_fill_origin_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill origin offset y value of a part state.*/
-EAPI int                   ///@return The fill origin offset y relative to area
-edje_edit_state_fill_origin_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the fill origin relative x value of a part state.*/
-EAPI void
-edje_edit_state_fill_origin_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill origin relative y value of a part state.*/
-EAPI void
-edje_edit_state_fill_origin_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill origin offset x value of a part state.*/
-EAPI void
-edje_edit_state_fill_origin_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill origin offset x value of a part state.*/
-EAPI void
-edje_edit_state_fill_origin_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new value to set
-);
-
-/**Get the fill size relative x value of a part state.*/
-EAPI double                ///@return The fill size offset x relative to area
-edje_edit_state_fill_size_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill size relative y value of a part state.*/
-EAPI double                ///@return The fill size y relative to area
-edje_edit_state_fill_size_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill size offset x value of a part state.*/
-EAPI int                    ///@return The fill size offset x relative to area
-edje_edit_state_fill_size_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the fill size offset y value of a part state.*/
-EAPI int                    ///@return The fill size offset y relative to area
-edje_edit_state_fill_size_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the fill size relative x value of a part state.*/
-EAPI void
-edje_edit_state_fill_size_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill size relative y value of a part state.*/
-EAPI void
-edje_edit_state_fill_size_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill size offset x value of a part state.*/
-EAPI void
-edje_edit_state_fill_size_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double x                ///< The new value to set
-);
-
-/**Set the fill size offset x value of a part state.*/
-EAPI void
-edje_edit_state_fill_size_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double y                ///< The new value to set
-);
-
-/**Get the visibility of a part state.*/
-EAPI Eina_Bool         ///@return EINA_TRUE if the state is visible
-edje_edit_state_visible_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the visibility of a part state.*/
-EAPI void
-edje_edit_state_visible_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   Eina_Bool visible   ///< EINA_TRUE to set the state visible
-);
-
-/**Get the color class of the given part state. Remember to free the string with edje_edit_string_free()*/
-EAPI const char*           ///@return The current color_class of the part state
-edje_edit_state_color_class_get(
-   Evas_Object *obj,      ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the color class for the given part state.*/
-EAPI void
-edje_edit_state_color_class_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *color_class ///< The new color_class to assign
-);
-
-/**Get the list of parameters for an external part. DO NOT FREE THE LIST*/
-EAPI const Eina_List *
-edje_edit_state_external_params_list_get( ///@return The list of Edje_External_Param
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the type and value of the paramater given*/
-EAPI Eina_Bool
-edje_edit_state_external_param_get( ///@return True if the parameter was found, False otherwise
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter to look for
-   Edje_External_Param_Type *type, ///< Type will be stored here
-   void **val            ///< Pointer to value will be stored here. DO NOT FREE IT
-);
-
-/**Get external parameter of type INT*/
-EAPI Eina_Bool
-edje_edit_state_external_param_int_get( ///@return True if succesful, False if not found or is of different type
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   int *val
-);
-
-/**Get external parameter of type BOOL*/
-EAPI Eina_Bool
-edje_edit_state_external_param_bool_get( ///@return True if succesful, False if not found or is of different type
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default 0.00")
-   double value,
-   const char *param,      ///< The name of the parameter
-   Eina_Bool *val
-);
-
-/**Get external parameter of type DOUBLE*/
-EAPI Eina_Bool
-edje_edit_state_external_param_double_get( ///@return True if succesful, False if not found or is of different type
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   double *val
-);
-
-/**Get external parameter of type STRING*/
-EAPI Eina_Bool
-edje_edit_state_external_param_string_get( ///@return True if succesful, False if not found or is of different type
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   const char **val
-);
-
-/**Get external parameter of type CHOICE*/
-EAPI Eina_Bool
-edje_edit_state_external_param_choice_get( ///@return True if succesful, False if not found or is of different type
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default 0.00")
-   double value,
-   const char *param,      ///< The name of the parameter
-   const char **val
-);
-
-/**Set the external parameter type and value, adding it if it didn't exist before*/
-EAPI Eina_Bool
-edje_edit_state_external_param_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter to set
-   Edje_External_Param_Type type, ///< The type of the parameter
-   ...                     ///< Value(s) according to type
-);
-
-/**Set external parameter of type INT*/
-EAPI Eina_Bool
-edje_edit_state_external_param_int_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   int val
-);
-
-/**Set external parameter of type BOOL*/
-EAPI Eina_Bool
-edje_edit_state_external_param_bool_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default 0.00")
-   double value,
-   const char *param,      ///< The name of the parameter
-   Eina_Bool val
-);
-
-/**Set external parameter of type DOUBLE*/
-EAPI Eina_Bool
-edje_edit_state_external_param_double_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   double val
-);
-
-/**Set external parameter of type STRING*/
-EAPI Eina_Bool
-edje_edit_state_external_param_string_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *param,      ///< The name of the parameter
-   const char *val
-);
-
-/**Set external parameter of type CHOICE*/
-EAPI Eina_Bool
-edje_edit_state_external_param_choice_set( ///@return True if it was set
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default 0.00")
-   double value,
-   const char *param,      ///< The name of the parameter
-   const char *val
-);
+/** Get the name of part stacked above the one passed.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part of which to check the one above.
+ *
+ * @return Name of the part above. NULL if an error occurred or if @p part is
+ * the topmost part in the group.
+ */
+EAPI const char * edje_edit_part_above_get(Evas_Object *obj, const char *part);
 
+/** Get the name of part stacked below the one passed.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part of which to check the one below.
+ *
+ * @return Name of the part below. NULL if an error occurred or if @p part is
+ * the bottommost part in the group.
+ */
+EAPI const char * edje_edit_part_below_get(Evas_Object *obj, const char *part);
 
-//@}
-/******************************************************************************/
-/**************************   TEXT API   ************************************/
-/******************************************************************************/
-/** @name Text API
- *  Functions to deal with text objects (see @ref edcref).
- */ //@{
+/** Move the given part below the previous one.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to move one step below.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_part_restack_below(Evas_Object *obj, const char *part);
 
-/**Get the text of a part state. Remember to free the returned string with edje_edit_string_free(). */
-EAPI const char *          ///@return A newly allocated string containing the text for the given state
-edje_edit_state_text_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,       ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the text of a part state.*/
-EAPI void
-edje_edit_state_text_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *text        ///< The new text to assign
-);
-
-/**Get the text size of a part state. The function will return -1 on errors.*/
-EAPI int                   ///@return The font size in pixel or -1 on errors.
-edje_edit_state_text_size_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the text size of a part state.*/
-EAPI void
-edje_edit_state_text_size_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int size                ///< The new font size to set (in pixel)
-);
-
-/**Get the text horizontal align of a part state. The value range is from 0.0(right) to 1.0(left)*/
-EAPI double                ///@return The text align X value
-edje_edit_state_text_align_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double align            ///< The new text align Y value
-);
-
-/**Get the text elipsis of a part state. The value range is from 0.0(right) to 1.0(left)*/
-EAPI double                ///@return The text elipsis value
-edje_edit_state_text_elipsis_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the text vertical align of a part state. The value range is from 0.0(right) to 1.0(left)*/
-EAPI void
-edje_edit_state_text_elipsis_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double balance          ///< The position where to cut the string
-);
-
-/**Get if the text part fit it's container horizontally */
-EAPI Eina_Bool         ///@return 1 If the part fit it's container horizontally
-edje_edit_state_text_fit_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set if the text part should fit it's container horizontally */
-EAPI void
-edje_edit_state_text_fit_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   Eina_Bool fit       ///< 1 to make the text fit it's container
-);
-
-/**Get if the text part fit it's container vertically */
-EAPI Eina_Bool         ///@return 1 If the part fit it's container vertically
-edje_edit_state_text_fit_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set if the text part should fit it's container vertically */
-EAPI void
-edje_edit_state_text_fit_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   Eina_Bool fit       ///< 1 to make the text fit it's container
-);
-
-/**Get the list of all the fonts in the given edje.
- * Use edje_edit_string_list_free() when you don't need the list anymore.
+/** Move the given part above the next one.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to move one step above.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_List *          ///@return An Eina_List* of string (char *)containing all the fonts names found in the edje file.
-edje_edit_fonts_list_get(
-   Evas_Object *obj       ///< The edje object
-);
+EAPI Eina_Bool edje_edit_part_restack_above(Evas_Object *obj, const char *part);
 
-/**Add a new ttf font to the edje file.
- * The newly created font will be available to all the groups in the edje, not only the current one.
- * If font can't be load EINA_FALSE is returned.
- */
-EAPI Eina_Bool         ///@return EINA_TRUE on success or EINA_FALSE on failure
-edje_edit_font_add(
-   Evas_Object *obj,       ///< The edje object
-   const char* path        ///< The file path to load the ttf font from
-);
-
-/**Get font name for a given part state. Remember to free the returned string using edje_edit_string_free().*/
-EAPI const char *          ///@return The name of the font used in the given part state
-edje_edit_state_font_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set font name for a given part state. */
-EAPI void
-edje_edit_state_font_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *font        ///< The name of the font to use in the given part state
-);
+/** Set a new name for part.
+ *
+ * Note that the relative getter function don't exist as it don't make sense ;)
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to rename.
+ * @param new_name New name for the given part.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_part_name_set(Evas_Object *obj, const char *part, const char *new_name);
 
-//@}
-/******************************************************************************/
-/**************************   IMAGES API   ************************************/
-/******************************************************************************/
-/** @name Images API
- *  Functions to deal with image objects (see @ref edcref).
- */ //@{
+/** Get the type of a part.
+ *
+ * @param obj Object being edited.
+ * @param part Name of part to get the type of.
+ *
+ * @return Type of the part. See @ref edcref for details.
+ */
+EAPI Edje_Part_Type edje_edit_part_type_get(Evas_Object *obj, const char *part);
 
-/**Get the list of all the images in the given edje.
- * Use edje_edit_string_list_free() when you don't need the list anymore.
+/** Get the clip_to part.
+ *
+ * @param obj Object being edited.
+ * @param part Name of the part whose clipper to get.
+ *
+ * @return Name of the part @p part is clipped to. NULL is returned on errors and if the part don't have a clip.
  */
-EAPI Eina_List *          ///@return An Eina_List* of string (char *)containing all the images names found in the edje file.
-edje_edit_images_list_get(
-   Evas_Object *obj       ///< The edje object
-);
+EAPI const char * edje_edit_part_clip_to_get(Evas_Object *obj, const char *part);
 
-/**Add an new image to the image collection
+/** Set a part to clip part to.
  *
- * This function add the given image inside the edje. Don't add a new image part
- * but only put the image inside the edje file. It actually write directly to
- * the file so you don't have to save (and you can't undo!).
- * After you have to create a new image_part that use this image. Note that all
- * the parts in the edje share the same image collection, thus you can/must use
- * the same image for different part.
+ * @param obj Object being edited.
+ * @param part Part to set the clipper to.
+ * @param clip_to Part to use as clipper, if NULL then the clipping value will be cancelled (unset clipping).
  *
- * The format of the image files that can be loaded depend on the evas engine on your system
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return EINA_TRUE on success or EINA_FALSE on failure
-edje_edit_image_add(
-   Evas_Object *obj,       ///< The edje object
-   const char* path        ///< The name of the image file to include in the edje
-);
+EAPI Eina_Bool edje_edit_part_clip_to_set(Evas_Object *obj, const char *part, const char *clip_to);
 
-/**Add an image entry to the image collection
+/** Get the source of part.
  *
- * This function adds the given image entry to the edje image collection. The
- * image needs to be inside the eet already, with key name "images/id". After
- * you have to create a new image_part that use this image, referring to it as
- * "name". Note that all the parts in the edje share the same image collection,
- * thus you can/must use the same image for different part.
+ * The meaning of this parameter varies depending on the type of the part.
+ * For GROUP parts, it's the name of another group in the Edje file which will
+ * be autoloaded and swallowed on this part.
+ * For TEXTBLOCK parts, it's the name of a group to be used for selection
+ * display under the text.
+ * For EXTERNAL parts, it's the name of the registered external widget to load
+ * and swallow on this part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the source from.
+ *
+ * @return Content of the source parameter or NULL if nothing set or an error occurred.
  */
-EAPI Eina_Bool        /// @return EINA_TRUE on success or EINA_FALSE on failure
-edje_edit_image_data_add(
-   Evas_Object *obj,      ///< The edje object
-   const char *name,      ///< The image entry name
-   int id                 ///< The image id
-);
-
-/**Get normal image name for a given part state. Remember to free the returned string using edje_edit_string_free().*/
-EAPI const char *          ///@return The name of the image used by state
-edje_edit_state_image_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set normal image for a given part state.*/
-EAPI void
-edje_edit_state_image_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *image       ///< The name of the image for the given state (must be an image contained in the edje file)
-);
-
-/**Get image id for a given image name. Could be usefull to directly load the image from the eet file.*/
-EAPI int                   ///< The ID of the givan image name
-edje_edit_image_id_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *image_name  ///< The image name
-);
-
-/**Get compression type for the given image.*/
-EAPI Edje_Edit_Image_Comp ///@return One of EDJE_EDIT_IMAGE_COMP_RAW, EDJE_EDIT_IMAGE_COMP_USER, EDJE_EDIT_IMAGE_COMP_COMP or EDJE_EDIT_IMAGE_COMP_LOSSY
-edje_edit_image_compression_type_get(
-   Evas_Object *obj,      ///< The edje object
-   const char *image      ///< The name of the image
-);
-
-/**Get compression rate for the given image.*/
-EAPI int                  ///@return the compression rate if the image is EDJE_EDIT_IMAGE_COMP_LOSSY. Or < 0 on errors
-edje_edit_image_compression_rate_get(
-   Evas_Object *obj,      ///< The edje object
-   const char *image      ///< The name of the image
-);
-
-/**Get the image border of a part state. Pass NULL to any of [r,g,b,a] to get only the others.*/
-EAPI void
-edje_edit_state_image_border_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int *l,                 ///< A pointer to store the left value
-   int *r,                 ///< A pointer to store the right value
-   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(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int l,                  ///< The new left border (or -1)
-   int r,                  ///< The new right border (or -1)
-   int t,                  ///< The new top border (or -1)
-   int b                   ///< The new bottom border (or -1)
-);
-
-/**Get if the image center should be draw. 1 means to draw the center, 0 to don't draw it.*/
-EAPI unsigned char         ///@return 1 if the center of the bordered image is draw
-edje_edit_state_image_border_fill_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set if the image center should be draw. 1 means to draw the center, 0 to don't draw it.*/
-EAPI void
-edje_edit_state_image_border_fill_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   unsigned char fill      ///< If set to 0 the image center isn't draw
-);
-
-/**Get the list of all the tweens images in the given part state.
- * Use edje_edit_string_list_free() when you don't need it anymore.
+EAPI const char * edje_edit_part_source_get(Evas_Object *obj, const char *part);
+
+/** Set the source of part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the source of.
+ * @param source Value for the source parameter.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ *
+ * @see edje_edit_part_source_get()
+ *
+ * @note You can't change the source for EXTERNAL parts, it's akin to changing
+ * the type of the part.
+ *
+ * NOTE: This is not applied now. You must reload the edje to see the change.
  */
-EAPI Eina_List *           ///@return A string list containing all the image name that form a tween animation in the given part state
-edje_edit_state_tweens_list_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
+EAPI Eina_Bool edje_edit_part_source_set(Evas_Object *obj, const char *part, const char *source);
 
-/**Add a new tween frame to the given part state
- * The tween param must be the name of an existing image.
+/** Get the effect for a given part.
+ *
+ * Gets the effect used for parts of type TEXT. See @ref edcref for more details.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the effect of.
+ *
+ * @return The effect set for the part.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_tween_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *tween       ///< The name of the image to add.
-);
-
-/**Remove the first tween with the given name.
- * If none is removed the function return 0.
- * The image is not removed from the edje.
+EAPI Edje_Text_Effect edje_edit_part_effect_get(Evas_Object *obj, const char *part);
+
+/** Set the effect for a given part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the effect to. Only makes sense on type TEXT.
+ * @param effect Effect to set for the part.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_tween_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *tween       ///< The name of the image to remove from the tween list.
-);
+EAPI void edje_edit_part_effect_set(Evas_Object *obj, const char *part, Edje_Text_Effect effect);
+
+/** Get the current selected state in part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the selected state of.
+ * @param value Pointer to a double where the value of the state will be stored.
+ *
+ * @return The name of the currently selected state for the part.
+ */
+EAPI const char * edje_edit_part_selected_state_get(Evas_Object *obj, const char *part, double *value);
+
+/** Set the current state in part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the state of.
+ * @param state Name of the state to set.
+ * @param value Value of the state.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_part_selected_state_set(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get mouse_events for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get if the mouse events is accepted.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_part_mouse_events_get(Evas_Object *obj, const char *part);
+
+/** Set mouse_events for part.
+ *
+ * @param obj Object being edited.
+ * @param part The part to set if the mouse events is accepted.
+ * @param mouse_events EINA_TRUE if part will accept mouse events, EINA_FALSE otherwise.
+ */
+EAPI void edje_edit_part_mouse_events_set(Evas_Object *obj, const char *part, Eina_Bool mouse_events);
+
+/** Get repeat_events for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set if will pass all events to the other parts.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_part_repeat_events_get(Evas_Object *obj, const char *part);
+
+/** Set repeat_events for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set if will repeat all the received mouse events to other parts.
+ * @param repeat_events EINA_TRUE if the events received will propagate to other parts, EINA_FALSE otherwise
+ */
+EAPI void edje_edit_part_repeat_events_set(Evas_Object *obj, const char *part, Eina_Bool repeat_events);
+
+/** Get ignore_flags for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get which event_flags are being ignored.
+ *
+ * @return The Event flags set to the part.
+ */
+EAPI Evas_Event_Flags edje_edit_part_ignore_flags_get(Evas_Object *obj, const char *part);
+
+/** Set repeat_events for part.
+ *
+ * @param obj Object bein edited.
+ * @oaram part Part to set which event flags will be ignored
+ */
+EAPI void edje_edit_part_ignore_flags_set(Evas_Object *obj, const char *part, Evas_Event_Flags ignore_flags);
+
+/** Get horizontal dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get if can be dragged horizontally;
+ *
+ * @return 1 (or -1) if the part can be dragged horizontally, 0 otherwise.
+ */
+EAPI int edje_edit_part_drag_x_get(Evas_Object *obj, const char *part);
+
+/** Set horizontal dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set if should be dragged horizontally.
+ * @param drag 1 (or -1) if the part should be dragged horizontally, 0 otherwise.
+ */
+EAPI void edje_edit_part_drag_x_set(Evas_Object *obj, const char *part, int drag);
+
+/** Get vertical dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get if can be dragged vertically.
+ *
+ * @return 1 (or - 1) if the part can be dragged vertically, 0 otherwise.
+ */
+EAPI int edje_edit_part_drag_y_get(Evas_Object *obj, const char *part);
+
+/** Set vertical dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set if should be dragged vertically.
+ * @param drag 1 (or -1) of the part shpuld be dragged vertically, 0 otherwise.
+ */
+EAPI void edje_edit_part_drag_y_set(Evas_Object *obj, const char *part, int drag);
+
+/** Get horizontal dragable step for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the drag horizontal step value.
+ *
+ * @return The step value.
+ */
+EAPI int edje_edit_part_drag_step_x_get(Evas_Object *obj, const char *part);
+
+/** Set horizontal dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the drag horizontal step value.
+ * @param step The step the will be dragged.
+ */
+EAPI void edje_edit_part_drag_step_x_set(Evas_Object *obj, const char *part, int step);
+
+/** Get vertical dragable step for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the drag vertical step value.
+ *
+ * @return The step value.
+ */
+EAPI int edje_edit_part_drag_step_y_get(Evas_Object *obj, const char *part);
+
+/** Set vertical dragable state for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the drag vertical step value.
+ * @param step The step the will be dragged.
+ */
+EAPI void edje_edit_part_drag_step_y_set(Evas_Object *obj, const char *part, int step);
+
+/** Get horizontal dragable count for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the drag horizontal count value.
+ */
+EAPI int edje_edit_part_drag_count_x_get(Evas_Object *obj, const char *part);
+
+/** Set horizontal dragable count for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the drag horizontal count value.
+ * @aparam count The count value.
+ */
+EAPI void edje_edit_part_drag_count_x_set(Evas_Object *obj, const char *part, int count);
+
+/** Get vertical dragable count for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the drag vertical count value.
+ */
+EAPI int edje_edit_part_drag_count_y_get(Evas_Object *obj, const char *part);
+
+/** Set vertical dragable count for part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the drag vertical count value.
+ * @aparam count The count value.
+ */
+EAPI void edje_edit_part_drag_count_y_set(Evas_Object *obj, const char *part, int count);
+
+/** Get the name of the part that is used as 'confine' for the given draggies.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the name that is used as 'confine' for the given draggies.
+ *
+ * @return The name of the confine part or NULL (if unset).
+ */
+EAPI const char * edje_edit_part_drag_confine_get(Evas_Object *obj, const char *part);
+
+/** Set the name of the part that is used as 'confine' for the given draggies.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the name that is used as 'confine' for the given draggies.
+ * @param confine The name of the confine part or NULL to unset confine.
+ */
+EAPI void edje_edit_part_drag_confine_set(Evas_Object *obj, const char *part, const char *confine);
+
+/** Get the name of the part that is used as the receiver of the drag event.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the name that is used as the receiver of the drag event.
+ *
+ * @return The name of the part that will receive events, or NULL (if unset).
+ */
+EAPI const char * edje_edit_part_drag_event_get(Evas_Object *obj, const char *part);
+
+/** Set the name of the part that will receive events from the given draggies.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the name that will receive events from the given draggies.
+ * @param event The name of the part that will receive events, or NULL to unset.
+ */
+EAPI void edje_edit_part_drag_event_set(Evas_Object *obj, const char *part, const char *event);
+
+
+//@}
+/******************************************************************************/
+/**************************   STATES API   ************************************/
+/******************************************************************************/
+/** @name States API
+ *  Functions to deal with part states (see @ref edcref).
+ */ //@{
+
+/** Get the list of all the states in the given part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to get the states names list.
+ *
+ * @return An Eina_List* of string (char *)containing all the states names found
+ * in part, including the float value (ex: "default 0.00").
+ *
+ * Use edje_edit_string_list_free() when you don't need it anymore.
+ */
+EAPI Eina_List * edje_edit_part_states_list_get(Evas_Object *obj, const char *part);
+
+/** Set a new name for the given state in the given part.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @oaram state Name of the state to rename.
+ * @param value Value of the state to rename.
+ * @param new_name The new name for the state.
+ * @param new_value The new value for the state.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_name_set(Evas_Object *obj, const char *part, const char *state, double value, const char *new_name, double new_value);
+
+/** Create a new state to the give part.
+ *
+ * @param obj Object being edited.
+ * @param part Part to set the name of the new state.
+ * @param name Name for the new state (not including the state value).
+ * @param value The state value.
+ */
+EAPI void edje_edit_state_add(Evas_Object *obj, const char *part, const char *name, double value);
+
+/** Delete the given part state from the edje.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The current name of the state (not including the state value).
+ * @param value The state value.
+ */
+EAPI void edje_edit_state_del(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Check if a part state with the given name exist.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to check (not including the state value).
+ * @param value The state value.
+ *
+ * @return EINA_TRUE if the part state exist, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_exist(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Copies the state @p from into @p to. If @p to doesn't exist it will be created.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param from State to copy from (not including state value).
+ * @param val_from The value of the state to copy from.
+ * @param to State to copy into (not including state value).
+ * @param val_to The value of the state to copy into.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_copy(Evas_Object *obj, const char *part, const char *from, double val_from, const char *to, double val_to);
+
+/** Get the 'rel1 relative X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel1 relative X' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel1 relative X' value of the part state.
+ */
+EAPI double edje_edit_state_rel1_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel1 relative Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel1 relative Y' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel1 relative Y' value of the part state.
+ */
+EAPI double edje_edit_state_rel1_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel2 relative X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel2 relative X' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel2 relative X' value of the part state.
+ */
+EAPI double edje_edit_state_rel2_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel2 relative Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel2 relative Y' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel2 relative Y' value of the part state.
+ */
+EAPI double edje_edit_state_rel2_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the 'rel1 relative X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel1 relative X' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel1 relative X' value to set'.
+ */
+EAPI void edje_edit_state_rel1_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the 'rel1 relative Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel1 relative Y' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel1 relative Y' value to set'.
+ */
+EAPI void edje_edit_state_rel1_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Set the 'rel2 relative X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel2 relative X' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel2 relative X' value to set'.
+ */
+EAPI void edje_edit_state_rel2_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the 'rel2 relative Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel2 relative Y' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel2 relative Y' value to set'.
+ */
+EAPI void edje_edit_state_rel2_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Get the 'rel1 offset X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel1 offset X' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel1 offset X' value of the part state.
+ */
+EAPI int edje_edit_state_rel1_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel1 offset Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel1 offset Y' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel1 offset Y' value of the part state.
+ */
+EAPI int edje_edit_state_rel1_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel2 offset X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel2 offset X' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel2 offset X' value of the part state.
+ */
+EAPI int edje_edit_state_rel2_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the 'rel2 offset Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get 'rel2 offset Y' (not including the state value).
+ * @param value The state value.
+ *
+ * @return The 'rel2 offset Y' value of the part state.
+ */
+EAPI int edje_edit_state_rel2_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the 'rel1 offset X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel1 offset X' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel1 offset X' value to set'.
+ */
+EAPI void edje_edit_state_rel1_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the 'rel1 offset Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel1 offset Y' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel1 offset Y' value to set'.
+ */
+EAPI void edje_edit_state_rel1_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Set the 'rel2 offset X' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel2 offset X' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel2 offset X' value to set'.
+ */
+EAPI void edje_edit_state_rel2_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the 'rel2 offset Y' value of state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set 'rel2 offset Y' (not including the state value).
+ * @param value The state value.
+ * @param x The new 'rel2 offset Y' value to set'.
+ */
+EAPI void edje_edit_state_rel2_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Get the part name rel1x is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The state that contain which the part name rel1x is relative to (not including the state value).
+ * @param value The state value.
+ *
+ * @return The part name rel1x is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI const char * edje_edit_state_rel1_to_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the part name rel1y is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The state that contain which the part name rel1y is relative to (not including the state value).
+ * @param value The state value.
+ *
+ * @return The part name rel1y is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI const char * edje_edit_state_rel1_to_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the part name rel2x is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The state that contain which the part name rel2x is relative to (not including the state value).
+ * @param value The state value.
+ *
+ * @return The part name rel2x is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI const char * edje_edit_state_rel2_to_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the part name rel2y is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The state that contain which the part name rel2y is relative to (not including the state value).
+ * @param value The state value.
+ *
+ * @return The part name rel2y is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI const char * edje_edit_state_rel2_to_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the part rel1x is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set rel1x is relative to (not including the state value).
+ * @param value The state value.
+ * @param rel_to The name of the part that is used as container/parent (NULL make the part relative to the whole interface).
+ *
+ * @return The part name rel1x is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI void edje_edit_state_rel1_to_x_set(Evas_Object *obj, const char *part, const char *state, double value, const char *rel_to);
+
+/** Set the part rel1y is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set rel1y is relative to (not including the state value).
+ * @param value The state value.
+ * @param rel_to The name of the part that is used as container/parent (NULL make the part relative to the whole interface).
+ *
+ * @return The part name rel1y is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI void edje_edit_state_rel1_to_y_set(Evas_Object *obj, const char *part, const char *state, double value, const char *rel_to);
+
+/** Set the part rel2x is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set rel2x is relative to (not including the state value).
+ * @param value The state value.
+ * @param rel_to The name of the part that is used as container/parent (NULL make the part relative to the whole interface).
+ *
+ * @return The part name rel2x is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI void edje_edit_state_rel2_to_x_set(Evas_Object *obj, const char *part, const char *state, double value, const char *rel_to);
+
+/** Set the part rel2y is relative to.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set rel2y is relative to (not including the state value).
+ * @param value The state value.
+ * @param rel_to The name of the part that is used as container/parent (NULL make the part relative to the whole interface).
+ *
+ * @return The part name rel2y is relative to or NULL if the part is relative to the whole interface.
+ */
+EAPI void edje_edit_state_rel2_to_y_set(Evas_Object *obj, const char *part, const char *state, double value, const char *rel_to);
+
+/** Get the color of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get color (not including the state value).
+ * @param value The state value.
+ * @param r A pointer to store the red value.
+ * @param g A pointer to store the green value.
+ * @param b A pointer to store the blue value.
+ * @param a A pointer to store the alpha value.
+ */
+EAPI void edje_edit_state_color_get(Evas_Object *obj, const char *part, const char *state, double value, int *r, int *g, int *b, int *a);
+
+/** Get the color2 of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get color (not including the state value).
+ * @param value The state value.
+ * @param r A pointer to store the red value.
+ * @param g A pointer to store the green value.
+ * @param b A pointer to store the blue value.
+ * @param a A pointer to store the alpha value.
+ */
+EAPI void edje_edit_state_color2_get(Evas_Object *obj, const char *part, const char *state, double value, int *r, int *g, int *b, int *a);
+
+/** Get the color3 of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get color (not including the state value).
+ * @param value The state value.
+ * @param r A pointer to store the red value.
+ * @param g A pointer to store the green value.
+ * @param b A pointer to store the blue value.
+ * @param a A pointer to store the alpha value.
+ */
+EAPI void edje_edit_state_color3_get(Evas_Object *obj, const char *part, const char *state, double value, int *r, int *g, int *b, int *a);
+
+/** Set the color of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set color (not including the state value).
+ * @param value The state value.
+ * @param r The red value of the color.
+ * @param g The green value of the color.
+ * @param b The blue value of the color.
+ * @param a The alpha value of the color.
+ */
+EAPI void edje_edit_state_color_set(Evas_Object *obj, const char *part, const char *state, double value, int r, int g, int b, int a);
+
+/** Set the color2 of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set color (not including the state value).
+ * @param value The state value.
+ * @param r The red value of the color.
+ * @param g The green value of the color.
+ * @param b The blue value of the color.
+ * @param a The alpha value of the color.
+ */
+EAPI void edje_edit_state_color2_set(Evas_Object *obj, const char *part, const char *state, double value, int r, int g, int b, int a);
+
+/** Set the color3 of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set color (not including the state value).
+ * @param value The state value.
+ * @param r The red value of the color.
+ * @param g The green value of the color.
+ * @param b The blue value of the color.
+ * @param a The alpha value of the color.
+ */
+EAPI void edje_edit_state_color3_set(Evas_Object *obj, const char *part, const char *state, double value, int r, int g, int b, int a);
+
+/** Get the horizontal align value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get horizontal align (not including the state value).
+ * @param value The state value.
+ *
+ * @return The horizontal align value for the given state
+ */
+EAPI double edje_edit_state_align_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the vertical align value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get horizontal align (not including the state value).
+ * @param value The state value.
+ *
+ * @return The vertical align value for the given state
+ */
+EAPI double edje_edit_state_align_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the horizontal align value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get horizontal align (not including the state value).
+ * @param value The state value.
+ * @param The new vertical align value.
+ */
+EAPI void edje_edit_state_align_x_set(Evas_Object *obj, const char *part, const char *state, double value,  double align);
+
+/** Set the vertical align value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get vertical align (not including the state value).
+ * @param value The state value.
+ * @param The new vertical align value.
+ */
+EAPI void edje_edit_state_align_y_set(Evas_Object *obj, const char *part, const char *state, double value,  double align);
+
+/** Get the minimum width value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get minimum width (not including the state value).
+ * @param value The state value.
+ *
+ * @return The minimum width value.
+ */
+EAPI int edje_edit_state_min_w_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the minimum width value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set minimum width (not including the state value).
+ * @param value The state value.
+ * @param min_w Minimum width value.
+ */
+EAPI void edje_edit_state_min_w_set(Evas_Object *obj, const char *part, const char *state, double value, int min_w);
+
+/** Get the minimum height value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get minimum height (not including the state value).
+ * @param value The state value.
+ *
+ * @return The minimum height value.
+ */
+EAPI int edje_edit_state_min_h_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the minimum height value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set minimum height (not including the state value).
+ * @param value The state value.
+ * @param min_h Minimum height value.
+ */
+EAPI void edje_edit_state_min_h_set(Evas_Object *obj, const char *part, const char *state, double value, int min_h);
+
+/** Get the maximum width value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get maximum width (not including the state value).
+ * @param value The state value.
+ *
+ * @return The maximum width value.
+ */
+EAPI int edje_edit_state_max_w_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the maximum width value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set maximum width (not including the state value).
+ * @param value The state value.
+ * @param max_w Maximum width value.
+ */
+EAPI void edje_edit_state_max_w_set(Evas_Object *obj, const char *part, const char *state, double value, int max_w);
+
+/** Get the maximum height value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get maximum height (not including the state value).
+ * @param value The state value.
+ *
+ * @return The maximum height value.
+ */
+EAPI int edje_edit_state_max_h_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the maximum height value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set maximum height (not including the state value).
+ * @param value The state value.
+ * @param max_h Maximum height value.
+ */
+EAPI void edje_edit_state_max_h_set(Evas_Object *obj, const char *part, const char *state, double value, int max_h);
+
+/** Get the minimum aspect value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get minimum aspect (not including the state value).
+ * @param value The state value.
+ *
+ * @return The minimum aspect
+ */
+EAPI double edje_edit_state_aspect_min_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the maximum aspect value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get maximum aspect (not including the state value).
+ * @param value The state value.
+ *
+ * @return The maximum aspect
+ */
+EAPI double edje_edit_state_aspect_max_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the minimum aspect value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set minimum aspect (not including the state value).
+ * @param value The state value.
+ * @param max_h Minimum aspect value.
+ */
+EAPI void edje_edit_state_aspect_min_set(Evas_Object *obj, const char *part, const char *state, double value, double aspect);
+
+/** Set the maximum aspect value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set maximum aspect (not including the state value).
+ * @param value The state value.
+ * @param max_h Maximum aspect value.
+ */
+EAPI void edje_edit_state_aspect_max_set(Evas_Object *obj, const char *part, const char *state, double value, double aspect);
+
+/** Get the aspect preference of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get aspect preference (not including the state value).
+ * @param value The state value.
+ *
+ * @return The aspect preference (0 = None, 1 = Vertical, 2 = Horizontal, 3 = Both)
+ */
+EAPI unsigned char edje_edit_state_aspect_pref_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the aspect preference of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set aspect preference (not including the state value).
+ * @param value The state value.
+ * @param The aspect preference to set (0 = None, 1 = Vertical, 2 = Horizontal, 3 = Both)
+ */
+EAPI void edje_edit_state_aspect_pref_set(Evas_Object *obj, const char *part, const char *state, double value, unsigned char pref);
+
+/** Get the fill horizontal origin relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the fill horizontal origin relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill horizontal origin relative to area.
+ */
+EAPI double edje_edit_state_fill_origin_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill vertical origin relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill vertical origin relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill vertical origin relative to area.
+ */
+EAPI double edje_edit_state_fill_origin_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill horizontal origin offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill horizontal origin offset relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill horizontal origin offset relative to area.
+ */
+EAPI int edje_edit_state_fill_origin_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill vertical origin offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill vertical origin offset relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill vertical origin offset value.
+ */
+EAPI int edje_edit_state_fill_origin_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the fill horizontal origin relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill horizontal origin relative to area (not including the state value).
+ * @param value The state value.
+ * @param x The fill horizontal origin value.
+ */
+EAPI void edje_edit_state_fill_origin_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the fill horizontal origin relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill vertical origin relative to area (not including the state value).
+ * @param value The state value.
+ * @param y The fill vertical origin value.
+ */
+EAPI void edje_edit_state_fill_origin_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Set the fill horizontal origin offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill horizontal origin offset relative to area (not including the state value).
+ * @param value The state value.
+ * @param x The fill horizontal origin offset value.
+ */
+EAPI void edje_edit_state_fill_origin_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the fill vertical origin offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill vertical origin offset relative to area (not including the state value).
+ * @param value The state value.
+ * @param y The fill vertical origin offset value.
+ */
+EAPI void edje_edit_state_fill_origin_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Get the fill horizontal size relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill horizontal size relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill horizontal size relative to area.
+ */
+EAPI double edje_edit_state_fill_size_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill vertical size relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill vertical size relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill vertical size relative to area.
+ */
+EAPI double edje_edit_state_fill_size_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill horizontal size offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill horizontal size offset relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill horizontal size offset relative to area.
+ */
+EAPI int edje_edit_state_fill_size_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the fill vertical size offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get fill vertical size offset relative to area (not including the state value).
+ * @param value The state value.
+ *
+ * @return The fill vertical size offset relative to area.
+ */
+EAPI int edje_edit_state_fill_size_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the fill horizontal size relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill horizontal size relative value (not including the state value).
+ * @param value The state value.
+ * @param x The horizontal size relative value.
+ */
+EAPI void edje_edit_state_fill_size_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the fill vertical size relative value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill vertical size relative value (not including the state value).
+ * @param value The state value.
+ * @param y The vertical size relative value.
+ */
+EAPI void edje_edit_state_fill_size_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the fill horizontal size offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill horizontal size offset relative value (not including the state value).
+ * @param value The state value.
+ * @param x The horizontal size offset value.
+ */
+EAPI void edje_edit_state_fill_size_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, double x);
+
+/** Set the fill vertical size offset value of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set fill vertical size offset relative value (not including the state value).
+ * @param value The state value.
+ * @param y The vertical size offset value.
+ */
+EAPI void edje_edit_state_fill_size_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, double y);
+
+/** Get the visibility of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get visibility (not including the state value).
+ * @param value The state value.
+ *
+ * @return EINA_TRUE if the state is visible, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_visible_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the visibility of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set visibility (not including the state value).
+ * @param value The state value.
+ * @param visible To set state visible (EINA_TRUE if the state is visible, EINA_FALSE otherwise)
+ */
+EAPI void edje_edit_state_visible_set(Evas_Object *obj, const char *part, const char *state, double value, Eina_Bool visible);
+
+/** Get the color class of the given part state.
+ *
+ * Remember to free the string with edje_edit_string_free()
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get color class (not including the state value).
+ * @param value The state value.
+ *
+ * @return The current color class.
+ */
+EAPI const char *edje_edit_state_color_class_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the color class of the given part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set color class (not including the state value).
+ * @param value The state value.
+ * @param color_class The color class to assign.
+ */
+EAPI void edje_edit_state_color_class_set(Evas_Object *obj, const char *part, const char *state, double value, const char *color_class);
+
+/** Get the list of parameters for an external part.
+ *
+ * DO NOT FREE THE LIST!
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get list of Edje_External_Param (not including the state value).
+ * @param value The state value.
+ *
+ * @return The list of Edje_External_Param.
+ */
+EAPI const Eina_List * edje_edit_state_external_params_list_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the external parameter type and value.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter to look for.
+ * @param type The type of the parameter will be stored here.
+ * @param val Pointer to value will be stored here - DO NOT FREE IT!
+ *
+ * @return EINA_TRUE if the parameter was found, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, Edje_External_Param_Type *type, void **val);
+
+/** Get external parameter of type INT.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type INT (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val The value of the parameter.
+ *
+ * @return EINA_TRUE if sucessful. EINA_FALSE if not found or is of different type.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_int_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, int *val);
+
+/** Get external parameter of type BOOL.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type BOOL (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val The value of the parameter.
+ *
+ * @return EINA_TRUE if sucessful. EINA_FALSE if not found or is of different type.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_bool_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, Eina_Bool *val);
+
+/** Get external parameter of type DOUBLE.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type DOUBLE (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val The value of the parameter.
+ *
+ * @return EINA_TRUE if sucessful. EINA_FALSE if not found or is of different type.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_double_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, double *val);
+
+/** Get external parameter of type STRING.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type STRING (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val The value of the parameter.
+ *
+ * @return EINA_TRUE if sucessful. EINA_FALSE if not found or is of different type.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_string_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, const char **val);
+
+/** Get external parameter of type CHOICE.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type CHOICE (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val The value of the parameter.
+ *
+ * @return EINA_TRUE if sucessful. EINA_FALSE if not found or is of different type.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_choice_get(Evas_Object *obj, const char *part, const char *state, double value, const char *param, const char **val);
+
+/** Set the external parameter type and value, adding it if it didn't exist before.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter set.
+ * @param type The type of the parameter.
+ * @param val Value according to type.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, Edje_External_Param_Type type, ...);
+
+/** Set external parameter of type INT.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type INT (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val Value will be stored here.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_int_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, int val);
+
+/** Set external parameter of type BOOL.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type BOOL (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val Value will be stored here.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_bool_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, Eina_Bool val);
+
+/** Set external parameter of type DOUBLE.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type DOUBLE (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val Value will be stored here.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_double_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, double val);
+
+/** Set external parameter of type STRING.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type STRING (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val Value will be stored here.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_string_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, const char *val);
+
+/** Set external parameter of type CHOICE.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get external parameter of type CHOICE (not including the state value).
+ * @param value The state value.
+ * @param param The name of the paramter.
+ * @param val Value will be stored here.
+ *
+ * @return EINA_TRUE if it was set, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_external_param_choice_set(Evas_Object *obj, const char *part, const char *state, double value, const char *param, const char *val);
+
+
+//@}
+/******************************************************************************/
+/**************************   TEXT API   ************************************/
+/******************************************************************************/
+/** @name Text API
+ *  Functions to deal with text objects (see @ref edcref).
+ */ //@{
+
+/** Get the text of a part state.
+ *
+ * Remember to free the returned string with edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get text (not including the state value).
+ * @param value The state value.
+ *
+ * @return A newly allocated string containing the text for the given state.
+ */
+EAPI const char * edje_edit_state_text_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the text of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set text (not including the state value).
+ * @param value The state value.
+ * @param text The new text to assign.
+ */
+EAPI void edje_edit_state_text_set(Evas_Object *obj, const char *part, const char *state, double value,const char *text);
+
+/** Get the text size of a part state
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get text size (not including the state value).
+ * @param value The state value.
+ *
+ * @return The text size or -1 on errors.
+ */
+EAPI int edje_edit_state_text_size_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the text size of a part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set text size (not including the state value).
+ * @param value The state value.
+ * @param size The new font size to set (in pixel)
+ */
+EAPI void edje_edit_state_text_size_set(Evas_Object *obj, const char *part, const char *state, double value, int size);
+
+/** Get the text horizontal align of a part state.
+ *
+ * The value range is from 0.0(right) to 1.0(left)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the text horizontal align (not including the state value).
+ * @param value The state value.
+ *
+ * @return The text horizont align value
+ */
+EAPI double edje_edit_state_text_align_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the text vertical align of a part state.
+ *
+ * The value range is from 0.0(top) to 1.0(bottom)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the text vertical align (not including the state value).
+ * @param value The state value.
+ *
+ * @return The text horizont align value
+ */
+EAPI double edje_edit_state_text_align_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the text horizontal align of a part state.
+ *
+ * The value range is from 0.0(right) to 1.0(left)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the text horizontal align (not including the state value).
+ * @param value The state value.
+ * @param align The new text horizontal align value
+ */
+EAPI void edje_edit_state_text_align_x_set(Evas_Object *obj, const char *part, const char *state, double value, double align);
+
+/** Set the text vertical align of a part state.
+ *
+ * The value range is from 0.0(top) to 1.0(bottom)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the text vertical align (not including the state value).
+ * @param value The state value.
+ * @param align The new text vertical align value
+ */
+EAPI void edje_edit_state_text_align_y_set(Evas_Object *obj, const char *part, const char *state, double value, double align);
+
+/** Get the text elipsis of a part state.
+ *
+ * The value range is from 0.0(right) to 1.0(left)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the text elipses value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The text elipsis value
+ */
+EAPI double edje_edit_state_text_elipsis_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the text vertical align of a part state.
+ *
+ * The value range is from 0.0(right) to 1.0(left)
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the text elipses value (not including the state value).
+ * @param value The state value.
+ * @param balance The position where to cut the string
+ */
+EAPI void edje_edit_state_text_elipsis_set(Evas_Object *obj, const char *part, const char *state, double value, double balance);
+
+/** Get if the text part fit it's container horizontally
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the if the text part fit it's container horizontally (not including the state value).
+ * @param value The state value.
+ *
+ * @return EINA_TRUE If the part fit it's container horizontally, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_text_fit_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set if the text part should fit it's container horizontally
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the if the text part fit it's container horizontally (not including the state value).
+ * @param value The state value.
+ * @param fit EINA_TRUE to make the text fit it's container horizontally, EINA_FALSE otherwise.
+ */
+EAPI void edje_edit_state_text_fit_x_set(Evas_Object *obj, const char *part, const char *state, double value, Eina_Bool fit);
+
+/** Get if the text part fit it's container vertically
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the if the text part fit it's container vertically (not including the state value).
+ * @param value The state value.
+ *
+ * @return EINA_TRUE If the part fit it's container vertically, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_text_fit_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set if the text part should fit it's container vertically
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the if the text part fit it's container vertically (not including the state value).
+ * @param value The state value.
+ * @param fit EINA_TRUE to make the text fit it's container vertically, EINA_FALSE otherwise.
+ */
+EAPI void edje_edit_state_text_fit_y_set(Evas_Object *obj, const char *part, const char *state, double value, Eina_Bool fit);
+
+/** Get the list of all the fonts in the given edje.
+ *
+ * Use edje_edit_string_list_free() when you don't need the list anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return A list containing all the fonts names found in the edje file.
+ */
+EAPI Eina_List * edje_edit_fonts_list_get(Evas_Object *obj);
+
+/** Add a new font to the edje file.
+ *
+ * The newly created font will be available to all the groups in the edje, not only the current one.
+ *
+ * @param obj Object being edited.
+ * @param path The file path to load the font from.
+ *
+ * @return EINA_TRUE if font cat be loaded, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_font_add(Evas_Object *obj, const char *path);
+
+/** Get font name for a given part state.
+ *
+ * Remember to free the returned string using edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the name of the font used (not including the state value).
+ * @param value The state value.
+ *
+ * @return The name of the font used in the given part state.
+ */
+EAPI const char * edje_edit_state_font_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set font name for a given part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the name of the font that will be used (not including the state value).
+ * @param value The state value.
+ * @param font The name of the font to use in the given part state.
+ */
+EAPI void edje_edit_state_font_set(Evas_Object *obj, const char *part, const char *state, double value, const char *font);
+
+
+//@}
+/******************************************************************************/
+/**************************   IMAGES API   ************************************/
+/******************************************************************************/
+/** @name Images API
+ *  Functions to deal with image objects (see @ref edcref).
+ */ //@{
+
+/** Get the list of all the images in the given edje.
+ * Use edje_edit_string_list_free() when you don't need the list anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return A List containing all images names found in the edje file.
+ */
+EAPI Eina_List * edje_edit_images_list_get(Evas_Object *obj);
+
+/** Add an new image to the image collection
+ *
+ * This function add the given image inside the edje. Don't add a new image part
+ * but only put the image inside the edje file. It actually write directly to
+ * the file so you don't have to save (and you can't undo!).
+ * After you have to create a new image_part that use this image. Note that all
+ * the parts in the edje share the same image collection, thus you can/must use
+ * the same image for different part.
+ *
+ * The format of the image files that can be loaded depend on the evas engine on your system
+ *
+ * @param obj Object being edited.
+ * @param path The name of the image file to include in the edje.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_image_add(Evas_Object *obj, const char *path);
+
+/** Add an image entry to the image collection
+ *
+ * This function adds the given image entry to the edje image collection. The
+ * image needs to be inside the eet already, with key name "images/id". After
+ * you have to create a new image_part that use this image, referring to it as
+ * "name". Note that all the parts in the edje share the same image collection,
+ * thus you can/must use the same image for different part.
+ *
+ * @param obj Object being edited.
+ * @param name The image entry name.
+ * @param id The image id.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_image_data_add(Evas_Object *obj, const char *name, int id);
+
+/** Get normal image name for a given part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the name that is being used (not including the state value).
+ * @param value The state value.
+ *
+ * @return The name of the image used by state.
+ */
+EAPI const char * edje_edit_state_image_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set normal image for a given part state.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the image that will be used (not including the state value).
+ * @param value The state value.
+ * @param image The name of the image (must be an image contained in the edje file).
+ */
+EAPI void edje_edit_state_image_set(Evas_Object *obj, const char *part, const char *state, double value, const char *image);
+
+/** Get image id for a given image name.
+ *
+ * @param obj Object being edited.
+ * @param image_name The image name.
+ *
+ * @return The id of the given image name.
+ */
+EAPI int edje_edit_image_id_get(Evas_Object *obj, const char *image_name);
+
+/** Get compression type for the given image.
+ *
+ * @param obj Object being edited.
+ * @param image The name of the image.
+ *
+ * @return One of Image Compression types.
+ * (EDJE_EDIT_IMAGE_COMP_RAW, EDJE_EDIT_IMAGE_COMP_USER, EDJE_EDIT_IMAGE_COMP_COMP, EDJE_EDIT_IMAGE_COMP_LOSSY).
+ */
+EAPI Edje_Edit_Image_Comp edje_edit_image_compression_type_get(Evas_Object *obj, const char *image);
+
+/** Get compression rate for the given image.
+ *
+ * @param obj Object being edited.
+ * @param name The name of the image.
+ *
+ * @return The compression rate (if the imnage is EDJE_EDIT_IMAGE_COMP_LOSSY). Or < 0 on errors.
+ */
+EAPI int edje_edit_image_compression_rate_get(Evas_Object *obj, const char *image);
+
+/** Get the image border of a part state.
+ *
+ * Pass NULL to any of [r,g,b,a] to get only the others.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the image border (not including the state value).
+ * @param value The state value.
+ * @param l A pointer to store the left value
+ * @param r A pointer to store the right value
+ * @param t A pointer to store the top value
+ * @param r A pointer to store the bottom value
+ */
+EAPI void edje_edit_state_image_border_get(Evas_Object *obj, const char *part, const char *state, double value, int *l, int *r, int *t, int *b);
+
+/** Set the image border of a part state.
+ *
+ * Pass -1 to any of [l,r,t,b] to leave the value untouched.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the image border (not including the state value).
+ * @param value The state value.
+ * @param l Left border value (or -1).
+ * @param r Right border value (or -1).
+ * @param t Top border value (or -1).
+ * @param r Bottom border value (or -1).
+ */
+EAPI void edje_edit_state_image_border_set(Evas_Object *obj, const char *part, const char *state, double value, int l, int r, int t, int b);
+
+/** Get if the image center should be draw.
+ *
+ * 1 means to draw the center, 0 to don't draw it.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the image border fill (not including the state value).
+ * @param value The state value.
+ *
+ * @return 1 if the center of the bordered image is draw, 0 otherwise.
+ */
+EAPI unsigned char edje_edit_state_image_border_fill_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set if the image center should be draw.
+ *
+ * 1 means to draw the center, 0 to don't draw it.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to set the image border fill (not including the state value).
+ * @param value The state value.
+ * @param fill Fill to be se. 1 if the center of the bordered image is draw, 0 otherwise.
+ */
+EAPI void edje_edit_state_image_border_fill_set(Evas_Object *obj, const char *part, const char *state, double value, unsigned char fill);
+
+/** Get the list of all the tweens images in the given part state.
+ *
+ * Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to get the list of all the tweens images (not including the state value).
+ * @param value The state value.
+ *
+ * @return A string list containing all the image name that form a tween animation in the given part state.
+ */
+EAPI Eina_List * edje_edit_state_tweens_list_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Add a new tween frame to the given part state.
+ *
+ * The tween param must be the name of an existing image.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to add a new tween frame (not including the state value).
+ * @param value The state value.
+ * @param tween The name of the image to add.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_tween_add(Evas_Object *obj, const char *part, const char *state, double value, const char *tween);
+
+/** Remove the first tween with the given name.
+ *
+ * The image is not removed from the edje.
+ *
+ * @param obj Object being edited.
+ * @param part Part that contain state.
+ * @param state The name of the state to del the tween (not including the state value).
+ * @param value The state value.
+ * @param tween The name of the image to del.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_tween_del(Evas_Object *obj, const char *part, const char *state, double value, const char *tween);
+
 
 //@}
 /******************************************************************************/
@@ -2082,76 +2421,90 @@ edje_edit_state_tween_del(
  *  Functions to manage spectrum (see @ref edcref).
  */ //@{
 
-/**Get the list of all the spectrum in the given edje object.
+/** Get the list of all the spectrum in the given edje object.
+ *
  * Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return A list containing all the spectra names.
+ */
+EAPI Eina_List * edje_edit_spectrum_list_get(Evas_Object *obj);
+
+/** Add a new spectra in the given edje object.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra to include in the edje.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_spectra_add(Evas_Object *obj, const char *name);
+
+/** Delete the given spectra from the edje object.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra to delete.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_spectra_del(Evas_Object *obj, const char *spectra);
+
+/** Change the name of the given spectra.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the current spectra.
+ * @param name The new name to assign.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_spectra_name_set(Evas_Object *obj, const char *spectra, const char *name);
+
+/** Get the number of stops in the given spectra.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra.
+ *
+ * @return The number of stops (or 0 on errors).
+ */
+EAPI int edje_edit_spectra_stop_num_get(Evas_Object *obj, const char *spectra);
+
+/** Set the number of stops in the given spectra.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra.
+ * @param num The number of stops you want
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_spectra_stop_num_set(Evas_Object *obj, const char *spectra, int num);
+
+/** Get the colors of the given stop.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra.
+ * @param stop_number The number of the stop,
+ * @param r Where to store the red color value,
+ * @param g Where to store the green color value,
+ * @param b Where to store the blue color value,
+ * @param a Where to store the alpha color value,
+ * @param d Where to store the delta stop value,
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_spectra_stop_color_get(Evas_Object *obj, const char *spectra, int stop_number, int *r, int *g, int *b, int *a, int *d);
+
+/** Set the colors of the given stop.
+ *
+ * @param obj Object being edited.
+ * @param spectra The name of the spectra.
+ * @param stop_number The number of the stops,
+ * @param r The red color value to set,
+ * @param g The green color value to set,
+ * @param b The blue color value to set,
+ * @param a The alpha color value to set,
+ * @param d The delta stop value to set,
  */
-EAPI Eina_List *           ///@return An Eina_List* of string(char *) containing all the spectra names.
-edje_edit_spectrum_list_get(
-   Evas_Object *obj        ///< The edje object
-);
-
-/**Add a new spectra in the given edje object.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_add(
-   Evas_Object *obj,       ///< The edje object
-   const char* name        ///< The name of the new spectra
-);
-
-/**Delete the given spectra from the edje object.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_del(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra     ///< The name of the spectra to delete
-);
-
-/**Change the name of the given spectra.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_name_set(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra,    ///< The current name of the spectra
-   const char* name        ///< The new name to assign
-);
-
-/**Get the number of stops in the given spectra.*/
-EAPI int                   ///@return The number of stops, or 0 on errors
-edje_edit_spectra_stop_num_get(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra     ///< The name of the spectra
-);
-
-/**Set the number of stops in the given spectra.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_stop_num_set(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra,    ///< The name of the spectra
-   int num                 ///< The number of stops you want
-);
-
-/**Get the colors of the given stop.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_stop_color_get(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra,    ///< The name of the spectra
-   int stop_number,        ///< The number of the stop
-   int *r,                 ///< Where to store the red color value
-   int *g,                 ///< Where to store the green color value
-   int *b,                 ///< Where to store the blue color value
-   int *a,                 ///< Where to store the alpha color value
-   int *d                  ///< Where to store the delta stop value
-);
-
-/**Set the colors of the given stop.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_spectra_stop_color_set(
-   Evas_Object *obj,       ///< The edje object
-   const char* spectra,    ///< The name of the spectra
-   int stop_number,        ///< The number of the stop
-   int r,                  ///< The red color value to set
-   int g,                  ///< The green color value to set
-   int b,                  ///< The blue color value to set
-   int a,                  ///< The alpha color value to set
-   int d                   ///< The delta stop value to set
-);
+EAPI Eina_Bool edje_edit_spectra_stop_color_set(Evas_Object *obj, const char *spectra, int stop_number, int r, int g, int b, int a, int d);
 
 
 //@}
@@ -2162,225 +2515,277 @@ edje_edit_spectra_stop_color_set(
  *  Functions to deal with gradient objects (see @ref edcref).
  */ //@{
 
-/**Get the type of gradient. Remember to free the string with edje_edit_string_free().*/
-EAPI const char *          ///@return The type of gradient used in state
-edje_edit_state_gradient_type_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
+/** Get the type of gradient.
+ *
+ * Remember to free the string with edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get the gradient type (not including the state value).
+ * @param value The state value.
+ *
+ * @return The type of gradient used in state.
+ * (linear, linear.diag, linear.codiag, radial, rectangular, angular, sinosoidal)
+ */
+EAPI const char * edje_edit_state_gradient_type_get(Evas_Object *obj, const char *part, const char *state, double value);
 
-/**Set the type of gradient.
+/** Set the type of gradient.
+ *
  * Gradient type can be on of the following: linear, linear.diag, linear.codiag, radial, rectangular, angular, sinusoidal
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set the gradient type (not including the state value).
+ * @param value The state value.
+ * @param type The type of gradient to use.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_type_set(Evas_Object *obj, const char *part, const char *state, double value, const char *type);
+
+/** Get if the current gradient use the fill properties or the gradient_rel as params.
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set the gradient type (not including the state value).
+ * @param value The state value.
+ *
+ * @return EINA_TRUE if gradient use the fill properties, EINA_FALSE otherwise.
+ * */
+EAPI Eina_Bool edje_edit_state_gradient_use_fill_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the spectra used by part state.
+ *
+ * Remember to free the string with edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get the spectra name used (not including the state value).
+ * @param value The state value.
+ *
+ * @return The spectra name used in state.
+ */
+EAPI const char * edje_edit_state_gradient_spectra_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the spectra used by part state.
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set the spectra (not including the state value).
+ * @param value The state value.
+ * @param spectra The spectra name to assign
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_spectra_set(Evas_Object *obj, const char *part, const char *state, double value, const char *spectra);
+
+/** Get the angle of the gradient.
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get the angle (not including the state value).
+ * @param value The state value.
+ *
+ * @return The angle of the gradient.
+ */
+EAPI int edje_edit_state_gradient_angle_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the angle of the gradient.
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set the angle (not including the state value).
+ * @param value The state value.
+ * @param angle The angle to set.
+ */
+EAPI void edje_edit_state_gradient_angle_set(Evas_Object *obj, const char *part, const char *state, double value, int angle);
+
+/** Get the gradient rel1 horizontal relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel1 relative x value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel1 horizontal relative value.
  */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_type_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char *type        ///< The type of gradient to use
-);
-
-/**Get if the current gradient use the fill properties or the gradient_rel as params.*/
-EAPI Eina_Bool         ///@return 1 if use fill, 0 if use gradient_rel
-edje_edit_state_gradient_use_fill_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the spectra used by part state. Remember to free the string with edje_edit_string_free()*/
-EAPI const char *          ///@return The spectra name used in state
-edje_edit_state_gradient_spectra_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the spectra used by part state.*/
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_spectra_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   const char* spectra     ///< The spectra name to assign
-);
-
-/**Get the angle of the gradient.*/
-EAPI int                   ///@return The angle of the gradient
-edje_edit_state_gradient_angle_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the angle of the gradient.*/
-EAPI void
-edje_edit_state_gradient_angle_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int angle               ///< The angle to set
-);
-
-/**Get the gradien rel1 relative x value */
-EAPI double                ///@return The gradien rel1 relative x value
-edje_edit_state_gradient_rel1_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel1 relative y value */
-EAPI double                ///@return The gradien rel1 relative y value
-edje_edit_state_gradient_rel1_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel2 relative x value */
-EAPI double                ///@return The gradien rel2 relative x value
-edje_edit_state_gradient_rel2_relative_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel2 relative y value */
-EAPI double                ///@return The gradien rel2 relative y value
-edje_edit_state_gradient_rel2_relative_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the gradien rel1 relative x value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel1_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double val
-);
-
-/**Set the gradien rel1 relative y value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel1_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double val
-);
-
-/**Set the gradien rel2 relative x value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel2_relative_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double val
-);
-
-/**Set the gradien rel2 relative y value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel2_relative_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   double val
-);
-
-/**Get the gradien rel1 offset x value */
-EAPI int                   ///@return The gradient rel1 offset x value
-edje_edit_state_gradient_rel1_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel1 offset y value */
-EAPI int                   ///@return The gradient rel1 offset y value
-edje_edit_state_gradient_rel1_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel2 offset x value */
-EAPI int                   ///@return The gradient rel2 offset x value
-edje_edit_state_gradient_rel2_offset_x_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Get the gradien rel2 offset y value */
-EAPI int                   ///@return The gradient rel2 offset y value
-edje_edit_state_gradient_rel2_offset_y_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value
-);
-
-/**Set the gradien rel1 offset x value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel1_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int val
-);
-
-/**Set the gradien rel1 offset y value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel1_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int val
-);
-
-/**Set the gradien rel2 offset x value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel2_offset_x_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int val
-);
-
-/**Set the gradien rel2 offset y value */
-EAPI Eina_Bool         ///@return 1 on success, 0 otherwise
-edje_edit_state_gradient_rel2_offset_y_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *part,       ///< The name of the part
-   const char *state,      ///< The name of the 'part state' (ex. "default")
-   double value,
-   int val
-);
+EAPI double edje_edit_state_gradient_rel1_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel1 vertical relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel1 relative y value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel1 vertical relative value.
+ */
+EAPI double edje_edit_state_gradient_rel1_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel2 horizontal relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel2 relative x value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel2 horizontal relative value.
+ */
+EAPI double edje_edit_state_gradient_rel2_relative_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel2 vertical relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel2 relative y value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel2 vertical relative value.
+ */
+EAPI double edje_edit_state_gradient_rel2_relative_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+
+/** Set the gradient rel1 horizontal relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel1 relative x value (not including the state value).
+ * @param value The state value.
+ * @param val The rel1 relative x to be set,
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise..
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel1_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double val);
+
+
+/** Set the gradient rel1 vertical relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel1 relative y value (not including the state value).
+ * @param value The state value.
+ * @param val The rel1 relative y to be set,
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise..
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel1_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double val);
+
+/** Set the gradient rel2 horizontal relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel2 relative x value (not including the state value).
+ * @param value The state value.
+ * @param val The rel2 relative x to be set,
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise..
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel2_relative_x_set(Evas_Object *obj, const char *part, const char *state, double value, double val);
+
+/** Set the gradient rel2 vertical relative value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel2 relative y value (not including the state value).
+ * @param value The state value.
+ * @param val The rel2 relative y to be set,
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise..
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel2_relative_y_set(Evas_Object *obj, const char *part, const char *state, double value, double val);
+
+/** Get the gradient rel1 horizontal offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel1 offset x value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel1 horizontal offset value.
+ */
+EAPI int edje_edit_state_gradient_rel1_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel1 vertical offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel1 offset y value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel1 vertical offset value.
+ */
+EAPI int edje_edit_state_gradient_rel1_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel2 horizontal offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel2 offset x value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel2 horizontal offset value.
+ */
+EAPI int edje_edit_state_gradient_rel2_offset_x_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Get the gradient rel2 vertical offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to get rel2 offset y value (not including the state value).
+ * @param value The state value.
+ *
+ * @return The gradient rel2 vertical offset value.
+ */
+EAPI int edje_edit_state_gradient_rel2_offset_y_get(Evas_Object *obj, const char *part, const char *state, double value);
+
+/** Set the gradient rel1 horizontal offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel1 offset x value (not including the state value).
+ * @param value The state value.
+ * @param val The rel1 offset x value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel1_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, int val);
+
+/** Set the gradient rel1 vertical offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel1 offset y value (not including the state value).
+ * @param value The state value.
+ * @param val The rel1 offset y value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel1_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, int val);
+
+/** Set the gradient rel2 horizontal offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel2 offset x value (not including the state value).
+ * @param value The state value.
+ * @param val The rel2 offset x value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel2_offset_x_set(Evas_Object *obj, const char *part, const char *state, double value, int val);
+
+/** Set the gradient rel2 vertical offset value
+ *
+ * @param obj Object being edited.
+ * @param part The part that contain state.
+ * @param state The name of the state to set rel2 offset y value (not including the state value).
+ * @param value The state value.
+ * @param val The rel2 offset y value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_state_gradient_rel2_offset_y_set(Evas_Object *obj, const char *part, const char *state, double value, int val);
+
 
 //@}
 /******************************************************************************/
@@ -2390,318 +2795,388 @@ edje_edit_state_gradient_rel2_offset_y_set(
  *  Functions to deal with programs (see @ref edcref).
  */ //@{
 
-/**Get the list of all the programs in the given edje object.
- * @param obj The edje object
- * @return An Eina_List* of string (char *)containing all the program names.
+/** Get the list of all the programs in the given edje object.
+ *
  * Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ *
+ * @return A list containing all the program names.
  */
-EAPI Eina_List *          ///@return A string list containing all the program names
-edje_edit_programs_list_get(
-   Evas_Object *obj       ///< The edje object
-);
+EAPI Eina_List * edje_edit_programs_list_get(Evas_Object *obj);
 
-/**Add a new program to the edje file
+/** Add a new program to the edje file
+ *
  * If a program with the same name just exist the function will fail.
+ *
+ * @param obj Object being edited.
+ * @param name The name of the new program.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_add(Evas_Object *obj, const char *name);
+
+/** Remove the given program from the edje file.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to remove.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_del(Evas_Object *obj, const char *prog);
+
+/** Check if a program with the given name exist in the edje object.
+ *
+ * @param obj Object being edited.
+ * @param The name of the program that will be searched,
+ *
+ * @return EINA_TRUE if the program exist, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_exist(Evas_Object *obj, const char *prog);
+
+/** Run the given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to execute.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_run(Evas_Object *obj, const char *prog);
+
+/** Set a new name for the given program
+ *
+ * @param obj Object being edited.
+ * @param prog The current program name.
+ * @param new_name The new name to assign.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_name_set(Evas_Object *obj, const char *prog, const char *new_name);
+
+/** Get source of a given program.
+ *
+ * Remember to free the returned string using edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get source.
+ *
+ * @return The source value por program.
+ */
+EAPI const char * edje_edit_program_source_get(Evas_Object *obj, const char *prog);
+
+/** Set source of the given program.
+ *
+ * @param obj Object being edited.
+ * @param program The name of the program to set source.
+ * @param source The new source value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_source_set(Evas_Object *obj, const char *prog, const char *source);
+
+/** Get signal of a given program.
+ *
+ * Remember to free the returned string using edje_edit_string_free().
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the signal.
+ *
+ * @return The signal value for program.
+ */
+EAPI const char * edje_edit_program_signal_get(Evas_Object *obj, const char *prog);
+
+/** Set signal of the given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the signal.
+ * @param signal The new signal value.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_signal_set(Evas_Object *obj, const char *prog, const char *signal);
+
+/** Get in.from of a given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the delay.
+ *
+ * @return The delay.
+ */
+EAPI double edje_edit_program_in_from_get(Evas_Object *obj, const char *prog);
+
+/** Set in.from of a given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the delay.
+ * @param seconds Number of seconds to delay the program execution
+ *
+ * */
+EAPI Eina_Bool edje_edit_program_in_from_set(Evas_Object *obj, const char *prog, double seconds);
+
+/** Get in.range of a given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get random delay.
+ *
+ * @return The delay random.
+ */
+EAPI double edje_edit_program_in_range_get(Evas_Object *obj, const char *prog);
+
+/** Set in.range of a given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set random delay.
+ * @param seconds Max random number of seconds to delay.
+ *
+ * @returen EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *name        ///< The name of the new program
-);
-
-/**Remove the given program from the edje file.
- */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_del(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The name of the program to remove
-);
-
-/**Check if a program with the given name exist in the edje object.
- */
-EAPI Eina_Bool         ///< 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
-);
-
-/**Run the given program. */
-EAPI Eina_Bool         ///< 1 on success, 0 otherwise.
-edje_edit_program_run(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The name of the program to execute
-);
-
-/**Set a new name for the given program */
-EAPI Eina_Bool        ///@return 1 on success or 0 on errors
-edje_edit_program_name_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *new_name    ///< The new name to assign
-);
-
-/**Get source of a given program. Remember to free the returned string using edje_edit_string_free().*/
-EAPI const char *          ///@return The source value for prog
-edje_edit_program_source_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
-
-/**Set source of the given program. */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_source_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *source      ///< The new source value
-);
-
-/**Get signal of a given program. Remember to free the returned string using edje_edit_string_free().*/
-EAPI const char *          ///@return The signal value for prog
-edje_edit_program_signal_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
-
-/**Set signal of the given program. */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_signal_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *signal      ///< The new signal value
-);
-
-/**Get in.from of a given program.*/
-EAPI double                ///@return The delay
-edje_edit_program_in_from_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
-
-/**Set in.from of a given program.*/
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_in_from_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   double seconds          ///< Number of seconds to delay the program execution
-);
-
-/**Get in.range of a given program.*/
-EAPI double                ///@return The delay random
-edje_edit_program_in_range_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
-
-/**Set in.range of a given program.*/
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_in_range_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   double seconds          ///< Max random number of seconds to delay
-);
-
-/**Get the action of a given program.
+EAPI Eina_Bool edje_edit_program_in_range_set(Evas_Object *obj, const char *prog, double seconds);
+
+/** Get the action of a given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the action.
+ *
+ * @return The action type, or -1 on errors.
  * 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
  */
-EAPI Edje_Action_Type      ///@return The action type, or -1 on errors
-edje_edit_program_action_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI Edje_Action_Type edje_edit_program_action_get(Evas_Object *obj, const char *prog);
 
-/**Set the action of a given program.
+/** 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
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the action.
+ * @param action The new action type.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_action_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   Edje_Action_Type action ///< The new action type
-);
+EAPI Eina_Bool edje_edit_program_action_set(Evas_Object *obj, const char *prog, Edje_Action_Type action);
 
-/**Get the list of the targets for the given program
- * Return a list of target name
+/** Get the list of the targets for the given program.
+ *
  * Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the progrem to get the list of the targets.
+ *
+ * @return A list with all the targets names, or NULL on error.
  */
-EAPI Eina_List*            ///@return An Eina_List of char*, or NULL on error
-edje_edit_program_targets_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI Eina_List * edje_edit_program_targets_get(Evas_Object *obj, const char *prog);
 
-/**Add a new target name to the list of 'targets' in the given program.
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param program The name of the program to add a new target.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_target_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *target      ///< The name of another program or another part
-);
+EAPI Eina_Bool edje_edit_program_target_add(Evas_Object *obj, const char *prog, const char *target);
 
-/**Deletes a target from the list of 'targets' in the given program.
+/** Deletes a target from 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to del a target from the list of targets.
+ * @param target The name of another program or another part.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_target_del(Evas_Object *obj, const char *prog, const char *target);
+
+/** Clear the 'targets' list of the given program
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to cleaar the 'targets' list.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_target_del(
-   Evas_Object *obj,       ///< The edje object
-   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 Eina_Bool         ///@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.
+EAPI Eina_Bool edje_edit_program_targets_clear(Evas_Object *obj, const char *prog);
+
+/** Get the list of action that will be run after the give program
+ *
  * Use edje_edit_string_list_free() when you don't need it anymore.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the list of actions
+ *
+ * @return A list with all program names. or NULL on error.
  */
-EAPI Eina_List*            ///@return An Eina_List of char*, or NULL on error
-edje_edit_program_afters_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI Eina_List * edje_edit_program_afters_get(Evas_Object *obj, const char *prog);
 
-/**Add a new program name to the list of 'afters' in the given program.
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program that contains the list of afters
+ * @param after The name of another program to add to the afters list
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_after_add(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *after       ///< The name of another program to add to the afters list
-);
+EAPI Eina_Bool edje_edit_program_after_add(Evas_Object *obj, const char *prog, const char *after);
 
+/** Delete the given program from the list of 'afters' of the program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program from where to remove the after.
+ * @param after The name of the program to remove from the list of afters.
+ *
+ * @return EINA_TRUE is succesful or not in the list, EINA_FALSE otherwise.
+ */
 EAPI Eina_Bool edje_edit_program_after_del(Evas_Object *obj, const char *prog, const char *after);
 
-/**Clear the 'afters' list of the given program */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_afters_clear(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+/** Clear the 'afters' list of the given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to clear the 'afters' list.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_afters_clear(Evas_Object *obj, const char *prog);
 
-/**Get the state for the given program
+/** Get 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the state.
+ *
+ * @return The name of the state.
  */
-EAPI const char*           ///@return The name of state for prog
-edje_edit_program_state_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI const char * edje_edit_program_state_get(Evas_Object *obj, const char *prog);
 
-/**Set the state for the given program
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set a state.
+ * @param state The nameo of the state to set (not including the state value)
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_state_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *state       ///< The state to set (not including the state value)
-);
+EAPI Eina_Bool edje_edit_program_state_set(Evas_Object *obj, const char *prog, const char *state);
 
-/**Get the value of state for the given program.
+/** Get 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the value of state.
+ *
+ * @return The value of state for the program.
  */
-EAPI double                ///@return The value of state for prog
-edje_edit_program_value_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI double edje_edit_program_value_get(Evas_Object *obj, const char *prog);
 
-/**Set the value of state for the given program.
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the value of state.
+ * @param value The vale to set.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_value_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   double value            ///< The value to set
-);
+EAPI Eina_Bool edje_edit_program_value_set(Evas_Object *obj, const char *prog, double value);
 
-/**Get the state2 for the given program
+/** Get 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the state2.
+ *
+ * @return The source to emit for the program.
  */
-EAPI const char*           ///@return The source to emit for prog
-edje_edit_program_state2_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI const char * edje_edit_program_state2_get(Evas_Object *obj, const char *prog);
 
-/**Set the state2 for the given program
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the state2.
+ * @param state2 The name of the state to set.
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_state2_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   const char *state2      ///< The state2 value to set
-);
+EAPI Eina_Bool edje_edit_program_state2_set(Evas_Object *obj, const char *prog, const char *state2);
 
-/**Get the value of state2 for the given program.
- * I don't know what this is used for. :P
+/** Get the value of state2 for the given program.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the state2 value.
+ *
+ * @return The vale of the state2 for the program.
  */
-EAPI double                ///@return The value of state2 for prog
-edje_edit_program_value2_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI double edje_edit_program_value2_get(Evas_Object *obj, const char *prog);
 
-/**Set the value2 of state for the given program.
+/** Set the value2 of state for the given program.
+ *
  * This is used in DRAG_ACTION
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the state2 value.
+ * @param value The value of the state2 to set.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_value2_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   double value            ///< The value to set
-);
+EAPI Eina_Bool edje_edit_program_value2_set(Evas_Object *obj, const char *prog, double value);
 
-/**Get the type of transition to use when apply animations.
+/** Get 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the transition.
+ *
+ * @return The type of transition used by program.
  */
-EAPI Edje_Tween_Mode       ///@return The type of transition used by program
-edje_edit_program_transition_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
+EAPI Edje_Tween_Mode edje_edit_program_transition_get(Evas_Object *obj, const char *prog);
 
-/**Set the type of transition to use when apply animations.
+/** 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.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the transition.
+ * @param transition The transition type to set
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
+ */
+EAPI Eina_Bool edje_edit_program_transition_set(Evas_Object *obj, const char *prog, Edje_Tween_Mode transition);
+
+/** Get the duration of the transition in seconds.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to get the transition time.
+ *
+ * @return The duration of the transition.
+ */
+EAPI double edje_edit_program_transition_time_get(Evas_Object *obj, const char *prog);
+
+/** Set the duration of the transition in seconds.
+ *
+ * @param obj Object being edited.
+ * @param prog The name of the program to set the transition time.
+ * @param seconds The duration of the transition (in seconds).
+ *
+ * @return EINA_TRUE if succesful, EINA_FALSE otherwise.
  */
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_transition_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   Edje_Tween_Mode transition ///< The transition type to set
-);
-
-/**Get the duration of the transition in seconds.*/
-EAPI double                ///@return The duration of the transition
-edje_edit_program_transition_time_get(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog        ///< The program name
-);
-
-/**Set the duration of the transition in seconds.*/
-EAPI Eina_Bool         ///@return 1 on success or 0 on errors
-edje_edit_program_transition_time_set(
-   Evas_Object *obj,       ///< The edje object
-   const char *prog,       ///< The program name
-   double seconds          ///< The duration of the transition (in seconds)
-);
+EAPI Eina_Bool edje_edit_program_transition_time_set(Evas_Object *obj, const char *prog, double seconds);
+
 
 //@}
 /******************************************************************************/
@@ -2710,7 +3185,15 @@ edje_edit_program_transition_time_set(
 /** @name Scripts API
  *  Functions to deal with embryo scripts (see @ref edcref).
  */ //@{
-EAPI const char* edje_edit_script_get(Evas_Object *obj);
+
+/**
+ * Get the script for the given object,
+ *
+ * @param obj Object being edited.
+ *
+ * @return The script name.
+ */
+EAPI const char * edje_edit_script_get(Evas_Object *obj);
 
 
 
index 70b9bcf..6321c7d 100644 (file)
 /* Get ed(Edje*) from obj(Evas_Object*) */
 #define GET_ED_OR_RETURN(RET) \
    Edje *ed; \
-   ed = _edje_fetch(obj); \
-   if (!ed) return RET;
+   Edje_Edit *eed; \
+   if (!evas_object_smart_type_check_ptr(obj, _edje_edit_type)) \
+     return RET; \
+   eed = evas_object_smart_data_get(obj); \
+   if (!eed) return RET; \
+   ed = (Edje *)eed;
 
 /* Get rp(Edje_Real_Part*) from obj(Evas_Object*) and part(char*) */
 #define GET_RP_OR_RETURN(RET) \
    Edje *ed; \
+   Edje_Edit *eed; \
    Edje_Real_Part *rp; \
-   ed = _edje_fetch(obj); \
-   if (!ed) return RET; \
+   if (!evas_object_smart_type_check_ptr(obj, _edje_edit_type)) \
+     return RET; \
+   eed = evas_object_smart_data_get(obj); \
+   if (!eed) return RET; \
+   ed = (Edje *)eed; \
    rp = _edje_real_part_get(ed, part); \
    if (!rp) return RET;
 
 /* Get pd(Edje_Part_Description*) from obj(Evas_Object*), part(char*) and state (char*) */
 #define GET_PD_OR_RETURN(RET) \
    Edje *ed; \
+   Edje_Edit *eed; \
    Edje_Part_Description *pd; \
-   ed = _edje_fetch(obj); \
-   if (!ed) return RET; \
-   pd = _edje_part_description_find_byname(ed, part, state, value); \
+   if (!evas_object_smart_type_check_ptr(obj, _edje_edit_type)) \
+     return RET; \
+   eed = evas_object_smart_data_get(obj); \
+   if (!eed) return RET; \
+   ed = (Edje *)eed; \
+   pd = _edje_part_description_find_byname(eed, part, state, value); \
    if (!pd) return RET;
 
 /* Get epr(Edje_Program*) from obj(Evas_Object*) and prog(char*)*/
 #define GET_EPR_OR_RETURN(RET) \
    Edje_Program *epr; \
+   if (!evas_object_smart_type_check_ptr(obj, _edje_edit_type)) \
+     return RET; \
    epr = _edje_program_get_byname(obj, prog); \
    if (!epr) return RET;
 
@@ -81,25 +95,110 @@ _alloc(size_t size)
 /* INTERNALS */
 /*************/
 
+/* Edje_Edit smart! Overloads the edje one adding some more control stuff */
+static const char _edje_edit_type[] = "edje_edit";
 
+typedef struct _Edje_Edit Edje_Edit;
+struct _Edje_Edit
+{
+   Edje base;
+};
+
+static void _edje_edit_smart_add(Evas_Object *obj);
+static void _edje_edit_smart_del(Evas_Object *obj);
 
+static Eina_Bool _edje_edit_smart_file_set(Evas_Object *obj, const char *file, const char *group);
+
+EVAS_SMART_SUBCLASS_NEW(_edje_edit_type, _edje_edit, Edje_Smart_Api,
+                       Edje_Smart_Api, _edje_object_smart_class_get, NULL)
+
+static void
+_edje_edit_smart_set_user(Edje_Smart_Api *sc)
+{
+   sc->base.add = _edje_edit_smart_add;
+   sc->base.del = _edje_edit_smart_del;
+   sc->file_set = _edje_edit_smart_file_set;
+}
+
+static void
+_edje_edit_smart_add(Evas_Object *obj)
+{
+   Edje_Edit *eed;
+
+   eed = evas_object_smart_data_get(obj);
+   if (!eed)
+     {
+       const Evas_Smart *smart;
+       const Evas_Smart_Class *sc;
+
+       eed = calloc(1, sizeof(Edje_Edit));
+       if (!eed) return;
+
+       smart = evas_object_smart_smart_get(obj);
+       sc = evas_smart_class_get(smart);
+       eed->base.api = (const Edje_Smart_Api *)sc;
+
+       evas_object_smart_data_set(obj, eed);
+     }
+
+   _edje_edit_parent_sc->base.add(obj);
+}
+
+static void
+_edje_edit_smart_del(Evas_Object *obj)
+{
+   Edje_Edit *eed;
+
+   eed = evas_object_smart_data_get(obj);
+   _edje_edit_parent_sc->base.del(obj);
+}
+
+static Eina_Bool
+_edje_edit_smart_file_set(Evas_Object *obj, const char *file, const char *group)
+{
+   Edje_Edit *eed;
+
+   eed = evas_object_smart_data_get(obj);
+   /* Nothing custom here yet, so we just call the parent function.
+    * TODO and maybes:
+    *  * The whole point of this thing is keep track of stuff such as
+    *    strings to free and who knows what, so we need to take care
+    *    of those if the file/group changes.
+    *  * Maybe have the possibility to open just files, not always with
+    *    a group given.
+    *  * A way to skip the cache? Could help avoid some issues when editing
+    *    a group being used by the application in some other way, or multiple
+    *    opens of the same file.
+    *  * Here we probably want to allow opening groups with broken references
+    *    (GROUP parts or BOX/TABLE items pointing to non-existant/renamed
+    *    groups).
+    */
+   return _edje_edit_parent_sc->file_set(obj, file, group);
+}
+
+EAPI Evas_Object *
+edje_edit_object_add(Evas *e)
+{
+   return evas_object_smart_add(e, _edje_edit_smart_class_new());
+}
+/* End of Edje_Edit smart stuff */
 
 
 
 
 
 static Edje_Part_Description *
-_edje_part_description_find_byname(Edje *ed, const char *part, const char *state, double value)
+_edje_part_description_find_byname(Edje_Edit *eed, const char *part, const char *state, double value)
 {
    Edje_Real_Part *rp;
    Edje_Part_Description *pd;
 
-   if (!ed || !part || !state) return NULL;
+   if (!eed || !part || !state) return NULL;
 
-   rp = _edje_real_part_get(ed, part);
+   rp = _edje_real_part_get((Edje *)eed, part);
    if (!rp) return NULL;
 
-   pd = _edje_part_description_find(ed, rp, state, value);
+   pd = _edje_part_description_find((Edje *)eed, rp, state, value);
 
    return pd;
 }
@@ -616,7 +715,7 @@ _edje_edit_group_references_update(Evas_Object *obj, const char *old_group_name,
 
    pc = ed->collection;
 
-   part_obj = edje_object_add(ed->evas);
+   part_obj = edje_edit_object_add(ed->evas);
 
    old = eina_stringshare_add(old_group_name);
 
@@ -2097,7 +2196,7 @@ edje_edit_part_selected_state_set(Evas_Object *obj, const char *part, const char
 
    GET_RP_OR_RETURN(0);
 
-   pd = _edje_part_description_find_byname(ed, part, state, value);
+   pd = _edje_part_description_find_byname(eed, part, state, value);
    if (!pd) return 0;
 
    //printf("EDJE: Set state: %s %f\n", pd->state.name, pd->state.value);
@@ -2511,7 +2610,7 @@ edje_edit_part_states_list_get(Evas_Object *obj, const char *part)
    return states;
 }
 
-EAPI int
+EAPI Eina_Bool
 edje_edit_state_name_set(Evas_Object *obj, const char *part, const char *state, double value, const char *new_name, double new_value)
 {
    int part_id;
@@ -2521,7 +2620,7 @@ edje_edit_state_name_set(Evas_Object *obj, const char *part, const char *state,
    //printf("Set name of state: %s in part: %s [new name: %s]\n",
      //     part, state, new_name);
 
-   if (!new_name) return 0;
+   if (!new_name) return EINA_FALSE;
 
    /* update programs */
    /* update the 'state' field in all programs. update only if program has
@@ -2552,7 +2651,7 @@ edje_edit_state_name_set(Evas_Object *obj, const char *part, const char *state,
    /* set value */
    pd->state.value = new_value;
 
-   return 1;
+   return EINA_TRUE;
 }
 
 EAPI void
@@ -2564,7 +2663,7 @@ edje_edit_state_del(Evas_Object *obj, const char *part, const char *state, doubl
 
    //printf("REMOVE STATE: %s IN PART: %s\n", state, part);
 
-   pd = _edje_part_description_find_byname(ed, part, state, value);
+   pd = _edje_part_description_find_byname(eed, part, state, value);
    if (!pd) return;
 
    rp->part->other_desc = eina_list_remove(rp->part->other_desc, pd);
@@ -2710,11 +2809,11 @@ edje_edit_state_copy(Evas_Object *obj, const char *part, const char *from, doubl
    Eina_List *l;
    GET_RP_OR_RETURN(0);
 
-   pdfrom = _edje_part_description_find_byname(ed, part, from, val_from);
+   pdfrom = _edje_part_description_find_byname(eed, part, from, val_from);
    if (!pdfrom)
      return 0;
 
-   pdto = _edje_part_description_find_byname(ed, part, to, val_to);
+   pdto = _edje_part_description_find_byname(eed, part, to, val_to);
    if (!pdto)
      {
        pdto = _alloc(sizeof(Edje_Part_Description));
@@ -2941,7 +3040,7 @@ edje_edit_state_rel2_relative_y_set(Evas_Object *obj, const char *part, const ch
 {
    GET_PD_OR_RETURN();
    //printf("Set rel2y of part: %s state: %s to: %f\n", part, state, y);
-   pd = _edje_part_description_find_byname(ed, part, state, value);
+   pd = _edje_part_description_find_byname(eed, part, state, value);
    //TODO check boudaries
    pd->rel2.relative_y = FROM_DOUBLE(y);
    edje_object_calc_force(obj);