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:

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);

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,
void *event_info EINA_UNUSED)
{
printf("Underflow!\n");
}
void /* overflow callback */
_overflow_cb(void *data 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);
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);
elm_object_event_callback_add(win, _on_keydown, fp);
void /* unselect the item shown in the flip selector */
_unsel_cb(void *data,
void *event_info EINA_UNUSED)
{
Evas_Object *fp = data;
it = elm_flipselector_selected_item_get(fp);
elm_flipselector_item_selected_set(it, EINA_FALSE);
}
void /* delete the item shown in the flip selector */
_del_cb(void *data,
void *event_info EINA_UNUSED)
{
Evas_Object *fp = data;
it = elm_flipselector_selected_item_get(fp);
if (it) elm_object_item_del(it);
}

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.

Elm_Object_Item
Eo Elm_Object_Item
Definition: elm_object_item.h:6
EINA_UNUSED
#define EINA_UNUSED
Definition: eina_types.h:321
EINA_FALSE
#define EINA_FALSE
Definition: eina_types.h:502
elm_button_add
EAPI Evas_Object * elm_button_add(Evas_Object *parent)
Add a new button to the parent's canvas.
Definition: efl_ui_button.c:477
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:292
evas_object_smart_callback_add
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:980
Evas_Object
Efl_Canvas_Object Evas_Object
Definition: Evas_Common.h:180
elm_object_item_del
void elm_object_item_del(Eo *obj)
Delete the given item.
Definition: elm_main.c:2045
evas_object_show
void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1853
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:1907
elm_flipselector_add
EAPI 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