class Evas.Grid (Evas.Smart_Clipped)
{
   legacy_prefix: evas_object_grid;
   eo_prefix: evas_obj_grid;
   methods {
      @property mirrored {
         set {
            [[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

              @since 1.1
            ]]
         }
         get {
            [[Gets the mirrored mode of the grid.

              See also @.mirrored.set

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

              @since 1.1
            ]]
         }
         values {
            mirrored: bool; [[the mirrored mode to set.]]
         }
      }
      @property size {
         set {
            [[Set the virtual resolution for the grid

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

              @since 1.1
            ]]
         }
         get {
            [[Get the current virtual resolution

              See also @.size.set

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

              @since 1.1
            ]]
         }
         values {
            w: int; [[The virtual horizontal size (resolution) in integer units.]]
            h: int; [[The virtual vertical size (resolution) in integer units.]]
         }
      }
      @property children {
         get {
            [[Get the list of children for the grid.

              Note: 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.

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

              @since 1.1
            ]]
            return: free(own(list<Evas.Object *> *), eina_list_free) @warn_unused;
         }
      }
      accessor_new @const {
         [[Get an accessor to get random access to the list of children for the grid.

           Note: Do not remove or delete objects while walking the list.

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

           @since 1.1
         ]]
         return: free(own(accessor<Evas.Object *> *), eina_accessor_free)
            @warn_unused;
      }
      clear {
         [[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

           @since 1.1
         ]]

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

           Note: Do not remove or delete objects while walking the list.

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

           @since 1.1
         ]]
         return: free(own(iterator<Evas.Object *> *), eina_iterator_free)
            @warn_unused;
      }
      add_to {
         [[Create a grid that is child of a given element parent.

           \@ref evas_object_grid_add()

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

           @since 1.1
         ]]

         return: Evas.Object * @warn_unused;
      }
      unpack {
         [[Remove child from grid.

           Note: 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.

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

           @since 1.1
         ]]

         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object * @nonull;
         }
      }
      pack_get @const {
         [[Get the pack options for a grid child

           Get the pack x, y, width and height in virtual coordinates set by
           @.pack.

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

           @since 1.1
         ]]
         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object *; [[The grid child to query for coordinates.]]
            @out x: int; [[The pointer to where the x coordinate will be returned.]]
            @out y: int; [[The pointer to where the y coordinate will be returned.]]
            @out w: int; [[The pointer to where the width will be returned.]]
            @out h: int; [[The pointer to where the height will be returned.]]
         }
      }
      pack {
         [[Add a new child to a grid object.

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

           @since 1.1
         ]]

         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object * @nonull; [[The child object to add.]]
            @in x: int; [[The virtual x coordinate of the child.]]
            @in y: int; [[The virtual y coordinate of the child.]]
            @in w: int; [[The virtual width of the child.]]
            @in h: int; [[The virtual height of the child.]]
         }
      }
   }
   implements {
      Eo.Base.constructor;
   }
}
