Check example

This example will show 2 checkboxes, one with just a label and the second one with both a label and an icon. This example also illustrates how to have the checkbox change the value of a variable and how to react to those changes.

We will start with the usual setup code:

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *cb, *cb2, *icon;
Eina_Bool value;
win = elm_win_util_standard_add("check", "Check");
#define EINA_TRUE
boolean value TRUE (numerical value 1)
Definition: eina_types.h:539
unsigned char Eina_Bool
Type to mimic a boolean.
Definition: eina_types.h:527
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition: eina_types.h:339
Eina_Bool elm_policy_set(unsigned int policy, int value)
Set a new policy's value (for a given policy group/identifier).
Definition: elm_main.c:1380
@ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
quit when the application's last window is closed
Definition: elm_general.h:248
@ ELM_POLICY_QUIT
under which circumstances the application should quit automatically.
Definition: elm_general.h:227
Evas_Object * elm_win_util_standard_add(const char *name, const char *title)
Adds a window object with standard setup.
Definition: efl_ui_win.c:9582
void elm_win_autodel_set(Eo *obj, Eina_Bool autodel)
Set the window's autodel state.
Definition: efl_ui_win.c:6194
Efl_Canvas_Object Evas_Object
An Evas Object handle.
Definition: Evas_Common.h:185

And now we create our first checkbox, set its label, tell it to change the value of value when the checkbox stats is changed and ask to be notified of state changes:

cb = elm_check_add(win);
elm_object_text_set(cb, "checkbox");
evas_object_smart_callback_add(cb, "changed", _print, &value);
evas_object_move(cb, 10, 10);
evas_object_resize(cb, 200, 30);
Evas_Object * elm_check_add(Evas_Object *parent)
Add a new Check object.
Definition: efl_ui_check.c:516
void elm_check_state_pointer_set(Eo *obj, Eina_Bool *statep)
Set a convenience pointer to a boolean to change.
Definition: efl_ui_check.c:387
EVAS_API void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1814
EVAS_API void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
Move the given Evas object to the given location inside its canvas' viewport.
Definition: evas_object_main.c:1171
EVAS_API void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
Changes the size of the given Evas object.
Definition: evas_object_main.c:1236
EVAS_API void evas_object_smart_callback_add(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
Add (register) a callback function to the smart event specified by event on the smart object obj.
Definition: evas_object_smart.c:1040

For our second checkbox we are going to set an icon so we need to create and icon:

evas_object_color_set(icon, 0, 255, 0, 255);
evas_object_resize(icon, 20, 20);
EVAS_API void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a)
Sets the general/main color of the given Evas object to the given one.
Definition: evas_object_main.c:2024
EVAS_API Evas * evas_object_evas_get(const Eo *eo_obj)
Get the Evas to which this object belongs to.
Definition: evas_object_main.c:2662
EVAS_API Evas_Object * evas_object_rectangle_add(Evas *e)
Adds a rectangle to the given evas.
Definition: evas_object_rectangle.c:78
Note
For simplicity we are using a rectangle as icon, but any evas object can be used.

And for our second checkbox we set the label, icon and state to true:

cb2 = elm_check_add(win);
elm_object_text_set(cb2, "another checkbox");
elm_object_part_content_set(cb2, "icon", icon);
evas_object_move(cb2, 10, 50);
evas_object_resize(cb2, 200, 30);
void elm_check_state_set(Evas_Object *obj, Eina_Bool state)
Set the on/off state of the check object.
Definition: efl_ui_check.c:372
void elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
Set the content on part of a given container widget.
Definition: elm_main.c:1562

We now do some more setup:

evas_object_resize(win, 200, 100);
return 0;
}
#define ELM_MAIN()
macro to be used after the elm_main() function
Definition: elm_general.h:556
void elm_run(void)
Run Elementary's main loop.
Definition: elm_main.c:1357

And finally implement the callback that will be called when the first checkbox's state changes. This callback will use data to print a message:

static void
_print(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
printf("check %smarked\n", *((Eina_Bool*)data) ? "" : "un");
}
Note
This work because data is value(from the main function) and value is changed when the checkbox is changed.

Our example will look like this: