elm genlist: Fixed a bug with decorate all mode + tree effect. Delete tree effect...
[framework/uifw/elementary.git] / src / lib / elm_box.h
index d3e4513..43011ab 100644 (file)
-   /**
-    * @defgroup Box Box
-    *
-    * @image html img/widget/box/preview-00.png
-    * @image latex img/widget/box/preview-00.eps width=\textwidth
-    *
-    * @image html img/box.png
-    * @image latex img/box.eps width=\textwidth
-    *
-    * A box arranges objects in a linear fashion, governed by a layout function
-    * that defines the details of this arrangement.
-    *
-    * By default, the box will use an internal function to set the layout to
-    * a single row, either vertical or horizontal. This layout is affected
-    * by a number of parameters, such as the homogeneous flag set by
-    * elm_box_homogeneous_set(), the values given by elm_box_padding_set() and
-    * elm_box_align_set() and the hints set to each object in the box.
-    *
-    * For this default layout, it's possible to change the orientation with
-    * elm_box_horizontal_set(). The box will start in the vertical orientation,
-    * placing its elements ordered from top to bottom. When horizontal is set,
-    * the order will go from left to right. If the box is set to be
-    * homogeneous, every object in it will be assigned the same space, that
-    * of the largest object. Padding can be used to set some spacing between
-    * the cell given to each object. The alignment of the box, set with
-    * elm_box_align_set(), determines how the bounding box of all the elements
-    * will be placed within the space given to the box widget itself.
-    *
-    * The size hints of each object also affect how they are placed and sized
-    * within the box. evas_object_size_hint_min_set() will give the minimum
-    * size the object can have, and the box will use it as the basis for all
-    * latter calculations. Elementary widgets set their own minimum size as
-    * needed, so there's rarely any need to use it manually.
-    *
-    * evas_object_size_hint_weight_set(), when not in homogeneous mode, is
-    * used to tell whether the object will be allocated the minimum size it
-    * needs or if the space given to it should be expanded. It's important
-    * to realize that expanding the size given to the object is not the same
-    * thing as resizing the object. It could very well end being a small
-    * widget floating in a much larger empty space. If not set, the weight
-    * for objects will normally be 0.0 for both axis, meaning the widget will
-    * not be expanded. To take as much space possible, set the weight to
-    * EVAS_HINT_EXPAND (defined to 1.0) for the desired axis to expand.
-    *
-    * Besides how much space each object is allocated, it's possible to control
-    * how the widget will be placed within that space using
-    * evas_object_size_hint_align_set(). By default, this value will be 0.5
-    * for both axis, meaning the object will be centered, but any value from
-    * 0.0 (left or top, for the @c x and @c y axis, respectively) to 1.0
-    * (right or bottom) can be used. The special value EVAS_HINT_FILL, which
-    * is -1.0, means the object will be resized to fill the entire space it
-    * was allocated.
-    *
-    * In addition, customized functions to define the layout can be set, which
-    * allow the application developer to organize the objects within the box
-    * in any number of ways.
-    *
-    * The special elm_box_layout_transition() function can be used
-    * to switch from one layout to another, animating the motion of the
-    * children of the box.
-    *
-    * @note Objects should not be added to box objects using _add() calls.
-    *
-    * Some examples on how to use boxes follow:
-    * @li @ref box_example_01
-    * @li @ref box_example_02
-    *
-    * @{
-    */
-   /**
-    * @typedef Elm_Box_Transition
-    *
-    * Opaque handler containing the parameters to perform an animated
-    * transition of the layout the box uses.
-    *
-    * @see elm_box_transition_new()
-    * @see elm_box_layout_set()
-    * @see elm_box_layout_transition()
-    */
-   typedef struct _Elm_Box_Transition Elm_Box_Transition;
+/**
+ * @defgroup Box Box
+ * @ingroup Elementary
+ *
+ * @image html img/widget/box/preview-00.png
+ * @image latex img/widget/box/preview-00.eps width=\textwidth
+ *
+ * @image html img/box.png
+ * @image latex img/box.eps width=\textwidth
+ *
+ * A box arranges objects in a linear fashion, governed by a layout function
+ * that defines the details of this arrangement.
+ *
+ * By default, the box will use an internal function to set the layout to
+ * a single row, either vertical or horizontal. This layout is affected
+ * by a number of parameters, such as the homogeneous flag set by
+ * elm_box_homogeneous_set(), the values given by elm_box_padding_set() and
+ * elm_box_align_set() and the hints set to each object in the box.
+ *
+ * For this default layout, it's possible to change the orientation with
+ * elm_box_horizontal_set(). The box will start in the vertical orientation,
+ * placing its elements ordered from top to bottom. When horizontal is set,
+ * the order will go from left to right. If the box is set to be
+ * homogeneous, every object in it will be assigned the same space, that
+ * of the largest object. Padding can be used to set some spacing between
+ * the cell given to each object. The alignment of the box, set with
+ * elm_box_align_set(), determines how the bounding box of all the elements
+ * will be placed within the space given to the box widget itself.
+ *
+ * The size hints of each object also affect how they are placed and sized
+ * within the box. evas_object_size_hint_min_set() will give the minimum
+ * size the object can have, and the box will use it as the basis for all
+ * latter calculations. Elementary widgets set their own minimum size as
+ * needed, so there's rarely any need to use it manually.
+ *
+ * evas_object_size_hint_weight_set(), when not in homogeneous mode, is
+ * used to tell whether the object will be allocated the minimum size it
+ * needs or if the space given to it should be expanded. It's important
+ * to realize that expanding the size given to the object is not the same
+ * thing as resizing the object. It could very well end being a small
+ * widget floating in a much larger empty space. If not set, the weight
+ * for objects will normally be 0.0 for both axis, meaning the widget will
+ * not be expanded. To take as much space possible, set the weight to
+ * EVAS_HINT_EXPAND (defined to 1.0) for the desired axis to expand.
+ *
+ * Besides how much space each object is allocated, it's possible to control
+ * how the widget will be placed within that space using
+ * evas_object_size_hint_align_set(). By default, this value will be 0.5
+ * for both axis, meaning the object will be centered, but any value from
+ * 0.0 (left or top, for the @c x and @c y axis, respectively) to 1.0
+ * (right or bottom) can be used. The special value EVAS_HINT_FILL, which
+ * is -1.0, means the object will be resized to fill the entire space it
+ * was allocated.
+ *
+ * In addition, customized functions to define the layout can be set, which
+ * allow the application developer to organize the objects within the box
+ * in any number of ways.
+ *
+ * The special elm_box_layout_transition() function can be used
+ * to switch from one layout to another, animating the motion of the
+ * children of the box.
+ *
+ * @note Objects should not be added to box objects using _add() calls.
+ *
+ * Some examples on how to use boxes follow:
+ * @li @ref box_example_01
+ * @li @ref box_example_02
+ *
+ * @{
+ */
+/**
+ * @typedef Elm_Box_Transition
+ *
+ * Opaque handler containing the parameters to perform an animated
+ * transition of the layout the box uses.
+ *
+ * @see elm_box_transition_new()
+ * @see elm_box_layout_set()
+ * @see elm_box_layout_transition()
+ */
+typedef struct _Elm_Box_Transition Elm_Box_Transition;
 
