forked from enlightenment/efl
339 lines
12 KiB
C
339 lines
12 KiB
C
#ifndef _EVAS_TABLE_EO_H_
|
|
#define _EVAS_TABLE_EO_H_
|
|
|
|
#ifndef _EVAS_TABLE_EO_CLASS_TYPE
|
|
#define _EVAS_TABLE_EO_CLASS_TYPE
|
|
|
|
typedef Eo Evas_Table;
|
|
|
|
#endif
|
|
|
|
#ifndef _EVAS_TABLE_EO_TYPES
|
|
#define _EVAS_TABLE_EO_TYPES
|
|
|
|
/**
|
|
* @brief How to pack items into cells in a table.
|
|
*
|
|
* See @ref evas_obj_table_homogeneous_get for an explanation of the function
|
|
* of each one.
|
|
*
|
|
* @ingroup Evas_Object_Table
|
|
*/
|
|
typedef enum
|
|
{
|
|
EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE = 0, /**< No mode specified */
|
|
EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE = 1, /**< Table mode */
|
|
EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM = 2 /**< Item mode */
|
|
} Evas_Object_Table_Homogeneous_Mode;
|
|
|
|
|
|
#endif
|
|
/** Evas table class
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
#define EVAS_TABLE_CLASS evas_table_class_get()
|
|
|
|
EWAPI const Efl_Class *evas_table_class_get(void);
|
|
|
|
/**
|
|
* @brief Set how this table should layout children.
|
|
*
|
|
* Todo: consider aspect hint and respect it.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE If table does not use homogeneous
|
|
* mode then columns and rows will be calculated based on hints of individual
|
|
* cells. This operation mode is more flexible, but more complex and heavy to
|
|
* calculate as well. Weight properties are handled as a boolean expand.
|
|
* Negative alignment will be considered as 0.5. This is the default.
|
|
*
|
|
* Todo: @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE should balance weight.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE When homogeneous is relative to
|
|
* table the own table size is divided equally among children, filling the
|
|
* whole table area. That is, if table has @c WIDTH and @c COLUMNS, each cell
|
|
* will get _WIDTH / COLUMNS_ pixels. If children have minimum size that is
|
|
* larger than this amount (including padding), then it will overflow and be
|
|
* aligned respecting the alignment hint, possible overlapping sibling cells.
|
|
* Weight hint is used as a boolean, if greater than zero it will make the
|
|
* child expand in that axis, taking as much space as possible (bounded to
|
|
* maximum size hint). Negative alignment will be considered as 0.5.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM When homogeneous is relative to item
|
|
* it means the greatest minimum cell size will be used. That is, if no element
|
|
* is set to expand, the table will have its contents to a minimum size, the
|
|
* bounding box of all these children will be aligned relatively to the table
|
|
* object using evas_object_table_align_get(). If the table area is too small
|
|
* to hold this minimum bounding box, then the objects will keep their size and
|
|
* the bounding box will overflow the box area, still respecting the alignment.
|
|
* Weight hint is used as a boolean, if greater than zero it will make that
|
|
* cell expand in that axis, toggling the *expand mode*, which makes the table
|
|
* behave much like @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE, except that the
|
|
* bounding box will overflow and items will not overlap siblings. If no
|
|
* minimum size is provided at all then the table will fallback to expand mode
|
|
* as well.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] homogeneous Table homogeneous mode
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_homogeneous_set(Eo *obj, Evas_Object_Table_Homogeneous_Mode homogeneous);
|
|
|
|
/**
|
|
* @brief Set how this table should layout children.
|
|
*
|
|
* Todo: consider aspect hint and respect it.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE If table does not use homogeneous
|
|
* mode then columns and rows will be calculated based on hints of individual
|
|
* cells. This operation mode is more flexible, but more complex and heavy to
|
|
* calculate as well. Weight properties are handled as a boolean expand.
|
|
* Negative alignment will be considered as 0.5. This is the default.
|
|
*
|
|
* Todo: @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE should balance weight.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE When homogeneous is relative to
|
|
* table the own table size is divided equally among children, filling the
|
|
* whole table area. That is, if table has @c WIDTH and @c COLUMNS, each cell
|
|
* will get _WIDTH / COLUMNS_ pixels. If children have minimum size that is
|
|
* larger than this amount (including padding), then it will overflow and be
|
|
* aligned respecting the alignment hint, possible overlapping sibling cells.
|
|
* Weight hint is used as a boolean, if greater than zero it will make the
|
|
* child expand in that axis, taking as much space as possible (bounded to
|
|
* maximum size hint). Negative alignment will be considered as 0.5.
|
|
*
|
|
* @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM When homogeneous is relative to item
|
|
* it means the greatest minimum cell size will be used. That is, if no element
|
|
* is set to expand, the table will have its contents to a minimum size, the
|
|
* bounding box of all these children will be aligned relatively to the table
|
|
* object using evas_object_table_align_get(). If the table area is too small
|
|
* to hold this minimum bounding box, then the objects will keep their size and
|
|
* the bounding box will overflow the box area, still respecting the alignment.
|
|
* Weight hint is used as a boolean, if greater than zero it will make that
|
|
* cell expand in that axis, toggling the *expand mode*, which makes the table
|
|
* behave much like @ref EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE, except that the
|
|
* bounding box will overflow and items will not overlap siblings. If no
|
|
* minimum size is provided at all then the table will fallback to expand mode
|
|
* as well.
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Table homogeneous mode
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Evas_Object_Table_Homogeneous_Mode evas_obj_table_homogeneous_get(const Eo *obj);
|
|
|
|
/**
|
|
* @brief Control the alignment of the whole bounding box of contents.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] horizontal Horizontal alignment
|
|
* @param[in] vertical Vertical alignment
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_align_set(Eo *obj, double horizontal, double vertical);
|
|
|
|
/**
|
|
* @brief Control the alignment of the whole bounding box of contents.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[out] horizontal Horizontal alignment
|
|
* @param[out] vertical Vertical alignment
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_align_get(const Eo *obj, double *horizontal, double *vertical);
|
|
|
|
/**
|
|
* @brief Control the padding between cells.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] horizontal Horizontal padding
|
|
* @param[in] vertical Vertical padding
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_padding_set(Eo *obj, int horizontal, int vertical);
|
|
|
|
/**
|
|
* @brief Control the padding between cells.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[out] horizontal Horizontal padding
|
|
* @param[out] vertical Vertical padding
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_padding_get(const Eo *obj, int *horizontal, int *vertical);
|
|
|
|
/**
|
|
* @brief Get the number of columns and rows this table takes.
|
|
*
|
|
* @note columns and rows are virtual entities, one can specify a table with a
|
|
* single object that takes 4 columns and 5 rows. The only difference for a
|
|
* single cell table is that paddings will be accounted proportionally.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[out] cols Columns in table
|
|
* @param[out] rows Rows in table
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_col_row_size_get(const Eo *obj, int *cols, int *rows);
|
|
|
|
/**
|
|
* @brief Get the list of children for the table.
|
|
*
|
|
* @note This is a duplicate of the list kept by the table internally. It's up
|
|
* to the user to destroy it when it no longer needs it. It's possible to
|
|
* remove objects from the table when walking this list, but these removals
|
|
* won't be reflected on it.
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Children list
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_List *evas_obj_table_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
|
|
|
|
/**
|
|
* @brief Get the child of the table at the given coordinates
|
|
*
|
|
* @note This does not take into account col/row spanning
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] col Child column
|
|
* @param[in] row Child row
|
|
*
|
|
* @return Child object
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Efl_Canvas_Object *evas_obj_table_child_get(const Eo *obj, unsigned short col, unsigned short row);
|
|
|
|
/**
|
|
* @brief Faster way to remove all child objects from a table object.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] clear If @c true, it will delete just removed children.
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI void evas_obj_table_clear(Eo *obj, Eina_Bool clear);
|
|
|
|
/**
|
|
* @brief Get an accessor to get random access to the list of children for the
|
|
* table.
|
|
*
|
|
* @note Do not remove or delete objects while walking the list.
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Accessor to children list
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_Accessor *evas_obj_table_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
|
|
|
|
/**
|
|
* @brief Get an iterator to walk the list of children for the table.
|
|
*
|
|
* @note Do not remove or delete objects while walking the list.
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Iterator to children
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_Iterator *evas_obj_table_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
|
|
|
|
/**
|
|
* @brief Create a table that is child of a given element @c parent.
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Children table
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Efl_Canvas_Object *evas_obj_table_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
|
|
|
|
/**
|
|
* @brief Get packing location of a child of table
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] child The child object to add.
|
|
* @param[out] col Pointer to store relative-horizontal position to place
|
|
* child.
|
|
* @param[out] row Pointer to store relative-vertical position to place child.
|
|
* @param[out] colspan Pointer to store how many relative-horizontal positions
|
|
* to use for this child.
|
|
* @param[out] rowspan Pointer to store how many relative-vertical positions to
|
|
* use for this child.
|
|
*
|
|
* @return @c true on success, @c false on failure.
|
|
*
|
|
* @since 1.1
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_Bool evas_obj_table_pack_get(const Eo *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
|
|
|
|
/**
|
|
* @brief Add a new child to a table object or set its current packing.
|
|
*
|
|
* Note that columns and rows only guarantee 16bit unsigned values at best.
|
|
* That means that col + colspan AND row + rowspan must fit inside 16bit
|
|
* unsigned values cleanly. You will be warned once values exceed 15bit
|
|
* storage, and attempting to use values not able to fit in 16bits will result
|
|
* in failure.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] child The child object to add.
|
|
* @param[in] col Relative-horizontal position to place child.
|
|
* @param[in] row Relative-vertical position to place child.
|
|
* @param[in] colspan How many relative-horizontal positions to use for this
|
|
* child.
|
|
* @param[in] rowspan How many relative-vertical positions to use for this
|
|
* child.
|
|
*
|
|
* @return @c true on success, @c false on failure.
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_Bool evas_obj_table_pack(Eo *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(2);
|
|
|
|
/**
|
|
* @brief Remove child from table.
|
|
*
|
|
* @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 @ref evas_obj_table_clear instead.
|
|
*
|
|
* @param[in] obj The object.
|
|
* @param[in] child Child to be removed
|
|
*
|
|
* @return @c true on success, @c false on failure.
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI Eina_Bool evas_obj_table_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
|
|
|
|
/**
|
|
* @brief Returns the number of items in the table
|
|
*
|
|
* @param[in] obj The object.
|
|
*
|
|
* @return Number of items in table
|
|
*
|
|
* @ingroup Evas_Table
|
|
*/
|
|
EOAPI int evas_obj_table_count(Eo *obj);
|
|
|
|
#endif
|