seoz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=c7c245da67038ae70d66b8091346a0b8503659ce

commit c7c245da67038ae70d66b8091346a0b8503659ce
Author: Daniel Juyung Seo <seojuyu...@gmail.com>
Date:   Wed Oct 30 18:56:29 2013 +0900

    elm_slider: Step set/get API additions.
    
    Issue: As step size was hard coded in the widget, when slider indicator is 
dragged
    
    using a key event or during accessibility the value was not exactly 
incremented/decremented
    
    instead same value was shown more than1 time/values were skipped.
    
    Solution: Two APIs added which will set/get step size.
    
    Reviewer: SeoZ
    Reviewer Comment: This is a manual merge of D293 due to arc issue on Shilpa.
    I modified some codes from her original code. She'll use arc next time.
     fixed documentation
     fixed typos.
     fixed indentation
     used macro
     added some guide codes.
     removed unnecessary empty line.
     updated NEWS and ChangeLog.
---
 ChangeLog                   |  4 ++++
 NEWS                        |  1 +
 src/bin/test_slider.c       | 25 ++++++++++++++++++++++++
 src/lib/elm_slider.c        | 47 +++++++++++++++++++++++++++++++++++++++++++--
 src/lib/elm_slider_eo.h     | 37 +++++++++++++++++++++++++++++++++++
 src/lib/elm_slider_legacy.h | 29 ++++++++++++++++++++++++++++
 src/lib/elm_widget_slider.h |  2 +-
 7 files changed, 142 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e99d3fd..0060f0a 100644
--- a/ChangeLog
+++ b/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/NEWS b/NEWS
index 6876073..3d59bc7 100644
--- a/NEWS
+++ b/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/src/bin/test_slider.c b/src/bin/test_slider.c
index 8d85ce7..a4b1398 100644
--- a/src/bin/test_slider.c
+++ b/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/src/lib/elm_slider.c b/src/lib/elm_slider.c
index 22a81af..0e3fb53 100755
--- a/src/lib/elm_slider.c
+++ b/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/src/lib/elm_slider_eo.h b/src/lib/elm_slider_eo.h
index 35872d6..f3373d7 100644
--- a/src/lib/elm_slider_eo.h
+++ b/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/src/lib/elm_slider_legacy.h b/src/lib/elm_slider_legacy.h
index a547b55..81e55a8 100644
--- a/src/lib/elm_slider_legacy.h
+++ b/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/src/lib/elm_widget_slider.h b/src/lib/elm_widget_slider.h
index c8ff66c..27c3bfc 100644
--- a/src/lib/elm_widget_slider.h
+++ b/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;
 

-- 


Reply via email to