-   /**
-    * Add a new box to the parent
-    *
-    * By default, the box will be in vertical mode and non-homogeneous.
-    *
-    * @param parent The parent object
-    * @return The new object or NULL if it cannot be created
-    */
-   EAPI Evas_Object        *elm_box_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+/**
+ * Add a new box to the parent
+ *
+ * By default, the box will be in vertical mode and non-homogeneous.
+ *
+ * @param parent The parent object
+ * @return The new object or NULL if it cannot be created
+ *
+ * @ingroup Box
+ */
+EAPI Evas_Object        *elm_box_add(Evas_Object *parent);
 
-   /**
-    * Set the horizontal orientation
-    *
-    * By default, box object arranges their contents vertically from top to
-    * bottom.
-    * By calling this function with @p horizontal as EINA_TRUE, the box will
-    * become horizontal, arranging contents from left to right.
-    *
-    * @note This flag is ignored if a custom layout function is set.
-    *
-    * @param obj The box object
-    * @param horizontal The horizontal flag (EINA_TRUE = horizontal,
-    * EINA_FALSE = vertical)
-    */
-   EAPI void                elm_box_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
+/**
+ * Set the horizontal orientation
+ *
+ * By default, box object arranges their contents vertically from top to
+ * bottom.
+ * By calling this function with @p horizontal as EINA_TRUE, the box will
+ * become horizontal, arranging contents from left to right.
+ *
+ * @note This flag is ignored if a custom layout function is set.
+ *
+ * @param obj The box object
+ * @param horizontal The horizontal flag (EINA_TRUE = horizontal,
+ * EINA_FALSE = vertical)
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
 
-   /**
   * Get the horizontal orientation
   *
   * @param obj The box object
   * @return EINA_TRUE if the box is set to horizontal mode, EINA_FALSE otherwise
   */
