Flip selector widget example

This code places an Elementary flip selector widget on a window, along with two buttons trigerring actions on it (though its API).

The selector is being populated with the following items:

static const char *lbl[] =
{
"Elementary",
"Evas",
"Eina",
"Edje",
"Eet",
"Ecore",
"Efreet",
"Eldbus"
};

Next, we create it, populating it with those items and registering two (smart) callbacks on it:

fp = elm_flipselector_add(win);
evas_object_size_hint_weight_set(fp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_smart_callback_add(fp, "underflowed", _overflow_cb, NULL);
evas_object_smart_callback_add(fp, "overflowed", _underflow_cb, NULL);
for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
elm_flipselector_item_append(fp, lbl[i], NULL, NULL);
elm_box_pack_end(bx, fp);
evas_object_show(fp);
EVAS_HINT_EXPAND
#define EVAS_HINT_EXPAND
Use with evas_object_size_hint_weight_set(), evas_object_size_hint_weight_get(), evas_object_size_hin...
Definition Evas_Common.h:297
elm_box_pack_end
void elm_box_pack_end(Elm_Box *obj, Efl_Canvas_Object *subobj)
Add an object at the end of the pack list.
Definition elm_box_eo.legacy.c:57
elm_flipselector_add
Evas_Object * elm_flipselector_add(Evas_Object *parent)
Add a new flip selector widget to the given parent Elementary (container) widget.
Definition elm_flipselector.c:659
evas_object_show
EVAS_API void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition evas_object_main.c:1814
evas_object_size_hint_weight_set
EVAS_API void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y)
Sets the hints for an object's weight.
Definition evas_object_main.c:2638
evas_object_smart_callback_add
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

Those two callbacks will take place whenever one of those smart events occur, and they will just print something to `stdout:`

void /* underflow callback */
_underflow_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
printf("Underflow!\n");
}
EINA_UNUSED
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition eina_types.h:339
Evas_Object
Efl_Canvas_Object Evas_Object
An Evas Object handle.
Definition Evas_Common.h:185
void /* overflow callback */
_overflow_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
printf("Overflow!\n");
}

Flip the sheets on the widget while looking at the items list, in the source code, and you'll get the idea of those events.

The two buttons below the flip selector will take the actions described in their labels:

bt = elm_button_add(win);
elm_object_text_set(bt, "Unselect item");
evas_object_smart_callback_add(bt, "clicked", _unsel_cb, fp);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_object_text_set(bt, "Delete item");
evas_object_smart_callback_add(bt, "clicked", _del_cb, fp);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
elm_object_event_callback_add(win, _on_keydown, fp);
elm_button_add
Evas_Object * elm_button_add(Evas_Object *parent)
Add a new button to the parent's canvas.
Definition efl_ui_button.c:459
elm_object_event_callback_add
void elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
Add a callback for input events (key up, key down, mouse wheel) on a given Elementary widget.
Definition elm_main.c:1879
void /* unselect the item shown in the flip selector */
_unsel_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Elm_Object_Item *it;
Evas_Object *fp = data;
it = elm_flipselector_selected_item_get(fp);
elm_flipselector_item_selected_set(it, EINA_FALSE);
}
EINA_FALSE
#define EINA_FALSE
boolean value FALSE (numerical value 0)
Definition eina_types.h:533
Elm_Object_Item
Eo Elm_Object_Item
An Elementary Object item handle.
Definition elm_object_item.h:6
void /* delete the item shown in the flip selector */
_del_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Elm_Object_Item *it;
Evas_Object *fp = data;
it = elm_flipselector_selected_item_get(fp);
if (it) elm_object_item_del(it);
}
elm_object_item_del
void elm_object_item_del(Eo *obj)
Delete the given item.
Definition elm_main.c:2017

Click on them to exercise those flip selector API calls. To interact with the other parts of this API, there's a command line interface, whose help string can be asked for with the 'h' key:

static const char *commands = \
"commands are:\n"
"\tn - flip to next item\n"
"\tp - flip to previous item\n"
"\tf - print first item's label\n"
"\tl - print last item's label\n"
"\ts - print selected item's label\n"
"\th - print help\n";

The 'n' and 'p' keys will exemplify elm_flipselector_flip_next() and elm_flipselector_flip_prev(), respectively. 'f' and 'l' account for elm_flipselector_first_item_get() and elm_flipselector_last_item_get(), respectively. Finally, 's' will issue elm_flipselector_selected_item_get() on our example flip selector widget.

See the full example, whose window should look like this picture:

See the full source code for this example.