Slider widget callbacks

This code snippet demonstrates how different slider callbacks work ("changed", "delay,changed", "slider,drag,start", "slider,drag,stop").
//simple helper function for creating labels in a box
Evas_Object *create_empty_label(Evas_Object*parent, Evas_Object* box) {
	Evas_Object* label = elm_label_add(parent);
	elm_object_text_set(label, "N/A");
	evas_object_size_hint_align_set(label, 0.5, EVAS_HINT_FILL);
	elm_box_pack_end(box, label);
	evas_object_show(label);
	return label;
}

//callback for "changed" and "delay,changed" event
static void slider_changed_cb(void *data, Evas_Object *obj, void *event_info) {
	double val = elm_slider_value_get(obj);
	char buf[20];
	snprintf(buf, sizeof(buf), "Value: %3.2f", val);
	elm_object_text_set(data, buf);
}

//callback for "slider,drag,start" event
static void slider_drag_start_cb(void *data, Evas_Object *obj, void *event_info) {

	elm_object_text_set(data, "Drag: active");
}

//callback for "slider,drag,stop" event
static void slider_drag_stop_cb(void *data, Evas_Object *obj, void *event_info) {
	elm_object_text_set(data, "Drag: inactive");
}
static void slider_test(appdata_s *ad) {
	//a box for our objects
	Evas_Object *box = elm_box_add(ad->win);
	evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	elm_win_resize_object_add(ad->win, box);
	evas_object_show(box);

	//create a slider
	Evas_Object *slider = elm_slider_add(ad->win);
	elm_slider_min_max_set(slider, 0, 100);
	evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_box_pack_end(box, slider);
	evas_object_show(slider);

	//create labels
	Evas_Object* status_label = create_empty_label(ad->win, box);
	Evas_Object* value_label = create_empty_label(ad->win, box);
	Evas_Object* delayed_value_label  = create_empty_label(ad->win, box);

	//register for different callbacks
	evas_object_smart_callback_add(slider, "changed", slider_changed_cb, value_label);
	evas_object_smart_callback_add(slider, "delay,changed", slider_changed_cb, delayed_value_label);
	evas_object_smart_callback_add(slider, "slider,drag,start", slider_drag_start_cb, status_label);
	evas_object_smart_callback_add(slider, "slider,drag,stop", slider_drag_stop_cb, status_label);
}

Responses

0 Replies