Actionslider usage

For this example we are going to assume knowledge of evas smart callbacks and some basic evas object functions. Elementary is not meant to be used without evas, if you're not yet familiar with evas it probably is worth checking that out.

And now to the example, when using Elementary we start by including Elementary.h:

#include <Elementary.h>

Next we define some callbacks, they all share the same signature because they are all to be used with evas_object_smart_callback_add(). The first one just prints the selected label(in two different ways):

static void _pos_selected_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
{
printf("Selection: %s\n", (char *)event_info);
printf("Label selected: %s\n", elm_actionslider_selected_label_get(obj));
}

This next callback is a little more interesting, it makes the selected label magnetic(except if it's the center label):

static void
_position_change_magnetic_cb(void *data EINA_UNUSED, Evas_Object * obj, void *event_info)
{
if (!strcmp((char *)event_info, "left"))
elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_LEFT);
else if (!strcmp((char *)event_info, "right"))
elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_RIGHT);
}

This callback enables or disables the magnetic property of the center label:

static void
_magnet_enable_disable_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
{
if (!strcmp((char *)event_info, "left"))
elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_CENTER);
else if (!strcmp((char *)event_info, "right"))
elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_NONE);
}

And finally a callback to stop the main loop when the window is closed:

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *bx, *as;
win = elm_win_util_standard_add("actionslider", "Actionslider");
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_RIGHT);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_RIGHT);
elm_object_part_text_set(as, "left", "Snooze");
elm_object_part_text_set(as, "right", "Stop");
elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT |
evas_object_smart_callback_add(as, "pos_changed",
_position_change_magnetic_cb, NULL);
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER);
elm_object_part_text_set(as, "left", "Snooze");
elm_object_part_text_set(as, "right", "Stop");
elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT |
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER|
elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_CENTER |
elm_object_part_text_set(as, "center", "Accept");
elm_object_part_text_set(as, "right", "Reject");
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_LEFT);
elm_object_part_text_set(as, "center", "Accept");
elm_object_part_text_set(as, "right", "Reject");
elm_object_text_set(as, "Go");
evas_object_smart_callback_add(as, "pos_changed",
_position_change_magnetic_cb, NULL);
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_ALL);
elm_object_part_text_set(as, "left", "Left");
elm_object_part_text_set(as, "center", "Center");
elm_object_part_text_set(as, "right", "Right");
elm_object_text_set(as, "Go");
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER);
elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER);
elm_object_part_text_set(as, "left", "Enable");
elm_object_part_text_set(as, "center", "Magnet");
elm_object_part_text_set(as, "right", "Disable");
evas_object_smart_callback_add(as, "pos_changed",
_magnet_enable_disable_cb, NULL);
evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
elm_box_pack_end(bx, as);
evas_object_resize(win, 320, 400);
return 0;
}

To be able to create our actionsliders we need to do some setup, but this isn't really relevant here, so if you want to know about that go here.

With all that boring stuff out of the way we can proceed to creating some actionsliders.
All actionsliders are created the same way:

Next we must choose where the indicator starts, and for this one we choose the right, and set the right as magnetic:

We then set the labels for the left and right, passing NULL as an argument to any of the labels makes that position have no label.

Furthermore we mark both left and right as enabled positions, if we didn't do this all three positions would be enabled:

Having the enabled positions we now add a smart callback to change which position is magnetic, so that only the last selected position is magnetic:

And finally we set our printing callback and show the actionslider:

For our next actionslider we are going to do much as we did for the previous except we are going to have the center as the magnet(and not change it):

And another actionslider, in this one the indicator starts on the left. It has labels only in the center and right, and both positions are magnetic. Because the left doesn't have a label and is not magnetic once the indicator leaves it can't return:

Note
The greyed out area is a style.

And now an actionslider with a label in the indicator, and whose magnet properties change based on what was last selected:

Note
The greyed out area is a style.

We are almost done, this next one is just an actionslider with all positions magnetized and having every possible label:

And for our last actionslider we have one that turns the magnetic property on and off:

The example will look like this:

See the full source code here

ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
@ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
quit when the application's last window is closed
Definition: elm_general.h:248
elm_object_part_text_set
void elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
Set a text of an object.
Definition: elm_main.c:1513
ELM_ACTIONSLIDER_NONE
@ ELM_ACTIONSLIDER_NONE
No position is set.
Definition: elm_actionslider_eo.h:20
ELM_ACTIONSLIDER_CENTER
@ ELM_ACTIONSLIDER_CENTER
Center position.
Definition: elm_actionslider_eo.h:22
elm_box_add
EAPI Evas_Object * elm_box_add(Evas_Object *parent)
Add a new box to the parent.
Definition: elm_box.c:366
EINA_UNUSED
#define EINA_UNUSED
Definition: eina_types.h:321
ELM_ACTIONSLIDER_ALL
@ ELM_ACTIONSLIDER_ALL
All positions for left/center/right.
Definition: elm_actionslider_eo.h:24
elm_object_style_set
Eina_Bool elm_object_style_set(Evas_Object *obj, const char *style)
Set the style to used by a given widget.
Definition: elm_main.c:1611
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_run
void elm_run(void)
Run Elementary's main loop.
Definition: elm_main.c:1385
elm_win_util_standard_add
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:9199
ELM_ACTIONSLIDER_RIGHT
@ ELM_ACTIONSLIDER_RIGHT
Right position.
Definition: elm_actionslider_eo.h:23
elm_actionslider_add
EAPI Evas_Object * elm_actionslider_add(Evas_Object *parent)
Add a new actionslider to the parent.
Definition: elm_actionslider.c:518
evas_object_show
void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1853
EVAS_HINT_FILL
#define EVAS_HINT_FILL
Use with evas_object_size_hint_align_set(), evas_object_size_hint_align_get(), evas_object_size_hint_...
Definition: Evas_Common.h:293
EINA_TRUE
#define EINA_TRUE
Definition: eina_types.h:508
elm_policy_set
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:1408
elm_win_resize_object_add
void elm_win_resize_object_add(Eo *obj, Evas_Object *subobj)
Add subobj as a resize object of window obj.
Definition: efl_ui_win.c:8899
ELM_ACTIONSLIDER_LEFT
@ ELM_ACTIONSLIDER_LEFT
Left position.
Definition: elm_actionslider_eo.h:21
elm_win_autodel_set
void elm_win_autodel_set(Eo *obj, Eina_Bool autodel)
Set the window's autodel state.
Definition: efl_ui_win.c:6146
ELM_POLICY_QUIT
@ ELM_POLICY_QUIT
under which circumstances the application should quit automatically.
Definition: elm_general.h:227