Gengrid
The gengrid UI component is based on the same idea as genlist. It aims to display objects on a grid layout and render only the visible ones. For more information, see the Gengrid API.
To save memory and speed up processing when many items exist, the gengrid uses the concept of “realization” when managing items. It means that a gengrid item creates its text and content (realizes) when the user scrolls the grid and the item shows up on the screen, and frees them (unrealizes) when the item is scrolled out of the screen. To enable the item realization, you must create and fill an Elm_Gengrid_Item_Class
structure (gengrid item class) that informs the gengrid component which callbacks to call when an item is created or deleted. When the item is created, the text and content are retrieved by calling the text_get
and content_get
functions defined in the gengrid item class.
Basic usage
To use a gengrid component in your application:
-
Add a gengrid with the
elm_gengrid_add()
function:Evas_Object *gengrid; gengrid = elm_gengrid_add(parent);
-
Define the gengrid item class:
-
Create a gengrid item class with the
elm_gengrid_item_class_new()
function, set a style to the item class, and register the callback functions.The gengrid item class must be freed manually with
elm_gengrid_item_class_free()
after all items are appended:Elm_Gengrid_Item_Class *itc = elm_gengrid_item_class_new(); itc->item_style = "default"; itc->func.text_get = _item_label_get; itc->func.content_get = _item_content_get; itc->func.del = _item_del;
-
Define the
text_get
function.When a gengrid item becomes realized, the
text_get
function is called repeatedly for all text parts in that item. After the text is set to the part, it is freed automatically and thus manual intervention is not needed:static char* _item_label_get(void *data, Evas_Object *obj, const char *part) { if (!strcmp(part, "elm.text")) return strdup("text"); else return NULL; }
-
Define the
content_get
function.The
content_get
function is called repeatedly for all swallow parts in the item. It must return a valid object handle to be set, orNULL
when no content is desired. The object is deleted by the gengrid on its deletion or when the item is unrealized:static Evas_Object* _item_content_get(void *data, Evas_Object *obj, const char *part) { if (!strcmp(part, "elm.swallow.icon")) { Evas_Object *img = elm_image_add(obj); elm_image_file_Set(img, "sample.png", NULL); return img; } else { return NULL; } }
-
Define the
del
function.This function is called when the gengrid item is deleted. It deletes any data that has been allocated at the item’s creation:
static void _item_del(void *data, Evas_Object *obj) { printf("item(%d) is now deleted", (int) data); }
-
-
Append items to the gengrid with the
elm_gengrid_item_append()
function:elm_gengrid_item_append(gengrid, /* Gengrid object */ itc, /* Gengrid item class */ (void *)i, /* Item data */ _item_selected_cb, /* "selected" callback */ (void *)i); /* Callback data */
-
Register the callback functions for the gengrid and its items.
The following example shows how to define a callback when the gengrid item is selected:
static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) { printf("item(%d) is selected", (int) data); }
Manage Gengrid items
To manage the items:
-
Add items:
- To add an item to the end of the grid, use
elm_gengrid_item_append()
. - To add an item to the beginning of the grid, use
elm_gengrid_item_prepend()
. - To insert an item before the indicated item, use
elm_gengrid_item_insert_before()
. - To insert an item after the indicated item, use
elm_gengrid_item_insert_after()
.
- To add an item to the end of the grid, use
-
Set the orientation.
A gengrid can display its items using a horizontal or vertical layout. In the horizontal layout, the items are displayed in columns from top to bottom, starting a new column when the space for the current column is filled. In the vertical layout, items are set in rows from left to right. By default, the vertical layout is used. You can set the horizontal layout as follows:
elm_gengrid_horizontal_set(gengrid, EINA_TRUE);
-
Delete items and clear the grid:
- To delete a single gengrid item, use
elm_object_item_del()
. - To clear the grid and delete all items, use
elm_gengrid_clear()
.
If a gengrid object is deleted by
evas_object_del()
, all items are deleted automatically. On item deletion, thedel()
in the item class is called. - To delete a single gengrid item, use
-
Update items.
If the content of an item changes, use
elm_gengrid_item_update()
for the gengrid to update the item. The gengrid re-realizes the item and calls the functions in the_Elm_Gengrid_Item_Class
class for it.You can also use
elm_gengrid_item_fields_update()
to update only specific parts:ELM_GENGRID_ITEM_FIELD_TEXT
ELM_GENGRID_ITEM_FIELD_CONTENT
ELM_GENGRID_ITEM_FIELD_STATE
-
Select or disable items.
To manually select an item, use
elm_gengrid_item_selected_set()
. To select multiple items, you must enable the multi-selection mode as follows:elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
To retrieve the selected item, use
elm_gengrid_selected_item_get()
. When the multi-selection mode is enabled, you can retrieve the selected items with theelm_gengrid_selected_items_get()
, which returns a list of all selected items.To disable an item manually, use
elm_object_item_disabled_set()
.
Styles
A gengrid item can have 0 or more texts, 0 or more contents, and 0 or more boolean states. The number of texts and contents depends on the Edje item theme style used for the gengrid items. In the default
Tizen gengrid item theme style, the items can have 1 content parts that can be set with the elm.swallow.icon
part names.
The following gengrid styles and related item styles are supported:
default
default
Figure: Gengrid styles
The following table provides more information on the available gengrid item styles:
Table: Gengrid item styles
Style | Sample | Text part | Swallow part |
---|---|---|---|
elm/gengrid/item/default/default |
Not Supported | elm.swallow.icon |
Callbacks
You can register callback functions connected to the following signals for a gengrid object:
Table: Gengrid callback signals
Signal | Description | event_info |
---|---|---|
activated |
The item is double-clicked or pressed (enter | return | spacebar). | Elm_Object_Item |
clicked,double |
The item is double-clicked. | Elm_Object_Item |
selected |
The item is selected. | Elm_Object_Item |
unselected |
The item is unselected. | Elm_Object_Item |
realized |
The item is created as a real evas object. | Elm_Object_Item |
unrealized |
The item is going to be unrealized. Provided content objects are deleted and the item object is deleted or put into a floating cache. | Elm_Object_Item |
drag,start,up |
The item in the grid is dragged (not scrolled) up. | Elm_Object_Item |
drag,start,down |
The item in the grid is dragged (not scrolled) down. | Elm_Object_Item |
drag,start,left |
The item in the grid is dragged (not scrolled) left. | Elm_Object_Item |
drag,start,right |
The item in the grid is dragged (not scrolled) right. | Elm_Object_Item |
drag,stop |
The item in the grid has stopped being dragged. | Elm_Object_Item |
drag |
The item in the grid is being dragged. | Elm_Object_Item object that contains the dragged item |
scroll,drag,start |
Dragging the content is started. | NULL |
scroll,drag,stop |
Dragging the content is stopped. | NULL |
scroll |
Scrolling is ongoing. | NULL |
edge,top |
The gengrid is scrolled to the top edge. | NULL |
edge,bottom |
The gengrid is scrolled to the bottom edge. | NULL |
edge,left |
The gengrid is scrolled to the left edge. | NULL |
edge,right |
The gengrid is scrolled to the right edge. | NULL |
moved |
The item is moved in the reorder mode. | Elm_Object_Item object that contains the moved item |
pressed |
The item is pressed by mouse down. | Elm_Object_Item object that contains the pressed item |
released |
The item is released by mouse up. | Elm_Object_Item object that contains the released item |
clicked,right |
The item is right-clicked. | Right-clicked gengrid item |
longpressed |
The item is pressed for a certain amount of time. By default, it is 1 second. | - |
changed |
The item is added, removed, resized, or moved, and the gengrid is resized or has horizontal property changes. |
- |
scroll,anim,start |
The scrolling animation starts. | - |
scroll,anim,stop |
The scrolling animation stops. | - |
scroll,page,changed |
The visible page changes. | - |
item,reorder,anim,start |
The reorder animation starts. | - |
item,reorder,anim,stop |
The reorder animation stops. | - |
NoteThe signal list in the API reference can be more extensive, but only the above signals are actually supported in Tizen.
NoteExcept as noted, this content is licensed under LGPLv2.1+.
Related information
- Dependencies
- Tizen 6.0 and Higher for Wearable