Опубликован: 22.12.2015 | Доступ: свободный | Студентов: 253 / 40 | Длительность: 14:40:00
Лекция 44:

Использование элемента управления Slider

< Лекция 43 || Лекция 44 || Лекция 45 >

Создание контрола Slider

Slider призван помочь пользователю вводить данные. Его можно использовать также можно использовать для сканирования плейлиста в аудио или видео плеере.

Создайте новый проект 'SliderSample.' Добавьте строчку в структуру данных.

typedef struct appdata {
	Evas_Object *win;
	Evas_Object *conform;
	Evas_Object *label;
	Evas_Object *label2;
} appdata_s;

Добавьте функцию добавления контейнера Box my_box_pack перед create_base_gui().

static void
my_box_pack(Evas_Object *box, Evas_Object *child,
double h_weight, double v_weight, double h_align, double v_align)
{
/* create a frame we shall use as padding around the child widget */
Evas_Object *frame = elm_frame_add(box);
/* use the medium padding style. there is "pad_small", "pad_medium",
* "pad_large" and "pad_huge" available as styles in addition to the
* "default" frame style */
elm_object_style_set(frame, "pad_medium");
/* set the input weight/aling on the frame insted of the child */
evas_object_size_hint_weight_set(frame, h_weight, v_weight);
evas_object_size_hint_align_set(frame, h_align, v_align);
{
/* tell the child that is packed into the frame to be able to expand */
evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/* fill the expanded area (above) as opposaed to center in it */
evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL);
/* actually put the child in the frame and show it */
evas_object_show(child);
elm_object_content_set(frame, child);
}
/* put the frame into the box instead of the child directly */
elm_box_pack_end(box, frame);
/* show the frame */
evas_object_show(frame);
}

Затем перейдите в функцию create_base_gui(), создайте контейнер Box и контрол Slider .

/* Conformant */
ad->conform = elm_conformant_add(ad->win);
elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(ad->win, ad->conform);
evas_object_show(ad->conform);
{
/* child object - indent to how relationship */
/* A box to put things in verticallly - default mode for box */
Evas_Object *box = elm_box_add(ad->win);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_content_set(ad->conform, box);
evas_object_show(box);
{
/* Label*/
ad->label = elm_label_add(ad->conform);
elm_object_text_set(ad->label, "Please test the slider below");
my_box_pack(box, ad->label, 1.0, 0.1, 0.5, 1.0);
/* Slider-1 */
Evas_Object *slider = elm_slider_add(ad->conform);
elm_slider_min_max_set(slider, 0, 100);
elm_slider_value_set(slider, 50);
my_box_pack(box, slider, 1.0, 0.1, -1.0, 0.0);
}
}
/* Show window after base gui is set up */
evas_object_show(ad->win);

elm_slider_add() - это API, создающий контрол Slider.

elm_slider_min_max_set() - это API, определяющий диапазон возможных значений в контроле Slider. Второй параметр — минимальное значение, третий параметр — максимальное значение, тип переменной - 'double.'

elm_slider_value_set() - это API, определяющий текущее значение в Slider.

Запустите проект.


Отображение индикатора в слайдере

Индикатор отображает текущее значение в слайдере. Добавьте новый код.

/* Slider-1 */
Evas_Object *slider = elm_slider_add(ad->conform);
elm_slider_min_max_set(slider, 0, 100);
elm_slider_value_set(slider, 50);
elm_slider_indicator_show_set(slider, EINA_TRUE);
elm_slider_indicator_format_set(slider, "%1.0f");
my_box_pack(box, slider, 1.0, 0.1, -1.0, 0.0);

elm_slider_indicator_show_set() - это API, определяющий отображается ли индикатор. Использование величины EINA_TRUE в качестве второго параметра отображает индикатор. Если указать EINA_FALSE, то будет противоположный эффект.

elm_slider_indicator_format_set() - это API, определяющий формат текста, отображаемого в индикаторе.

Запустите пример


Событие, отслеживающее перемещение ползунка слайдера

В этом примере мы будем запрашивать события, следящие за перемещением ползунка. Это необходимо, например, для видеоплеера. Добавьте новый код.

/* Slider-1 */
Evas_Object *slider = elm_slider_add(ad->conform);
elm_slider_min_max_set(slider, 0, 10);
elm_slider_value_set(slider, 50);
elm_slider_indicator_show_set(slider, EINA_TRUE);
elm_slider_indicator_format_set(slider, "%1.0f");
evas_object_smart_callback_add(slider, "changed", slider_changed_cb, ad);
my_box_pack(box, slider, 1.0, 0.1, -1.0, 0.0);

Использование значения 'changed' в качестве второго параметра функции evas_object_smart_callback_add() делает возможным запрос на отслеживание события перемещения ползунка. Добавьте код выше функции create_base_gui() function. Это позволит отображать изменения в метке.

static void
slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = data;
char buf[64];
double value = elm_slider_value_get(obj);
sprintf(buf, "Slider : %d", (int)value);
elm_object_text_set(ad->label, buf);
}

elm_slider_value_get() - это API, который работает в противоположность функции of elm_slider_value_set(). Он возвращает текущее значение слайдера, тип данных 'double.'

Запустите проект.


Отображение центральной точки

Для отображения центральной точки слайдера добавьте код в функцию create_base_gui().

/* Slider-1 */
Evas_Object *slider = elm_slider_add(ad->conform);
elm_slider_min_max_set(slider, 0, 100);
elm_slider_value_set(slider, 50);
elm_slider_indicator_show_set(slider, EINA_TRUE);
elm_slider_indicator_format_set(slider, "%1.0f");
evas_object_smart_callback_add(slider, "changed", slider_changed_cb, ad);
my_box_pack(box, slider, 1.0, 0.1, -1.0, 0.0);

/* Label-2 */
ad->label2 = elm_label_add(ad->conform);
elm_object_text_set(ad->label2, "Please test the slider below");
my_box_pack(box, ad->label2, 1.0, 0.1, 0.5, 1.0);
/* Slider-2 */
slider = elm_slider_add(ad->conform);
elm_slider_min_max_set(slider, 0, 9);
elm_slider_value_set(slider, 3);
elm_object_style_set(slider, "center_point");
evas_object_smart_callback_add(slider, "changed", slider2_changed_cb, ad);
my_box_pack(box, slider, 1.0, 0.1, -1.0, 0.0);
}

Мы использовали в качестве первого параметра значение the elm_object_style_set(), второй параметр - 'center_point'. Добавьте код выше функции create_base_gui().

static void
slider2_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = data;
char buf[64];
double value = elm_slider_value_get(obj);
sprintf(buf, "Slider value: %d", (int)value);
elm_object_text_set(ad->label2, buf);
}

Запустите проект


< Лекция 43 || Лекция 44 || Лекция 45 >