diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index e99d3fd09c..0060f0ae2a 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -1731,3 +1731,7 @@ 2013-10-30 Daniel Juyung Seo (SeoZ) * conform: Added "virtualkeypad,size,changed" callback on virtualkeypad min size change. + +2013-10-30 Shilpa Onkar Singh + + * slider: Added elm_slider_step_get(), elm_slider_step_set(). diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index 6876073e54..3d59bc787a 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -102,6 +102,7 @@ Additions: * Add signals "spinner,drag,start" and "spinner,drag,stop" to the spinner widget. * Add support for "clicked" callback on Return/space/KP_Enter key press for image. * Add "virtualkeypad,size,changed" callback on virtualkeypad min size change for conformant. + * Add elm_slider_step_get(), elm_slider_step_set() for slider. Improvements: diff --git a/legacy/elementary/src/bin/test_slider.c b/legacy/elementary/src/bin/test_slider.c index 8d85ce7131..a4b13986d3 100644 --- a/legacy/elementary/src/bin/test_slider.c +++ b/legacy/elementary/src/bin/test_slider.c @@ -48,10 +48,22 @@ _bt_m1(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) elm_slider_value_set(data, elm_slider_value_get(data) - 0.1); } +static double +_step_size_calculate(double min, double max) +{ + double step = 0.0; + int steps = 0; + + steps = max - min; + if (steps) step = (1.0 / steps); + return step; +} + void test_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *win, *fr, *bx, *sl, *ic, *sl1, *bx2, *bt; + double step; char buf[PATH_MAX]; win = elm_win_util_standard_add("slider", "Slider"); @@ -88,6 +100,19 @@ test_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_box_pack_end(bx, sl); evas_object_show(sl); + sl = elm_slider_add(bx); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_indicator_format_set(sl, "%1.0f"); + elm_slider_span_size_set(sl, 120); + elm_slider_min_max_set(sl, 0, 9); + elm_object_text_set(sl, "Manual step"); + step = _step_size_calculate(0, 9); + elm_slider_step_set(sl, step); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx, sl); + evas_object_show(sl); + // normal horizontal slider ic = elm_icon_add(bx); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); diff --git a/legacy/elementary/src/lib/elm_slider.c b/legacy/elementary/src/lib/elm_slider.c index 22a81af0d8..0e3fb531a9 100755 --- a/legacy/elementary/src/lib/elm_slider.c +++ b/legacy/elementary/src/lib/elm_slider.c @@ -14,6 +14,7 @@ EAPI Eo_Op ELM_OBJ_SLIDER_BASE_ID = EO_NOOP; #define MY_CLASS_NAME "elm_slider" #define SLIDER_DELAY_CHANGED_INTERVAL 0.2 +#define SLIDER_STEP 0.05 static const Elm_Layout_Part_Alias_Description _content_aliases[] = { @@ -260,7 +261,7 @@ _drag_up(void *data, double step; ELM_SLIDER_DATA_GET(data, sd); - step = 0.05; + step = sd->step; if (sd->inverted) step *= -1.0; @@ -278,7 +279,7 @@ _drag_down(void *data, double step; ELM_SLIDER_DATA_GET(data, sd); - step = -0.05; + step = -sd->step; if (sd->inverted) step *= -1.0; @@ -821,6 +822,7 @@ _elm_slider_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) priv->horizontal = EINA_TRUE; priv->indicator_show = EINA_TRUE; priv->val_max = 1.0; + priv->step = SLIDER_STEP; if (!elm_layout_theme_set (obj, "slider", "horizontal", elm_widget_style_get(obj))) @@ -1343,6 +1345,43 @@ _elm_slider_indicator_show_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) *ret = sd->indicator_show; } +EAPI void +elm_slider_step_set(Evas_Object *obj, double step) +{ + ELM_SLIDER_CHECK(obj); + eo_do(obj, elm_obj_slider_step_set(step)); +} + +static void +_elm_slider_step_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + double step = va_arg(*list, double); + Elm_Slider_Smart_Data *sd = _pd; + if (sd->step == step) return; + + if (step < 0.0) step = 0.0; + else if (step > 1.0) step = 1.0; + + sd->step = step; +} + +EAPI double +elm_slider_step_get(const Evas_Object *obj) +{ + ELM_SLIDER_CHECK(obj) 0.0; + double ret; + eo_do((Eo *) obj, elm_obj_slider_step_get(&ret)); + return ret; +} + +static void +_elm_slider_step_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + double *ret = va_arg(*list, double *); + Elm_Slider_Smart_Data *sd = _pd; + *ret = sd->step; +} + static void _elm_slider_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) { @@ -1395,6 +1434,8 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET), _elm_slider_units_format_function_set), EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET), _elm_slider_indicator_show_set), EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET), _elm_slider_indicator_show_get), + EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_SET), _elm_slider_step_set), + EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), _elm_slider_step_get), EO_OP_FUNC_SENTINEL }; eo_class_funcs_set(klass, func_desc); @@ -1421,6 +1462,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET, "Set the format function pointer for the units label."), EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET, "Set whether to enlarge slider indicator (augmented knob) or not."), EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET, "Get whether a given slider widget's enlarging indicator or not."), + EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_SET, "Set the draggable's step size."), + EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_GET, "Get the draggable's step size."), EO_OP_DESCRIPTION_SENTINEL }; static const Eo_Class_Description class_desc = { diff --git a/legacy/elementary/src/lib/elm_slider_eo.h b/legacy/elementary/src/lib/elm_slider_eo.h index 35872d65a6..f3373d7c54 100644 --- a/legacy/elementary/src/lib/elm_slider_eo.h +++ b/legacy/elementary/src/lib/elm_slider_eo.h @@ -27,6 +27,8 @@ enum ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET, ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET, ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET, + ELM_OBJ_SLIDER_SUB_ID_STEP_SET, + ELM_OBJ_SLIDER_SUB_ID_STEP_GET, ELM_OBJ_SLIDER_SUB_ID_LAST }; @@ -289,3 +291,38 @@ enum * @ingroup Slider */ #define elm_obj_slider_indicator_show_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET), EO_TYPECHECK(Eina_Bool *, ret) + +/** + * @def elm_obj_slider_step_set + * @since 1.8 + * + * Set the step by which slider indicator will move. + * + * This value is used when draggable object is moved automatically i.e., in case + * of key event when up/down/left/right key is pressed or in case when + * accessibility is set and flick event is used to inc/dec slider values. + * By default step value is equal to 0.05. + * + * @param[in] step + * + * @see elm_slider_step_set + * + * @ingroup Slider + */ + +#define elm_obj_slider_step_set(step) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_SET), EO_TYPECHECK(double, step) + + +/** + * @def elm_obj_slider_step_get + * @since 1.8 + * + * Get the step by which slider indicator moves. + * + * @param[out] ret + * + * @see elm_slider_step_get + * + * @ingroup Slider + */ +#define elm_obj_slider_step_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), EO_TYPECHECK(double *, ret) diff --git a/legacy/elementary/src/lib/elm_slider_legacy.h b/legacy/elementary/src/lib/elm_slider_legacy.h index a547b5550a..81e55a81fb 100644 --- a/legacy/elementary/src/lib/elm_slider_legacy.h +++ b/legacy/elementary/src/lib/elm_slider_legacy.h @@ -328,3 +328,32 @@ EAPI void elm_slider_indicator_show_set(Evas_Object *obj * @ingroup Slider */ EAPI Eina_Bool elm_slider_indicator_show_get(const Evas_Object *obj); + +/** + * Set the step by which slider indicator will move. + * + * @param obj The slider object. + * @param step The step value. + * + * This value is used when draggable object is moved automatically i.e., in case + * of key event when up/down/left/right key is pressed or in case when + * accessibility is set and flick event is used to inc/dec slider values. + * By default step value is equal to 0.05. + * + * @see elm_slider_step_get() for more details. + * + * @ingroup Slider + */ +EAPI void elm_slider_step_set(Evas_Object *obj, double step); + +/** + * Get the step by which slider indicator moves. + * + * @param obj The slider object. + * @return The step value. + * + * @see elm_slider_step_set() for more details. + * + * @ingroup Slider + */ +EAPI double elm_slider_step_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/elm_widget_slider.h b/legacy/elementary/src/lib/elm_widget_slider.h index c8ff66cadb..27c3bfc488 100644 --- a/legacy/elementary/src/lib/elm_widget_slider.h +++ b/legacy/elementary/src/lib/elm_widget_slider.h @@ -32,7 +32,7 @@ struct _Elm_Slider_Smart_Data char *(*units_format_func)(double val); void (*units_format_free)(char *str); - double val, val_min, val_max, val2; + double val, val_min, val_max, val2, step; Evas_Coord size; Evas_Coord downx, downy;