-   EAPI Eina_Bool           elm_box_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * Get the horizontal orientation
+ *
+ * @param obj The box object
+ * @return EINA_TRUE if the box is set to horizontal mode, EINA_FALSE otherwise
+ */
+EAPI Eina_Bool           elm_box_horizontal_get(const Evas_Object *obj);
 
-   /**
-    * Set the box to arrange its children homogeneously
-    *
-    * If enabled, homogeneous layout makes all items the same size, according
-    * to the size of the largest of its children.
-    *
-    * @note This flag is ignored if a custom layout function is set.
-    *
-    * @param obj The box object
-    * @param homogeneous The homogeneous flag
-    */
-   EAPI void                elm_box_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
+/**
+ * Set the box to arrange its children homogeneously
+ *
+ * If enabled, homogeneous layout makes all items the same size, according
+ * to the size of the largest of its children.
+ *
+ * @note This flag is ignored if a custom layout function is set.
+ *
+ * @param obj The box object
+ * @param homogeneous The homogeneous flag
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous);
 
-   /**
-    * Get whether the box is using homogeneous mode or not
-    *
-    * @param obj The box object
-    * @return EINA_TRUE if it's homogeneous, EINA_FALSE otherwise
-    */
-   EAPI Eina_Bool           elm_box_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * Get whether the box is using homogeneous mode or not
+ *
+ * @param obj The box object
+ * @return EINA_TRUE if it's homogeneous, EINA_FALSE otherwise
+ *
+ * @ingroup Box
+ */
+EAPI Eina_Bool           elm_box_homogeneous_get(const Evas_Object *obj);
 
