class Evas.Grid (Evas.Smart_Clipped)
{
   legacy_prefix: evas_object_grid;
   eo_prefix: evas_obj_grid;
   properties {
      mirrored {
         set {
            /*@
            @brief Sets the mirrored mode of the grid. In mirrored mode the grid items go
            from right to left instead of left to right. That is, 0,0 is top right, not
            to left.

            @if MOBILE @since_tizen 2.3
            @elseif WEARABLE @since_tizen 2.3.1
            @endif

            @ingroup Evas_Object_Grid

            @since 1.1 */
         }
         get {
            /*@
            @brief Gets the mirrored mode of the grid.

            @if MOBILE @since_tizen 2.3
            @elseif WEARABLE @since_tizen 2.3.1
            @endif

            @ingroup Evas_Object_Grid

            @return @c EINA_TRUE if it's a mirrored grid, @c EINA_FALSE otherwise.
            @see evas_object_grid_mirrored_set()
            @since 1.1 */
         }
         values {
            bool mirrored; /*@ the mirrored mode to set */
         }
      }
      size {
         set {
            /*@
            @brief Set the virtual resolution for the grid

            @if MOBILE @since_tizen 2.3
            @elseif WEARABLE @since_tizen 2.3.1
            @endif

            @ingroup Evas_Object_Grid

            @since 1.1 */
         }
         get {
            /*@
            @brief Get the current virtual resolution

            @if MOBILE @since_tizen 2.3
            @elseif WEARABLE @since_tizen 2.3.1
            @endif

            @ingroup Evas_Object_Grid

            @see evas_object_grid_size_set()
            @since 1.1 */
         }
         values {
            int w; /*@ The virtual horizontal size (resolution) in integer units */
            int h; /*@ The virtual vertical size (resolution) in integer units */
         }
      }
      children {
         get {
            /*@
            @brief Get the list of children for the grid.

            @if MOBILE @since_tizen 2.3
            @elseif WEARABLE @since_tizen 2.3.1
            @endif

            @ingroup Evas_Object_Grid

            @remark This is a duplicate of the list kept by the grid internally.
            It's up to the user to destroy it when it no longer needs it.
            It's possible to remove objects from the grid when walking this
            list, but these removals won't be reflected on it.
            @since 1.1 */
            return: free(own(list<Evas.Object *> *), eina_list_free) @warn_unused;
         }
      }
   }
   methods {
      accessor_new @const {
         /*@
         @brief Get an accessor to get random access to the list of children for the grid.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @remark Do not remove or delete objects while walking the list.
         @since 1.1 */
         return: free(own(accessor<Evas.Object *> *), eina_accessor_free)
            @warn_unused;
      }
      clear {
         /*@
         @brief Faster way to remove all child objects from a grid object.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @since 1.1 */

         params {
            @in bool clear; /*@ if true, it will delete just removed children. */
         }
      }
      iterator_new @const {
         /*@
         @brief Get an iterator to walk the list of children for the grid.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @remark Do not remove or delete objects while walking the list.
         @since 1.1 */
         return: free(own(iterator<Evas.Object *> *), eina_iterator_free)
            @warn_unused;
      }
      add_to {
         /*@
         @brief Create a grid that is child of a given element @a parent.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @see evas_object_grid_add()
         @since 1.1 */

         return: Evas_Object * @warn_unused;
      }
      unpack {
         /*@
         @brief Remove child from grid.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @remark removing a child will immediately call a walk over children in order
         to recalculate numbers of columns and rows. If you plan to remove
         all children, use evas_object_grid_clear() instead.

         @return 1 on success, 0 on failure.
         @since 1.1 */

         return: bool;
         params {
            @in Evas_Object *child @nonull;
         }
      }
      pack_get @const {
         /*@
         @brief Get the pack options for a grid child

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @remark Get the pack x, y, width and height in virtual coordinates set by
         evas_object_grid_pack()
         @return 1 on success, 0 on failure.
         @since 1.1 */
         return: bool;
         params {
            @in Evas_Object *child; /*@ The grid child to query for coordinates */
            @out int x; /*@ The pointer to where the x coordinate will be returned */
            @out int y; /*@ The pointer to where the y coordinate will be returned */
            @out int w; /*@ The pointer to where the width will be returned */
            @out int h; /*@ The pointer to where the height will be returned */
         }
      }
      pack {
         /*@
         @brief Add a new child to a grid object.

         @if MOBILE @since_tizen 2.3
         @elseif WEARABLE @since_tizen 2.3.1
         @endif

         @ingroup Evas_Object_Grid

         @return 1 on success, 0 on failure.
         @since 1.1 */

         return: bool;
         params {
            @in Evas_Object *child @nonull; /*@ The child object to add. */
            @in int x; /*@ The virtual x coordinate of the child */
            @in int y; /*@ The virtual y coordinate of the child */
            @in int w; /*@ The virtual width of the child */
            @in int h; /*@ The virtual height of the child */
         }
      }
   }
   implements {
      Eo.Base.constructor;
   }
}