-   /**
-    * Add an object to the beginning of the pack list
-    *
-    * Pack @p subobj into the box @p obj, placing it first in the list of
-    * children objects. The actual position the object will get on screen
-    * depends on the layout used. If no custom layout is set, it will be at
-    * the top or left, depending if the box is vertical or horizontal,
-    * respectively.
-    *
-    * @param obj The box object
-    * @param subobj The object to add to the box
-    *
-    * @see elm_box_pack_end()
-    * @see elm_box_pack_before()
-    * @see elm_box_pack_after()
-    * @see elm_box_unpack()
-    * @see elm_box_unpack_all()
-    * @see elm_box_clear()
-    */
-   EAPI void                elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+/**
+ * Add an object to the beginning of the pack list
+ *
+ * Pack @p subobj into the box @p obj, placing it first in the list of
+ * children objects. The actual position the object will get on screen
+ * depends on the layout used. If no custom layout is set, it will be at
+ * the top or left, depending if the box is vertical or horizontal,
+ * respectively.
+ *
+ * @param obj The box object
+ * @param subobj The object to add to the box
+ *
+ * @see elm_box_pack_end()
+ * @see elm_box_pack_before()
+ * @see elm_box_pack_after()
+ * @see elm_box_unpack()
+ * @see elm_box_unpack_all()
+ * @see elm_box_clear()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj);
 
-   /**
-    * Add an object at the end of the pack list
-    *
-    * Pack @p subobj into the box @p obj, placing it last in the list of
-    * children objects. The actual position the object will get on screen
-    * depends on the layout used. If no custom layout is set, it will be at
-    * the bottom or right, depending if the box is vertical or horizontal,
-    * respectively.
-    *
-    * @param obj The box object
-    * @param subobj The object to add to the box
-    *
-    * @see elm_box_pack_start()
-    * @see elm_box_pack_before()
-    * @see elm_box_pack_after()
-    * @see elm_box_unpack()
-    * @see elm_box_unpack_all()
-    * @see elm_box_clear()
-    */
-   EAPI void                elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+/**
+ * Add an object at the end of the pack list
+ *
+ * Pack @p subobj into the box @p obj, placing it last in the list of
+ * children objects. The actual position the object will get on screen
+ * depends on the layout used. If no custom layout is set, it will be at
+ * the bottom or right, depending if the box is vertical or horizontal,
+ * respectively.
+ *
+ * @param obj The box object
+ * @param subobj The object to add to the box
+ *
+ * @see elm_box_pack_start()
+ * @see elm_box_pack_before()
+ * @see elm_box_pack_after()
+ * @see elm_box_unpack()
+ * @see elm_box_unpack_all()
+ * @see elm_box_clear()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj);
 
-   /**
-    * Adds an object to the box before the indicated object
-    *
-    * This will add the @p subobj to the box indicated before the object
-    * indicated with @p before. If @p before is not already in the box, results
-    * are undefined. Before means either to the left of the indicated object or
-    * above it depending on orientation.
-    *
-    * @param obj The box object
-    * @param subobj The object to add to the box
-    * @param before The object before which to add it
-    *
-    * @see elm_box_pack_start()
-    * @see elm_box_pack_end()
-    * @see elm_box_pack_after()
-    * @see elm_box_unpack()
-    * @see elm_box_unpack_all()
-    * @see elm_box_clear()
-    */
-   EAPI void                elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before) EINA_ARG_NONNULL(1);
+/**
+ * Adds an object to the box before the indicated object
+ *
+ * This will add the @p subobj to the box indicated before the object
+ * indicated with @p before. If @p before is not already in the box, results
+ * are undefined. Before means either to the left of the indicated object or
+ * above it depending on orientation.
+ *
+ * @param obj The box object
+ * @param subobj The object to add to the box
+ * @param before The object before which to add it
+ *
+ * @see elm_box_pack_start()
+ * @see elm_box_pack_end()
+ * @see elm_box_pack_after()
+ * @see elm_box_unpack()
+ * @see elm_box_unpack_all()
+ * @see elm_box_clear()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before);
 
-   /**
-    * Adds an object to the box after the indicated object
-    *
-    * This will add the @p subobj to the box indicated after the object
-    * indicated with @p after. If @p after is not already in the box, results
-    * are undefined. After means either to the right of the indicated object or
-    * below it depending on orientation.
-    *
-    * @param obj The box object
-    * @param subobj The object to add to the box
-    * @param after The object after which to add it
-    *
-    * @see elm_box_pack_start()
-    * @see elm_box_pack_end()
-    * @see elm_box_pack_before()
-    * @see elm_box_unpack()
-    * @see elm_box_unpack_all()
-    * @see elm_box_clear()
-    */
-   EAPI void                elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after) EINA_ARG_NONNULL(1);
+/**
+ * Adds an object to the box after the indicated object
+ *
+ * This will add the @p subobj to the box indicated after the object
+ * indicated with @p after. If @p after is not already in the box, results
+ * are undefined. After means either to the right of the indicated object or
+ * below it depending on orientation.
+ *
+ * @param obj The box object
+ * @param subobj The object to add to the box
+ * @param after The object after which to add it
+ *
+ * @see elm_box_pack_start()
+ * @see elm_box_pack_end()
+ * @see elm_box_pack_before()
+ * @see elm_box_unpack()
+ * @see elm_box_unpack_all()
+ * @see elm_box_clear()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after);
 
-   /**
-    * Clear the box of all children
-    *
-    * Remove all the elements contained by the box, deleting the respective
-    * objects.
-    *
-    * @param obj The box object
-    *
-    * @see elm_box_unpack()
-    * @see elm_box_unpack_all()
-    */
-   EAPI void                elm_box_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * Clear the box of all children
+ *
+ * Remove all the elements contained by the box, deleting the respective
+ * objects.
+ *
+ * @param obj The box object
+ *
+ * @see elm_box_unpack()
+ * @see elm_box_unpack_all()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_clear(Evas_Object *obj);
 
-   /**
-    * Unpack a box item
-    *
-    * Remove the object given by @p subobj from the box @p obj without
-    * deleting it.
-    *
-    * @param obj The box object
-    *
-    * @see elm_box_unpack_all()
-    * @see elm_box_clear()
-    */
-   EAPI void                elm_box_unpack(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+/**
+ * Unpack a box item
+ *
+ * Remove the object given by @p subobj from the box @p obj without
+ * deleting it.
+ *
+ * @param obj The box object
+ * @param subobj The object to unpack
+ *
+ * @see elm_box_unpack_all()
+ * @see elm_box_clear()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_unpack(Evas_Object *obj, Evas_Object *subobj);
 
-   /**
-    * Remove all items from the box, without deleting them
-    *
-    * Clear the box from all children, but don't delete the respective objects.
-    * If no other references of the box children exist, the objects will never
-    * be deleted, and thus the application will leak the memory. Make sure
-    * when using this function that you hold a reference to all the objects
-    * in the box @p obj.
-    *
-    * @param obj The box object
-    *
-    * @see elm_box_clear()
-    * @see elm_box_unpack()
-    */
-   EAPI void                elm_box_unpack_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * Remove all items from the box, without deleting them
+ *
+ * Clear the box from all children, but don't delete the respective objects.
+ * If no other references of the box children exist, the objects will never
+ * be deleted, and thus the application will leak the memory. Make sure
+ * when using this function that you hold a reference to all the objects
+ * in the box @p obj.
+ *
+ * @param obj The box object
+ *
+ * @see elm_box_clear()
+ * @see elm_box_unpack()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_unpack_all(Evas_Object *obj);
 
-   /**
-    * Retrieve a list of the objects packed into the box
-    *
-    * Returns a new @c Eina_List with a pointer to @c Evas_Object in its nodes.
-    * The order of the list corresponds to the packing order the box uses.
-    *
-    * You must free this list with eina_list_free() once you are done with it.
-    *
-    * @param obj The box object
-    */
-   EAPI const Eina_List    *elm_box_children_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * Retrieve a list of the objects packed into the box
+ *
+ * Returns a new @c Eina_List with a pointer to @c Evas_Object in its nodes.
+ * The order of the list corresponds to the packing order the box uses.
+ *
+ * You must free this list with eina_list_free() once you are done with it.
+ *
+ * @param obj The box object
+ *
+ * @ingroup Box
+ */
+EAPI Eina_List    *elm_box_children_get(const Evas_Object *obj);
 
-   /**
-    * Set the space (padding) between the box's elements.
-    *
-    * Extra space in pixels that will be added between a box child and its
-    * neighbors after its containing cell has been calculated. This padding
-    * is set for all elements in the box, besides any possible padding that
-    * individual elements may have through their size hints.
-    *
-    * @param obj The box object
-    * @param horizontal The horizontal space between elements
-    * @param vertical The vertical space between elements
-    */
-   EAPI void                elm_box_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
+/**
+ * Set the space (padding) between the box's elements.
+ *
+ * Extra space in pixels that will be added between a box child and its
+ * neighbors after its containing cell has been calculated. This padding
+ * is set for all elements in the box, besides any possible padding that
+ * individual elements may have through their size hints.
+ *
+ * @param obj The box object
+ * @param horizontal The horizontal space between elements
+ * @param vertical The vertical space between elements
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical);
 
-   /**
-    * Get the space (padding) between the box's elements.
-    *
-    * @param obj The box object
-    * @param horizontal The horizontal space between elements
-    * @param vertical The vertical space between elements
-    *
-    * @see elm_box_padding_set()
-    */
-   EAPI void                elm_box_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
+/**
+ * Get the space (padding) between the box's elements.
+ *
+ * @param obj The box object
+ * @param horizontal The horizontal space between elements
+ * @param vertical The vertical space between elements
+ *
+ * @see elm_box_padding_set()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical);
 
-   /**
-    * Set the alignment of the whole bouding box of contents.
-    *
-    * Sets how the bounding box containing all the elements of the box, after
-    * their sizes and position has been calculated, will be aligned within
-    * the space given for the whole box widget.
-    *
-    * @param obj The box object
-    * @param horizontal The horizontal alignment of elements
-    * @param vertical The vertical alignment of elements
-    */
-   EAPI void                elm_box_align_set(Evas_Object *obj, double horizontal, double vertical) EINA_ARG_NONNULL(1);
+/**
+ * Set the alignment of the whole bounding box of contents.
+ *
+ * Sets how the bounding box containing all the elements of the box, after
+ * their sizes and position has been calculated, will be aligned within
+ * the space given for the whole box widget.
+ *
+ * @param obj The box object
+ * @param horizontal The horizontal alignment of elements
+ * @param vertical The vertical alignment of elements
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_align_set(Evas_Object *obj, double horizontal, double vertical);
 
-   /**
-    * Get the alignment of the whole bouding box of contents.
-    *
-    * @param obj The box object
-    * @param horizontal The horizontal alignment of elements
-    * @param vertical The vertical alignment of elements
-    *
-    * @see elm_box_align_set()
-    */
-   EAPI void                elm_box_align_get(const Evas_Object *obj, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
+/**
+ * Get the alignment of the whole bounding box of contents.
+ *
+ * @param obj The box object
+ * @param horizontal The horizontal alignment of elements
+ * @param vertical The vertical alignment of elements
+ *
+ * @see elm_box_align_set()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_align_get(const Evas_Object *obj, double *horizontal, double *vertical);
 
-   /**
-    * Force the box to recalculate its children packing.
-    *
-    * If any children was added or removed, box will not calculate the
-    * values immediately rather leaving it to the next main loop
-    * iteration. While this is great as it would save lots of
-    * recalculation, whenever you need to get the position of a just
-    * added item you must force recalculate before doing so.
-    *
-    * @param obj The box object.
-    */
-   EAPI void                 elm_box_recalculate(Evas_Object *obj);
+/**
+ * Force the box to recalculate its children packing.
+ *
+ * If any children was added or removed, box will not calculate the
+ * values immediately rather leaving it to the next main loop
+ * iteration. While this is great as it would save lots of
+ * recalculation, whenever you need to get the position of a just
+ * added item you must force recalculate before doing so.
+ *
+ * @param obj The box object.
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_recalculate(Evas_Object *obj);
 
-   /**
-    * Set the layout defining function to be used by the box
-    *
-    * Whenever anything changes that requires the box in @p obj to recalculate
-    * the size and position of its elements, the function @p cb will be called
-    * to determine what the layout of the children will be.
-    *
-    * Once a custom function is set, everything about the children layout
-    * is defined by it. The flags set by elm_box_horizontal_set() and
-    * elm_box_homogeneous_set() no longer have any meaning, and the values
-    * given by elm_box_padding_set() and elm_box_align_set() are up to this
-    * layout function to decide if they are used and how. These last two
-    * will be found in the @c priv parameter, of type @c Evas_Object_Box_Data,
-    * passed to @p cb. The @c Evas_Object the function receives is not the
-    * Elementary widget, but the internal Evas Box it uses, so none of the
-    * functions described here can be used on it.
-    *
-    * Any of the layout functions in @c Evas can be used here, as well as the
-    * special elm_box_layout_transition().
-    *
-    * The final @p data argument received by @p cb is the same @p data passed
-    * here, and the @p free_data function will be called to free it
-    * whenever the box is destroyed or another layout function is set.
-    *
-    * Setting @p cb to NULL will revert back to the default layout function.
-    *
-    * @param obj The box object
-    * @param cb The callback function used for layout
-    * @param data Data that will be passed to layout function
-    * @param free_data Function called to free @p data
-    *
-    * @see elm_box_layout_transition()
-    */
-   EAPI void                elm_box_layout_set(Evas_Object *obj, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data)) EINA_ARG_NONNULL(1);
+/**
+ * Set the layout defining function to be used by the box
+ *
+ * Whenever anything changes that requires the box in @p obj to recalculate
+ * the size and position of its elements, the function @p cb will be called
+ * to determine what the layout of the children will be.
+ *
+ * Once a custom function is set, everything about the children layout
+ * is defined by it. The flags set by elm_box_horizontal_set() and
+ * elm_box_homogeneous_set() no longer have any meaning, and the values
+ * given by elm_box_padding_set() and elm_box_align_set() are up to this
+ * layout function to decide if they are used and how. These last two
+ * will be found in the @c priv parameter, of type @c Evas_Object_Box_Data,
+ * passed to @p cb. The @c Evas_Object the function receives is not the
+ * Elementary widget, but the internal Evas Box it uses, so none of the
+ * functions described here can be used on it.
+ *
+ * Any of the layout functions in @c Evas can be used here, as well as the
+ * special elm_box_layout_transition().
+ *
+ * The final @p data argument received by @p cb is the same @p data passed
+ * here, and the @p free_data function will be called to free it
+ * whenever the box is destroyed or another layout function is set.
+ *
+ * Setting @p cb to NULL will revert back to the default layout function.
+ *
+ * @param obj The box object
+ * @param cb The callback function used for layout
+ * @param data Data that will be passed to layout function
+ * @param free_data Function called to free @p data
+ *
+ * @see elm_box_layout_transition()
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_layout_set(Evas_Object *obj, Evas_Object_Box_Layout cb, const void *data, Ecore_Cb free_data);
 
-   /**
-    * Special layout function that animates the transition from one layout to another
-    *
-    * Normally, when switching the layout function for a box, this will be
-    * reflected immediately on screen on the next render, but it's also
-    * possible to do this through an animated transition.
-    *
-    * This is done by creating an ::Elm_Box_Transition and setting the box
-    * layout to this function.
-    *
-    * For example:
-    * @code
-    * Elm_Box_Transition *t = elm_box_transition_new(1.0,
-    *                            evas_object_box_layout_vertical, // start
-    *                            NULL, // data for initial layout
-    *                            NULL, // free function for initial data
-    *                            evas_object_box_layout_horizontal, // end
-    *                            NULL, // data for final layout
-    *                            NULL, // free function for final data
-    *                            anim_end, // will be called when animation ends
-    *                            NULL); // data for anim_end function\
-    * elm_box_layout_set(box, elm_box_layout_transition, t,
-    *                    elm_box_transition_free);
-    * @endcode
-    *
-    * @note This function can only be used with elm_box_layout_set(). Calling
-    * it directly will not have the expected results.
-    *
-    * @see elm_box_transition_new
-    * @see elm_box_transition_free
-    * @see elm_box_layout_set
-    */
-   EAPI void                elm_box_layout_transition(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data);
+/**
+ * Special layout function that animates the transition from one layout to another
+ *
+ * Normally, when switching the layout function for a box, this will be
+ * reflected immediately on screen on the next render, but it's also
+ * possible to do this through an animated transition.
+ *
+ * This is done by creating an ::Elm_Box_Transition and setting the box
+ * layout to this function.
+ *
+ * For example:
+ * @code
+ * Elm_Box_Transition *t = elm_box_transition_new(1.0,
+ *                            evas_object_box_layout_vertical, // start
+ *                            NULL, // data for initial layout
+ *                            NULL, // free function for initial data
+ *                            evas_object_box_layout_horizontal, // end
+ *                            NULL, // data for final layout
+ *                            NULL, // free function for final data
+ *                            anim_end, // will be called when animation ends
+ *                            NULL); // data for anim_end function\
+ * elm_box_layout_set(box, elm_box_layout_transition, t,
+ *                    elm_box_transition_free);
+ * @endcode
+ *
+ * @note This function can only be used with elm_box_layout_set(). Calling
+ * it directly will not have the expected results.
+ *
+ * @see elm_box_transition_new
+ * @see elm_box_transition_free
+ * @see elm_box_layout_set
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_layout_transition(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data);
 
-   /**
-    * Create a new ::Elm_Box_Transition to animate the switch of layouts
-    *
-    * If you want to animate the change from one layout to another, you need
-    * to set the layout function of the box to elm_box_layout_transition(),
-    * passing as user data to it an instance of ::Elm_Box_Transition with the
-    * necessary information to perform this animation. The free function to
-    * set for the layout is elm_box_transition_free().
-    *
-    * The parameters to create an ::Elm_Box_Transition sum up to how long
-    * will it be, in seconds, a layout function to describe the initial point,
-    * another for the final position of the children and one function to be
-    * called when the whole animation ends. This last function is useful to
-    * set the definitive layout for the box, usually the same as the end
-    * layout for the animation, but could be used to start another transition.
-    *
-    * @param start_layout The layout function that will be used to start the animation
-    * @param start_layout_data The data to be passed the @p start_layout function
-    * @param start_layout_free_data Function to free @p start_layout_data
-    * @param end_layout The layout function that will be used to end the animation
-    * @param end_layout_free_data The data to be passed the @p end_layout function
-    * @param end_layout_free_data Function to free @p end_layout_data
-    * @param transition_end_cb Callback function called when animation ends
-    * @param transition_end_data Data to be passed to @p transition_end_cb
-    * @return An instance of ::Elm_Box_Transition
-    *
-    * @see elm_box_transition_new
-    * @see elm_box_layout_transition
-    */
-   EAPI Elm_Box_Transition *elm_box_transition_new(const double duration, Evas_Object_Box_Layout start_layout, void *start_layout_data, void(*start_layout_free_data)(void *data), Evas_Object_Box_Layout end_layout, void *end_layout_data, void(*end_layout_free_data)(void *data), void(*transition_end_cb)(void *data), void *transition_end_data) EINA_ARG_NONNULL(2, 5);
+/**
+ * Create a new ::Elm_Box_Transition to animate the switch of layouts
+ *
+ * If you want to animate the change from one layout to another, you need
+ * to set the layout function of the box to elm_box_layout_transition(),
+ * passing as user data to it an instance of ::Elm_Box_Transition with the
+ * necessary information to perform this animation. The free function to
+ * set for the layout is elm_box_transition_free().
+ *
+ * The parameters to create an ::Elm_Box_Transition sum up to how long
+ * will it be, in seconds, a layout function to describe the initial point,
+ * another for the final position of the children and one function to be
+ * called when the whole animation ends. This last function is useful to
+ * set the definitive layout for the box, usually the same as the end
+ * layout for the animation, but could be used to start another transition.
+ *
+ * @param duration The duration of the transition in seconds
+ * @param start_layout The layout function that will be used to start the animation
+ * @param start_layout_data The data to be passed the @p start_layout function
+ * @param start_layout_free_data Function to free @p start_layout_data
+ * @param end_layout The layout function that will be used to end the animation
+ * @param end_layout_data Data param passed to @p end_layout
+ * @param end_layout_free_data The data to be passed the @p end_layout function
+ * @param end_layout_free_data Function to free @p end_layout_data
+ * @param transition_end_cb Callback function called when animation ends
+ * @param transition_end_data Data to be passed to @p transition_end_cb
+ * @return An instance of ::Elm_Box_Transition
+ *
+ * @see elm_box_transition_new
+ * @see elm_box_layout_transition
+ *
+ * @ingroup Box
+ */
+EAPI Elm_Box_Transition *elm_box_transition_new(const double duration, Evas_Object_Box_Layout start_layout, void *start_layout_data, Ecore_Cb start_layout_free_data, Evas_Object_Box_Layout end_layout, void *end_layout_data, Ecore_Cb end_layout_free_data, Ecore_Cb transition_end_cb, void *transition_end_data);
 
-   /**
-    * Free a Elm_Box_Transition instance created with elm_box_transition_new().
-    *
-    * This function is mostly useful as the @c free_data parameter in
-    * elm_box_layout_set() when elm_box_layout_transition().
-    *
-    * @param data The Elm_Box_Transition instance to be freed.
-    *
-    * @see elm_box_transition_new
-    * @see elm_box_layout_transition
-    */
-   EAPI void                elm_box_transition_free(void *data);
-
-   /**
-    * @}
-    */
+/**
+ * Free a Elm_Box_Transition instance created with elm_box_transition_new().
+ *
+ * This function is mostly useful as the @c free_data parameter in
+ * elm_box_layout_set() when elm_box_layout_transition().
+ *
+ * @param data The Elm_Box_Transition instance to be freed.
+ *
+ * @see elm_box_transition_new
+ * @see elm_box_layout_transition
+ *
+ * @ingroup Box
+ */
+EAPI void                elm_box_transition_free(void *data);
 
+/**
+ * @}
+ */