diff --git a/src/Makefile_Efl.am b/src/Makefile_Efl.am index 6f8266547d..fcf2095710 100644 --- a/src/Makefile_Efl.am +++ b/src/Makefile_Efl.am @@ -30,6 +30,7 @@ efl_eolian_files = \ lib/efl/interfaces/efl_vpath_file.eo \ lib/efl/interfaces/efl_vpath_core.eo \ lib/efl/interfaces/efl_vpath_file_core.eo \ + lib/efl/interfaces/efl_ui_progress.eo \ $(efl_eolian_legacy_files) \ $(NULL) diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h index 4cc909aa5c..b3276d4aaa 100644 --- a/src/lib/efl/Efl.h +++ b/src/lib/efl/Efl.h @@ -71,6 +71,7 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command; #include "interfaces/efl_text_properties.eo.h" #include "interfaces/efl_orientation.eo.h" #include "interfaces/efl_flip.eo.h" +#include "interfaces/efl_ui_progress.eo.h" /* Core interface */ #include "interfaces/efl_animator.eo.h" diff --git a/src/lib/efl/interfaces/efl_interfaces_main.c b/src/lib/efl/interfaces/efl_interfaces_main.c index 68ff6f315c..a17ff9e149 100644 --- a/src/lib/efl/interfaces/efl_interfaces_main.c +++ b/src/lib/efl/interfaces/efl_interfaces_main.c @@ -37,6 +37,7 @@ EAPI const Eo_Event_Description _EFL_GFX_PATH_CHANGED = #include "interfaces/efl_animator.eo.c" #include "interfaces/efl_orientation.eo.c" #include "interfaces/efl_flip.eo.c" +#include "interfaces/efl_ui_progress.eo.c" EAPI void __efl_internal_init(void) diff --git a/src/lib/efl/interfaces/efl_ui_progress.eo b/src/lib/efl/interfaces/efl_ui_progress.eo new file mode 100644 index 0000000000..5583776bd6 --- /dev/null +++ b/src/lib/efl/interfaces/efl_ui_progress.eo @@ -0,0 +1,63 @@ +interface Efl.Ui.Progress { + legacy_prefix: null; + methods { + @property span_size { + [[Control the (exact) length of the bar region of a given progress widget + + This sets the minimum width (when in horizontal mode) or height + (when in vertical mode) of the actual bar area of the progress + bar $obj. This in turn affects the object's minimum size. Use + this when you're not setting other size hints expanding on the + given direction (like weight and alignment hints) and you would + like it to have a specific size. + + Note: Icon, label and unit text around $obj will require their + own space, which will make $obj to require more the $size, + actually.]] + set { + } + get { + } + values { + size: int; [[The length of the progress's bar region]] + } + } + @property value { + [[Control the progress value (in percentage) on a given progress widget + + Use this call to set progress levels. + + Note: If you passes a value out of the specified range for + $val, it will be interpreted as the closest of the boundary + values in the range.]] + set { + } + get { + } + values { + val: double; [[The progress value (must be between $0.0 and 1.0)]] + } + } + @property unit_format { + [[Control the format string for a given progress widget's units label + + If $NULL is passed on $format, it will make $obj's units + area to be hidden completely. If not, it'll set the format + string for the units label's text. The units label is + provided a floating point value, so the units text is up display + at most one floating point value. Note that the units label is + optional. Use a format string such as "%1.2f meters" for + example. + + Note: The default format string for a progress is an integer + percentage, as in $"%.0f %%".]] + set { + } + get { + } + values { + units: const(char)* @nullable; [[The format string for $obj's units label]] + } + } + } +} diff --git a/src/lib/elementary/elm_progressbar.c b/src/lib/elementary/elm_progressbar.c index a001fac1ee..92e44d4002 100644 --- a/src/lib/elementary/elm_progressbar.c +++ b/src/lib/elementary/elm_progressbar.c @@ -59,6 +59,27 @@ _progress_status_free(Elm_Progress_Status *ps) eina_stringshare_del(ps->part_name); free(ps); } + +static inline Eina_Bool +_is_horizontal(Efl_Orient orientation) +{ + if (orientation == EFL_ORIENT_LEFT || + orientation == EFL_ORIENT_RIGHT) + return EINA_TRUE; + + return EINA_FALSE; +} + +static inline Eina_Bool +_is_inverted(Efl_Orient orientation) +{ + if (orientation == EFL_ORIENT_LEFT || + orientation == EFL_ORIENT_UP) + return EINA_TRUE; + + return EINA_FALSE; +} + static void _units_set(Evas_Object *obj) { @@ -98,9 +119,9 @@ _val_set(Evas_Object *obj) EINA_LIST_FOREACH(sd->progress_status, l, ps) { pos = ps->val; - if ((!rtl && sd->inverted) || - (rtl && ((!sd->horizontal && sd->inverted) || - (sd->horizontal && !sd->inverted)))) + if ((!rtl && _is_inverted(sd->orientation)) || + (rtl && ((sd->orientation == EFL_ORIENT_UP) || + (sd->orientation == EFL_ORIENT_RIGHT)))) pos = MAX_RATIO_LVL - pos; edje_object_part_drag_value_set @@ -171,7 +192,7 @@ _elm_progressbar_elm_widget_theme_apply(Eo *obj, Elm_Progressbar_Data *sd) ELM_LAYOUT_DATA_GET(obj, ld); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) eina_stringshare_replace(&ld->group, "horizontal"); else eina_stringshare_replace(&ld->group, "vertical"); @@ -189,7 +210,7 @@ _elm_progressbar_elm_widget_theme_apply(Eo *obj, Elm_Progressbar_Data *sd) if ((sd->units) && (!sd->pulse)) elm_layout_signal_emit(obj, "elm,state,units,visible", "elm"); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) evas_object_size_hint_min_set (sd->spacer, (double)sd->size * elm_widget_scale_get(obj) * elm_config_scale_get(), 1); @@ -198,8 +219,10 @@ _elm_progressbar_elm_widget_theme_apply(Eo *obj, Elm_Progressbar_Data *sd) (sd->spacer, 1, (double)sd->size * elm_widget_scale_get(obj) * elm_config_scale_get()); - if (sd->inverted) + if (_is_inverted(sd->orientation)) elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm"); + else + elm_layout_signal_emit(obj, "elm,state,inverted,off", "elm"); _units_set(obj); _val_set(obj); @@ -259,7 +282,7 @@ _elm_progressbar_evas_object_smart_add(Eo *obj, Elm_Progressbar_Data *priv) evas_obj_smart_add(eo_super(obj, MY_CLASS)); elm_widget_sub_object_parent_add(obj); - priv->horizontal = EINA_TRUE; + priv->orientation = EFL_ORIENT_RIGHT; priv->units = eina_stringshare_add("%.0f %%"); priv->val = MIN_RATIO_LVL; @@ -356,6 +379,86 @@ _elm_progressbar_pulse_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) return sd->pulse; } +EOLIAN static void +_elm_progressbar_efl_orientation_orientation_set(Eo *obj, Elm_Progressbar_Data *sd, Efl_Orient dir) +{ + sd->orientation = dir; + + elm_obj_widget_theme_apply(obj); +} + +EOLIAN static Efl_Orient +_elm_progressbar_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +{ + return sd->orientation; +} + +EOLIAN static void +_elm_progressbar_efl_ui_progress_span_size_set(Eo *obj, Elm_Progressbar_Data *sd, Evas_Coord size) +{ + if (sd->size == size) return; + + sd->size = size; + + if (_is_horizontal(sd->orientation)) + evas_object_size_hint_min_set + (sd->spacer, (double)sd->size * elm_widget_scale_get(obj) * + elm_config_scale_get(), 1); + else + evas_object_size_hint_min_set + (sd->spacer, 1, (double)sd->size * elm_widget_scale_get(obj) * + elm_config_scale_get()); + + elm_layout_sizing_eval(obj); +} + +EOLIAN static Evas_Coord +_elm_progressbar_efl_ui_progress_span_size_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +{ + return sd->size; +} + +EOLIAN static void +_elm_progressbar_efl_ui_progress_value_set(Eo *obj, Elm_Progressbar_Data *sd, double val) +{ + if (sd->val == val) return; + + elm_progressbar_part_value_set(obj, "elm.cur.progressbar", val); +} + +EOLIAN static double +_elm_progressbar_efl_ui_progress_value_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +{ + return sd->val; +} + +EOLIAN static void +_elm_progressbar_efl_ui_progress_unit_format_set(Eo *obj, Elm_Progressbar_Data *sd, const char *units) +{ + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + + eina_stringshare_replace(&sd->units, units); + if (units) + { + elm_layout_signal_emit(obj, "elm,state,units,visible", "elm"); + edje_object_message_signal_process(wd->resize_obj); + } + else + { + elm_layout_signal_emit(obj, "elm,state,units,hidden", "elm"); + edje_object_message_signal_process(wd->resize_obj); + } + + _units_set(obj); + elm_layout_sizing_eval(obj); +} + +EOLIAN static const char * +_elm_progressbar_efl_ui_progress_unit_format_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +{ + return sd->units; +} + EOLIAN static void _elm_progressbar_pulse(Eo *obj, Elm_Progressbar_Data *sd, Eina_Bool state) { @@ -420,75 +523,47 @@ _elm_progressbar_part_value_get(const Eo *obj EINA_UNUSED, Elm_Progressbar_Data return 0.0; } -EOLIAN static void -_elm_progressbar_value_set(Eo *obj, Elm_Progressbar_Data *sd, double val) +EAPI void +elm_progressbar_value_set(Elm_Progressbar *obj, double val) { - if (sd->val == val) return; - - elm_progressbar_part_value_set(obj, "elm.cur.progressbar", val); + efl_ui_progress_value_set(obj, val); } -EOLIAN static double -_elm_progressbar_value_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +EAPI double +elm_progressbar_value_get(const Elm_Progressbar *obj) { - return sd->val; + return efl_ui_progress_value_get(obj); } -EOLIAN static void -_elm_progressbar_span_size_set(Eo *obj, Elm_Progressbar_Data *sd, Evas_Coord size) +EAPI void +elm_progressbar_span_size_set(Elm_Progressbar *obj, Evas_Coord size) { - if (sd->size == size) return; - - sd->size = size; - - if (sd->horizontal) - evas_object_size_hint_min_set - (sd->spacer, (double)sd->size * elm_widget_scale_get(obj) * - elm_config_scale_get(), 1); - else - evas_object_size_hint_min_set - (sd->spacer, 1, (double)sd->size * elm_widget_scale_get(obj) * - elm_config_scale_get()); - - elm_layout_sizing_eval(obj); + efl_ui_progress_span_size_set(obj, size); } -EOLIAN static Evas_Coord -_elm_progressbar_span_size_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +EAPI Evas_Coord +elm_progressbar_span_size_get(const Elm_Progressbar *obj) { - return sd->size; + return efl_ui_progress_span_size_get(obj); } -EOLIAN static void -_elm_progressbar_unit_format_set(Eo *obj, Elm_Progressbar_Data *sd, const char *units) +EAPI void +elm_progressbar_unit_format_set(Elm_Progressbar *obj, const char *units) { - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - - eina_stringshare_replace(&sd->units, units); - if (units) - { - elm_layout_signal_emit(obj, "elm,state,units,visible", "elm"); - edje_object_message_signal_process(wd->resize_obj); - } - else - { - elm_layout_signal_emit(obj, "elm,state,units,hidden", "elm"); - edje_object_message_signal_process(wd->resize_obj); - } - - _units_set(obj); - elm_layout_sizing_eval(obj); + efl_ui_progress_unit_format_set(obj, units); } -EOLIAN static const char* -_elm_progressbar_unit_format_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +EAPI const char * +elm_progressbar_unit_format_get(const Elm_Progressbar *obj) { - return sd->units; + return efl_ui_progress_unit_format_get(obj); } -EOLIAN static void -_elm_progressbar_unit_format_function_set(Eo *obj, Elm_Progressbar_Data *sd, progressbar_func_type func, progressbar_freefunc_type free_func) +EAPI void +elm_progressbar_unit_format_function_set(Elm_Progressbar *obj, progressbar_func_type func, progressbar_freefunc_type free_func) { + ELM_PROGRESSBAR_DATA_GET(obj, sd); + sd->unit_format_func = func; sd->unit_format_free = free_func; @@ -496,46 +571,63 @@ _elm_progressbar_unit_format_function_set(Eo *obj, Elm_Progressbar_Data *sd, pro elm_layout_sizing_eval(obj); } -EOLIAN static void -_elm_progressbar_horizontal_set(Eo *obj, Elm_Progressbar_Data *sd, Eina_Bool horizontal) +static Efl_Orient +_orientation_get(Eina_Bool horizontal, Eina_Bool inverted) { - horizontal = !!horizontal; - if (sd->horizontal == horizontal) return; - - sd->horizontal = horizontal; - elm_obj_widget_theme_apply(obj); -} - -EOLIAN static Eina_Bool -_elm_progressbar_horizontal_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) -{ - return sd->horizontal; -} - -EOLIAN static void -_elm_progressbar_inverted_set(Eo *obj, Elm_Progressbar_Data *sd, Eina_Bool inverted) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - - inverted = !!inverted; - if (sd->inverted == inverted) return; - - sd->inverted = inverted; - if (sd->inverted) - elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm"); + if (horizontal) + { + if (inverted) + return EFL_ORIENT_LEFT; + else + return EFL_ORIENT_RIGHT; + } else - elm_layout_signal_emit(obj, "elm,state,inverted,off", "elm"); - - edje_object_message_signal_process(wd->resize_obj); - - _val_set(obj); - _units_set(obj); + { + if (inverted) + return EFL_ORIENT_UP; + else + return EFL_ORIENT_DOWN; + } } -EOLIAN static Eina_Bool -_elm_progressbar_inverted_get(Eo *obj EINA_UNUSED, Elm_Progressbar_Data *sd) +EAPI void +elm_progressbar_horizontal_set(Elm_Progressbar *obj, Eina_Bool horizontal) { - return sd->inverted; + Efl_Orient dir; + ELM_PROGRESSBAR_DATA_GET(obj, sd); + + dir = _orientation_get(horizontal, _is_inverted(sd->orientation)); + + efl_orientation_set(obj, dir); +} + +EAPI Eina_Bool +elm_progressbar_horizontal_get(const Elm_Progressbar *obj) +{ + Efl_Orient dir; + dir = efl_orientation_get(obj); + + return _is_horizontal(dir); +} + +EAPI void +elm_progressbar_inverted_set(Elm_Progressbar *obj, Eina_Bool inverted) +{ + Efl_Orient dir; + ELM_PROGRESSBAR_DATA_GET(obj, sd); + + dir = _orientation_get(_is_horizontal(sd->orientation), inverted); + + efl_orientation_set(obj, dir); +} + +EAPI Eina_Bool +elm_progressbar_inverted_get(const Elm_Progressbar *obj) +{ + Efl_Orient dir; + dir = efl_orientation_get(obj); + + return _is_inverted(dir); } EOLIAN static Eina_Bool diff --git a/src/lib/elementary/elm_progressbar.eo b/src/lib/elementary/elm_progressbar.eo index 1b73deb8f0..6a63403fa9 100644 --- a/src/lib/elementary/elm_progressbar.eo +++ b/src/lib/elementary/elm_progressbar.eo @@ -1,28 +1,8 @@ -class Elm.Progressbar (Elm.Layout) +class Elm.Progressbar (Elm.Layout, Efl.Ui.Progress, + Efl.Orientation) { eo_prefix: elm_obj_progressbar; methods { - @property span_size { - [[Control the (exact) length of the bar region of a given progress bar widget - - This sets the minimum width (when in horizontal mode) or height - (when in vertical mode) of the actual bar area of the progress - bar $obj. This in turn affects the object's minimum size. Use - this when you're not setting other size hints expanding on the - given direction (like weight and alignment hints) and you would - like it to have a specific size. - - Note: Icon, label and unit text around $obj will require their - own space, which will make $obj to require more the $size, - actually.]] - set { - } - get { - } - values { - size: Evas.Coord; [[The length of the progress bar's bar region]] - } - } @property pulse { [[Control whether a given progress bar widget is at "pulsing mode" or not. @@ -43,87 +23,6 @@ class Elm.Progressbar (Elm.Layout) pulse: bool; [[$true to put $obj in pulsing mode, $false to put it back to its default one]] } } - @property value { - [[Control the progress value (in percentage) on a given progress bar widget - - Use this call to set progress bar levels. - - Note: If you passes a value out of the specified range for - $val, it will be interpreted as the closest of the boundary - values in the range.]] - set { - } - get { - } - values { - val: double; [[The progress value (must be between $0.0 and 1.0)]] - } - } - @property inverted { - [[Invert a given progress bar widget's displaying values order - - A progress bar may be inverted, in which state it gets its - values inverted, with high values being on the left or top and - low values on the right or bottom, as opposed to normally have - the low values on the former and high values on the latter, - respectively, for horizontal and vertical modes.]] - set { - } - get { - } - values { - inverted: bool; [[Use $true to make $obj inverted, $false to bring it back to default, non-inverted values.]] - } - } - @property horizontal { - [[Control the orientation of a given progress bar widget - - Use this function to change how your progress bar is to be - disposed: vertically or horizontally.]] - set { - } - get { - } - values { - horizontal: bool; [[Use $true to make $obj to be horizontal, $false to make it vertical]] - } - } - @property unit_format { - [[Control the format string for a given progress bar widget's units label - - If $NULL is passed on $format, it will make $obj's units - area to be hidden completely. If not, it'll set the format - string for the units label's text. The units label is - provided a floating point value, so the units text is up display - at most one floating point value. Note that the units label is - optional. Use a format string such as "%1.2f meters" for - example. - - Note: The default format string for a progress bar is an integer - percentage, as in $"%.0f %%".]] - set { - } - get { - } - values { - units: const(char)* @nullable; [[The format string for $obj's units label]] - } - } - @property unit_format_function { - set { - [[Set the format function pointer for the units label - - Set the callback function to format the unit string. - - See: @.unit_format.set for more info on how this works. - - @since 1.7]] - } - values { - func: progressbar_func_type @nullable; [[The unit format function]] - free_func: progressbar_freefunc_type @optional; [[The freeing function for the format string.]] - } - } part_value_set { [[Set the progress value (in percentage) on a given progress bar widget for the given part name @@ -166,6 +65,10 @@ class Elm.Progressbar (Elm.Layout) Elm.Layout.text_aliases.get; Elm.Layout.content_aliases.get; Elm.Layout.sizing_eval; + Efl.Ui.Progress.span_size; + Efl.Ui.Progress.value; + Efl.Ui.Progress.unit_format; + Efl.Orientation.orientation; } events { changed; diff --git a/src/lib/elementary/elm_progressbar_legacy.h b/src/lib/elementary/elm_progressbar_legacy.h index 597973484a..ed9c12667b 100644 --- a/src/lib/elementary/elm_progressbar_legacy.h +++ b/src/lib/elementary/elm_progressbar_legacy.h @@ -11,4 +11,184 @@ */ EAPI Evas_Object *elm_progressbar_add(Evas_Object *parent); +/** + * @brief Control the (exact) length of the bar region of a given progress bar + * widget + * + * This sets the minimum width (when in horizontal mode) or height (when in + * vertical mode) of the actual bar area of the progress bar @c obj. This in + * turn affects the object's minimum size. Use this when you're not setting + * other size hints expanding on the given direction (like weight and alignment + * hints) and you would like it to have a specific size. + * + * @note Icon, label and unit text around @c obj will require their own space, + * which will make @c obj to require more the @c size, actually. + * + * @param[in] size The length of the progress bar's bar region + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_span_size_set(Evas_Object *obj, Evas_Coord size); + +/** + * @brief Control the (exact) length of the bar region of a given progress bar + * widget + * + * This sets the minimum width (when in horizontal mode) or height (when in + * vertical mode) of the actual bar area of the progress bar @c obj. This in + * turn affects the object's minimum size. Use this when you're not setting + * other size hints expanding on the given direction (like weight and alignment + * hints) and you would like it to have a specific size. + * + * @note Icon, label and unit text around @c obj will require their own space, + * which will make @c obj to require more the @c size, actually. + * + * @return The length of the progress bar's bar region + * + * @ingroup Elm_Progressbar + */ +EAPI Evas_Coord elm_progressbar_span_size_get(const Evas_Object *obj); + +/** + * @brief Control the progress value (in percentage) on a given progress bar + * widget + * + * Use this call to set progress bar levels. + * + * @note If you passes a value out of the specified range for @c val, it will + * be interpreted as the closest of the boundary values in the range. + * + * @param[in] val The progress value (must be between $0.0 and 1.0) + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_value_set(Evas_Object *obj, double val); + +/** + * @brief Control the progress value (in percentage) on a given progress bar + * widget + * + * Use this call to set progress bar levels. + * + * @note If you passes a value out of the specified range for @c val, it will + * be interpreted as the closest of the boundary values in the range. + * + * @return The progress value (must be between $0.0 and 1.0) + * + * @ingroup Elm_Progressbar + */ +EAPI double elm_progressbar_value_get(const Evas_Object *obj); + +/** + * @brief Invert a given progress bar widget's displaying values order + * + * A progress bar may be inverted, in which state it gets its values inverted, + * with high values being on the left or top and low values on the right or + * bottom, as opposed to normally have the low values on the former and high + * values on the latter, respectively, for horizontal and vertical modes. + * + * @param[in] inverted Use @c true to make @c obj inverted, @c false to bring + * it back to default, non-inverted values. + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_inverted_set(Evas_Object *obj, Eina_Bool inverted); + +/** + * @brief Invert a given progress bar widget's displaying values order + * + * A progress bar may be inverted, in which state it gets its values inverted, + * with high values being on the left or top and low values on the right or + * bottom, as opposed to normally have the low values on the former and high + * values on the latter, respectively, for horizontal and vertical modes. + * + * @return Use @c true to make @c obj inverted, @c false to bring it back to + * default, non-inverted values. + * + * @ingroup Elm_Progressbar + */ +EAPI Eina_Bool elm_progressbar_inverted_get(const Evas_Object *obj); + +/** + * @brief Control the orientation of a given progress bar widget + * + * Use this function to change how your progress bar is to be disposed: + * vertically or horizontally. + * + * @param[in] horizontal Use @c true to make @c obj to be horizontal, @c false + * to make it vertical + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_horizontal_set(Evas_Object *obj, Eina_Bool horizontal); + +/** + * @brief Control the orientation of a given progress bar widget + * + * Use this function to change how your progress bar is to be disposed: + * vertically or horizontally. + * + * @return Use @c true to make @c obj to be horizontal, @c false to make it + * vertical + * + * @ingroup Elm_Progressbar + */ +EAPI Eina_Bool elm_progressbar_horizontal_get(const Evas_Object *obj); + +/** + * @brief Control the format string for a given progress bar widget's units + * label + * + * If @c NULL is passed on @c format, it will make @c obj's units area to be + * hidden completely. If not, it'll set the format string for the units + * label's text. The units label is provided a floating point value, so the + * units text is up display at most one floating point value. Note that the + * units label is optional. Use a format string such as "%1.2f meters" for + * example. + * + * @note The default format string for a progress bar is an integer percentage, + * as in $"%.0f %%". + * + * @param[in] units The format string for @c obj's units label + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_unit_format_set(Evas_Object *obj, const char *units); + +/** + * @brief Control the format string for a given progress bar widget's units + * label + * + * If @c NULL is passed on @c format, it will make @c obj's units area to be + * hidden completely. If not, it'll set the format string for the units + * label's text. The units label is provided a floating point value, so the + * units text is up display at most one floating point value. Note that the + * units label is optional. Use a format string such as "%1.2f meters" for + * example. + * + * @note The default format string for a progress bar is an integer percentage, + * as in $"%.0f %%". + * + * @return The format string for @c obj's units label + * + * @ingroup Elm_Progressbar + */ +EAPI const char *elm_progressbar_unit_format_get(const Evas_Object *obj); + +/** + * @brief Set the format function pointer for the units label + * + * Set the callback function to format the unit string. + * + * See: @ref elm_progressbar_unit_format_set for more info on how this works. + * + * @param[in] func The unit format function + * @param[in] free_func The freeing function for the format string. + * + * @since 1.7 + * + * @ingroup Elm_Progressbar + */ +EAPI void elm_progressbar_unit_format_function_set(Evas_Object *obj, progressbar_func_type func, progressbar_freefunc_type free_func); + #include "elm_progressbar.eo.legacy.h" \ No newline at end of file diff --git a/src/lib/elementary/elm_slider.c b/src/lib/elementary/elm_slider.c index f32ddbee61..32180e866d 100644 --- a/src/lib/elementary/elm_slider.c +++ b/src/lib/elementary/elm_slider.c @@ -71,6 +71,45 @@ _delay_change(void *data) return ECORE_CALLBACK_CANCEL; } +static inline Eina_Bool +_is_horizontal(Efl_Orient orientation) +{ + if (orientation == EFL_ORIENT_LEFT || + orientation == EFL_ORIENT_RIGHT) + return EINA_TRUE; + + return EINA_FALSE; +} + +static inline Eina_Bool +_is_inverted(Efl_Orient orientation) +{ + if (orientation == EFL_ORIENT_LEFT || + orientation == EFL_ORIENT_UP) + return EINA_TRUE; + + return EINA_FALSE; +} + +static Efl_Orient +_orientation_get(Eina_Bool horizontal, Eina_Bool inverted) +{ + if (horizontal) + { + if (inverted) + return EFL_ORIENT_LEFT; + else + return EFL_ORIENT_RIGHT; + } + else + { + if (inverted) + return EFL_ORIENT_UP; + else + return EFL_ORIENT_DOWN; + } +} + static void _val_fetch(Evas_Object *obj, Eina_Bool user_event) { @@ -83,18 +122,18 @@ _val_fetch(Evas_Object *obj, Eina_Bool user_event) edje_object_part_drag_value_get (wd->resize_obj, "elm.dragable.slider", &posx, &posy); - if (sd->horizontal) pos = posx; + if (_is_horizontal(sd->orientation)) pos = posx; else pos = posy; edje_object_part_drag_value_get (wd->resize_obj, "elm.dragable2.slider", &posx2, &posy2); - if (sd->horizontal) pos2 = posx2; + if (_is_horizontal(sd->orientation)) pos2 = posx2; else pos2 = posy2; rtl = elm_widget_mirrored_get(obj); - if ((!rtl && sd->inverted) || - (rtl && ((!sd->horizontal && sd->inverted) || - (sd->horizontal && !sd->inverted)))) + if ((!rtl && _is_inverted(sd->orientation)) || + (rtl && ((sd->orientation == EFL_ORIENT_UP) || + (sd->orientation == EFL_ORIENT_RIGHT)))) { pos = 1.0 - pos; pos2 = 1.0 - pos2; @@ -153,9 +192,9 @@ _val_set(Evas_Object *obj) pos2 = 1.0; rtl = elm_widget_mirrored_get(obj); - if ((!rtl && sd->inverted) || - (rtl && ((!sd->horizontal && sd->inverted) || - (sd->horizontal && !sd->inverted)))) + if ((!rtl && _is_inverted(sd->orientation)) || + (rtl && ((sd->orientation == EFL_ORIENT_UP) || + (sd->orientation == EFL_ORIENT_RIGHT)))) { pos = 1.0 - pos; pos2 = 1.0 - pos2; @@ -351,7 +390,7 @@ _drag_up(void *data, ELM_SLIDER_DATA_GET(data, sd); step = sd->step; - if (sd->inverted) step *= -1.0; + if (_is_inverted(sd->orientation)) step *= -1.0; ELM_WIDGET_DATA_GET_OR_RETURN(data, wd); edje_object_part_drag_step @@ -369,7 +408,7 @@ _drag_down(void *data, ELM_SLIDER_DATA_GET(data, sd); step = -sd->step; - if (sd->inverted) step *= -1.0; + if (_is_inverted(sd->orientation)) step *= -1.0; ELM_WIDGET_DATA_GET_OR_RETURN(data, wd); edje_object_part_drag_step @@ -479,26 +518,34 @@ _key_action_drag(Evas_Object *obj, const char *params) if (!strcmp(dir, "left")) { - if (!sd->horizontal) return EINA_FALSE; - if (!sd->inverted) _drag_down(obj, NULL, NULL, NULL); + if (!_is_horizontal(sd->orientation)) + return EINA_FALSE; + if (!_is_inverted(sd->orientation)) + _drag_down(obj, NULL, NULL, NULL); else _drag_up(obj, NULL, NULL, NULL); } else if (!strcmp(dir, "right")) { - if (!sd->horizontal) return EINA_FALSE; - if (!sd->inverted) _drag_up(obj, NULL, NULL, NULL); + if (!_is_horizontal(sd->orientation)) + return EINA_FALSE; + if (!_is_inverted(sd->orientation)) + _drag_up(obj, NULL, NULL, NULL); else _drag_down(obj, NULL, NULL, NULL); } else if (!strcmp(dir, "up")) { - if (sd->horizontal) return EINA_FALSE; - if (sd->inverted) _drag_up(obj, NULL, NULL, NULL); + if (_is_horizontal(sd->orientation)) + return EINA_FALSE; + if (_is_inverted(sd->orientation)) + _drag_up(obj, NULL, NULL, NULL); else _drag_down(obj, NULL, NULL, NULL); } else if (!strcmp(dir, "down")) { - if (sd->horizontal) return EINA_FALSE; - if (sd->inverted) _drag_down(obj, NULL, NULL, NULL); + if (_is_horizontal(sd->orientation)) + return EINA_FALSE; + if (_is_inverted(sd->orientation)) + _drag_down(obj, NULL, NULL, NULL); else _drag_up(obj, NULL, NULL, NULL); } else return EINA_FALSE; @@ -567,13 +614,15 @@ _elm_slider_elm_widget_activate(Eo *obj, Elm_Slider_Data *sd, Elm_Activate act) if ((act == ELM_ACTIVATE_UP) || (act == ELM_ACTIVATE_RIGHT)) { - if (!sd->inverted) _drag_up(obj, NULL, NULL, NULL); + if (!_is_inverted(sd->orientation)) + _drag_up(obj, NULL, NULL, NULL); else _drag_down(obj, NULL, NULL, NULL); } else if ((act == ELM_ACTIVATE_DOWN) || (act == ELM_ACTIVATE_LEFT)) { - if (!sd->inverted) _drag_down(obj, NULL, NULL, NULL); + if (!_is_inverted(sd->orientation)) + _drag_down(obj, NULL, NULL, NULL); else _drag_up(obj, NULL, NULL, NULL); } @@ -656,7 +705,7 @@ _popup_add(Elm_Slider_Data *sd, Eo *obj, Evas_Object **popup, // XXX popup needs to adapt to theme etc. *popup = edje_object_add(evas_object_evas_get(obj)); evas_object_smart_member_add(*popup, obj); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) _elm_theme_set(elm_widget_theme_get(obj), *popup, "slider", "horizontal/popup", elm_widget_style_get(obj)); else _elm_theme_set(elm_widget_theme_get(obj), *popup, "slider", "vertical/popup", elm_widget_style_get(obj)); @@ -696,7 +745,7 @@ _elm_slider_elm_widget_theme_apply(Eo *obj, Elm_Slider_Data *sd) ELM_LAYOUT_DATA_GET(obj, ld); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) { eina_stringshare_replace(&ld->group, "horizontal"); if (sd->popup) @@ -741,7 +790,7 @@ _elm_slider_elm_widget_theme_apply(Eo *obj, Elm_Slider_Data *sd) _popup_add(sd, obj, &sd->popup2, &sd->track2, EINA_TRUE); } - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) evas_object_size_hint_min_set (sd->spacer, (double)sd->size * elm_widget_scale_get(obj) * elm_config_scale_get(), 1); @@ -755,7 +804,7 @@ _elm_slider_elm_widget_theme_apply(Eo *obj, Elm_Slider_Data *sd) else elm_layout_signal_emit(obj, "elm,slider,range,disable", "elm"); - if (sd->inverted) + if (_is_inverted(sd->orientation)) { elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm"); if (sd->popup) @@ -763,6 +812,13 @@ _elm_slider_elm_widget_theme_apply(Eo *obj, Elm_Slider_Data *sd) if (sd->popup2) edje_object_signal_emit(sd->popup2, "elm,state,inverted,on", "elm"); } + else + { + elm_layout_signal_emit(obj, "elm,state,inverted,off", "elm"); + if (sd->popup) + edje_object_signal_emit(sd->popup, "elm,state,inverted,off", "elm"); + } + if (sd->indicator_show) { elm_layout_signal_emit(obj, "elm,state,val,show", "elm"); @@ -822,7 +878,7 @@ _move_knob_on_mouse(Evas_Object *obj, double button_x, double button_y) edje_object_part_drag_value_get (wd->resize_obj, "elm.dragable2.slider", &posx2, &posy2); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) { diff1 = fabs(button_x - posx); diff2 = fabs(button_x - posx2); @@ -866,7 +922,7 @@ _spacer_down_cb(void *data, evas_object_geometry_get(sd->spacer, &x, &y, &w, &h); sd->downx = ev->canvas.x - x; sd->downy = ev->canvas.y - y; - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) { button_x = ((double)ev->canvas.x - (double)x) / (double)w; if (button_x > 1) button_x = 1; @@ -905,7 +961,8 @@ _spacer_move_cb(void *data, Evas_Coord d = 0; evas_object_geometry_get(sd->spacer, &x, &y, &w, &h); - if (sd->horizontal) d = abs(ev->cur.canvas.x - x - sd->downx); + if (_is_horizontal(sd->orientation)) + d = abs(ev->cur.canvas.x - x - sd->downx); else d = abs(ev->cur.canvas.y - y - sd->downy); if (d > (_elm_config->thumbscroll_threshold - 1)) { @@ -932,7 +989,7 @@ _spacer_move_cb(void *data, elm_slider_value_set(data, sd->val2); return; } - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) { button_x = ((double)ev->cur.canvas.x - (double)x) / (double)w; if (button_x > 1) button_x = 1; @@ -1011,7 +1068,7 @@ _elm_slider_evas_object_smart_calculate(Eo *obj, Elm_Slider_Data *sd) { elm_layout_freeze(obj); - if (sd->horizontal) + if (_is_horizontal(sd->orientation)) evas_object_size_hint_min_set (sd->spacer, (double)sd->size * elm_widget_scale_get(obj) * elm_config_scale_get(), 1); @@ -1079,7 +1136,7 @@ _elm_slider_evas_object_smart_add(Eo *obj, Elm_Slider_Data *priv) evas_obj_smart_add(eo_super(obj, MY_CLASS)); elm_widget_sub_object_parent_add(obj); - priv->horizontal = EINA_TRUE; + priv->orientation = EFL_ORIENT_RIGHT; priv->indicator_show = EINA_TRUE; priv->indicator_visible_mode = elm_config_slider_indicator_visible_mode_get(); priv->val_max = 1.0; @@ -1227,8 +1284,109 @@ _elm_slider_eo_base_constructor(Eo *obj, Elm_Slider_Data *_pd EINA_UNUSED) return obj; } +EAPI void +elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size) +{ + efl_ui_progress_span_size_set(obj, size); +} + +EAPI Evas_Coord +elm_slider_span_size_get(const Evas_Object *obj) +{ + return efl_ui_progress_span_size_get(obj); +} + +EAPI void +elm_slider_unit_format_set(Evas_Object *obj, const char *units) +{ + efl_ui_progress_unit_format_set(obj, units); +} + +EAPI const char * +elm_slider_unit_format_get(const Evas_Object *obj) +{ + return efl_ui_progress_unit_format_get(obj); +} + +EAPI void +elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) +{ + Efl_Orient dir; + ELM_SLIDER_DATA_GET(obj, sd); + + dir = _orientation_get(horizontal, _is_inverted(sd->orientation)); + + efl_orientation_set(obj, dir); +} + +EAPI Eina_Bool +elm_slider_horizontal_get(const Evas_Object *obj) +{ + Efl_Orient dir; + dir = efl_orientation_get(obj); + + return _is_horizontal(dir); +} + +EAPI void +elm_slider_value_set(Evas_Object *obj, double val) +{ + efl_ui_progress_value_set(obj, val); +} + +EAPI double +elm_slider_value_get(const Evas_Object *obj) +{ + return efl_ui_progress_value_get(obj); +} + +EAPI void +elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted) +{ + Efl_Orient dir; + ELM_SLIDER_DATA_GET(obj, sd); + + dir = _orientation_get(_is_horizontal(sd->orientation), inverted); + + efl_orientation_set(obj, dir); +} + +EAPI Eina_Bool +elm_slider_inverted_get(const Evas_Object *obj) +{ + Efl_Orient dir; + dir = efl_orientation_get(obj); + + return _is_inverted(dir); +} + +EAPI void +elm_slider_units_format_function_set(Evas_Object *obj, slider_func_type func, slider_freefunc_type free_func) +{ + ELM_SLIDER_DATA_GET(obj, sd); + + sd->units_format_func = func; + sd->units_format_free = free_func; + + evas_object_smart_changed(obj); +} + EOLIAN static void -_elm_slider_span_size_set(Eo *obj, Elm_Slider_Data *sd, Evas_Coord size) +_elm_slider_efl_orientation_orientation_set(Eo *obj, Elm_Slider_Data *sd, Efl_Orient dir) +{ + sd->orientation = dir; + + elm_obj_widget_theme_apply(obj); +} + +EOLIAN static Efl_Orient +_elm_slider_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) +{ + return sd->orientation; +} + +EOLIAN static void +_elm_slider_efl_ui_progress_span_size_set(Eo *obj, Elm_Slider_Data *sd, Evas_Coord size) { if (sd->size == size) return; sd->size = size; @@ -1254,13 +1412,13 @@ _elm_slider_span_size_set(Eo *obj, Elm_Slider_Data *sd, Evas_Coord size) } EOLIAN static Evas_Coord -_elm_slider_span_size_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) +_elm_slider_efl_ui_progress_span_size_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) { return sd->size; } EOLIAN static void -_elm_slider_unit_format_set(Eo *obj, Elm_Slider_Data *sd, const char *units) +_elm_slider_efl_ui_progress_unit_format_set(Eo *obj, Elm_Slider_Data *sd, const char *units) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); @@ -1286,8 +1444,8 @@ _elm_slider_unit_format_set(Eo *obj, Elm_Slider_Data *sd, const char *units) evas_object_smart_changed(obj); } -EOLIAN static const char* -_elm_slider_unit_format_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) +EOLIAN static const char * +_elm_slider_efl_ui_progress_unit_format_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) { return sd->units; } @@ -1305,22 +1463,6 @@ _elm_slider_indicator_format_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) return sd->indicator; } -EOLIAN static void -_elm_slider_horizontal_set(Eo *obj, Elm_Slider_Data *sd, Eina_Bool horizontal) -{ - horizontal = !!horizontal; - if (sd->horizontal == horizontal) return; - sd->horizontal = horizontal; - - elm_obj_widget_theme_apply(obj); -} - -EOLIAN static Eina_Bool -_elm_slider_horizontal_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) -{ - return sd->horizontal; -} - EOLIAN static void _elm_slider_min_max_set(Eo *obj, Elm_Slider_Data *sd, double min, double max) { @@ -1341,7 +1483,7 @@ _elm_slider_min_max_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd, double *min, d } EOLIAN static void -_elm_slider_value_set(Eo *obj, Elm_Slider_Data *sd, double val) +_elm_slider_efl_ui_progress_value_set(Eo *obj, Elm_Slider_Data *sd, double val) { if (sd->val == val) return; sd->val = val; @@ -1354,44 +1496,11 @@ _elm_slider_value_set(Eo *obj, Elm_Slider_Data *sd, double val) } EOLIAN static double -_elm_slider_value_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) +_elm_slider_efl_ui_progress_value_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) { return sd->val; } -EOLIAN static void -_elm_slider_inverted_set(Eo *obj, Elm_Slider_Data *sd, Eina_Bool inverted) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - - inverted = !!inverted; - if (sd->inverted == inverted) return; - sd->inverted = inverted; - - if (sd->inverted) - { - elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm"); - if (sd->popup) - edje_object_signal_emit(sd->popup, "elm,state,inverted,on", "elm"); - } - else - { - elm_layout_signal_emit(obj, "elm,state,inverted,off", "elm"); - if (sd->popup) - edje_object_signal_emit(sd->popup, "elm,state,inverted,off", "elm"); - } - - edje_object_message_signal_process(wd->resize_obj); - - _visuals_refresh(obj); -} - -EOLIAN static Eina_Bool -_elm_slider_inverted_get(Eo *obj EINA_UNUSED, Elm_Slider_Data *sd) -{ - return sd->inverted; -} - EOLIAN static void _elm_slider_indicator_format_function_set(Eo *obj, Elm_Slider_Data *sd, slider_func_type func, slider_freefunc_type free_func) { @@ -1400,15 +1509,6 @@ _elm_slider_indicator_format_function_set(Eo *obj, Elm_Slider_Data *sd, slider_f evas_object_smart_changed(obj); } -EOLIAN static void -_elm_slider_units_format_function_set(Eo *obj, Elm_Slider_Data *sd, slider_func_type func, slider_freefunc_type free_func) -{ - sd->units_format_func = func; - sd->units_format_free = free_func; - - evas_object_smart_changed(obj); -} - EOLIAN static void _elm_slider_indicator_show_set(Eo *obj, Elm_Slider_Data *sd, Eina_Bool show) { diff --git a/src/lib/elementary/elm_slider.eo b/src/lib/elementary/elm_slider.eo index c04b9b1a90..b5dfce5b7a 100644 --- a/src/lib/elementary/elm_slider.eo +++ b/src/lib/elementary/elm_slider.eo @@ -1,44 +1,10 @@ -class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, +class Elm.Slider (Elm.Layout, Efl.Ui.Progress, + Efl.Orientation, + Elm.Interface_Atspi_Value, Elm.Interface_Atspi_Widget_Action) { eo_prefix: elm_obj_slider; methods { - @property horizontal { - set { - [[Set the orientation of a given slider widget. - - Use this function to change how your slider is to be - disposed: vertically or horizontally. - - By default it's displayed horizontally. - ]] - } - get { - [[Get the orientation of a given slider widget.]] - } - values { - horizontal: bool; - } - } - @property value { - set { - [[Set the value the slider displays. - - Value will be presented on the unit label following format - specified with @.unit_format.set and on indicator with - @.indicator_format.set. - - Note: The value must to be between min and max values. This values - are set by @.min_max.set. - ]] - } - get { - [[Get the value displayed by the slider.]] - } - values { - val: double; [[The value to be displayed.]] - } - } @property indicator_format { set { [[Set the format string for the indicator label. @@ -71,27 +37,6 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, indicator: const(char)* @nullable; [[The format string for the indicator display.]] } } - @property inverted { - set { - [[Invert a given slider widget's displaying values order - - A slider may be inverted, in which state it gets its values - inverted, with high vales being on the left or top and low - values on the right or bottom, as opposed to normally have - the low values on the former and high values on the latter, - respectively, for horizontal and vertical modes. - ]] - } - get { - [[Get whether a given slider widget's displaying values are - inverted or not. - ]] - } - values { - inverted: bool; [[Use $true to make $obj inverted, $false to bring - it back to default, non-inverted values.]] - } - } @property indicator_show { set { [[Set whether to enlarge slider indicator (augmented knob) or not. @@ -118,7 +63,7 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, If actual value is less than $min, it will be updated to $min. If it is bigger then $max, will be updated to $max. Actual value - can be get with @.value,get. + can be get with @Efl.Ui.Progress.value.get By default, min is equal to 0.0, and max is equal to 1.0. @@ -138,36 +83,6 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, max: double; [[The maximum value.]] } } - @property unit_format { - set { - [[Set the format string for the unit label. - - Unit label is displayed all the time, if set, after slider's bar. - In horizontal mode, at right and in vertical mode, at bottom. - - If $null, unit label won't be visible. If not it sets the format - string for the label text. To the label text is provided a - floating point value, so the label text can display up to 1 - floating point value. Note that this is optional. - - Use a format string such as "%1.2f meters" for example, and it - will display values like: "3.14 meters" for a value equal to - 3.14159. - - Default is unit label disabled. - ]] - } - get { - [[Get the unit label format of the slider. - - Unit label is displayed all the time, if set, after slider's bar. - In horizontal mode, at right and in vertical mode, at bottom. - ]] - } - values { - units: const(char)* @nullable; [[The format string for the unit display.]] - } - } @property indicator_show_on_focus { set { [[Show the indicator of slider on focus.]] @@ -179,33 +94,6 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, flag: bool; } } - @property span_size { - set { - [[Set the (exact) length of the bar region of a given slider widget. - - This sets the minimum width (when in horizontal mode) or height - (when in vertical mode) of the actual bar area of the slider - $obj. This in turn affects the object's minimum size. Use - this when you're not setting other size hints expanding on the - given direction (like weight and alignment hints) and you would - like it to have a specific size. - - Note: Icon, end, label, indicator and unit text around $obj - will require their own space, which will make $obj to require - more the $size, actually. - ]] - } - get { - [[Get the length set for the bar region of a given slider widget - - If that size was not set previously, with @.span_size.set, this - call will return $0. - ]] - } - values { - size: Evas.Coord; [[The length of the slider's bar region.]] - } - } @property step { set { [[Set the step by which slider indicator will move. @@ -251,18 +139,6 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, free_func: slider_freefunc_type @nullable; [[The freeing function for the format string.]] } } - @property units_format_function { - set { - [[Set the format function pointer for the units label - - Set the callback function to format the units string. - ]] - } - values { - func: slider_func_type @nullable; [[The units format function.]] - free_func: slider_freefunc_type @nullable; [[The freeing function for the format string.]] - } - } @property range_enabled { set { [[Enables the range. This enables two indicators in slider.]] @@ -302,6 +178,10 @@ class Elm.Slider (Elm.Layout, Elm.Interface_Atspi_Value, Elm.Layout.text_aliases.get; Elm.Layout.content_aliases.get; Elm.Layout.sizing_eval; + Efl.Ui.Progress.span_size; + Efl.Ui.Progress.value; + Efl.Ui.Progress.unit_format; + Efl.Orientation.orientation; Elm.Interface_Atspi_Value.value_and_text.get; Elm.Interface_Atspi_Value.value_and_text.set; Elm.Interface_Atspi_Value.range.get; diff --git a/src/lib/elementary/elm_slider_legacy.h b/src/lib/elementary/elm_slider_legacy.h index 57cb1aa8ab..e6e67de6c5 100644 --- a/src/lib/elementary/elm_slider_legacy.h +++ b/src/lib/elementary/elm_slider_legacy.h @@ -11,4 +11,152 @@ */ EAPI Evas_Object *elm_slider_add(Evas_Object *parent); +/** + * @brief Set the orientation of a given slider widget. + * + * Use this function to change how your slider is to be disposed: vertically or + * horizontally. + * + * By default it's displayed horizontally. + * + * @param[in] horizontal + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal); + +/** Get the orientation of a given slider widget. + * + * @ingroup Elm_Slider + */ +EAPI Eina_Bool elm_slider_horizontal_get(const Evas_Object *obj); + +/** + * @brief Set the value the slider displays. + * + * Value will be presented on the unit label following format specified with + * @ref elm_slider_unit_format_set and on indicator with + * @ref elm_slider_indicator_format_set. + * + * @note The value must to be between min and max values. This values are set + * by @ref elm_slider_min_max_set. + * + * @param[in] val The value to be displayed. + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_value_set(Evas_Object *obj, double val); + +/** + * @brief Get the value displayed by the slider. + * + * @return The value to be displayed. + * + * @ingroup Elm_Slider + */ +EAPI double elm_slider_value_get(const Evas_Object *obj); + +/** + * @brief Invert a given slider widget's displaying values order + * + * A slider may be inverted, in which state it gets its values inverted, with + * high vales being on the left or top and low values on the right or bottom, + * as opposed to normally have the low values on the former and high values on + * the latter, respectively, for horizontal and vertical modes. + * + * @param[in] inverted Use @c true to make @c obj inverted, @c false to bring + * it back to default, non-inverted values. + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted); + +/** + * @brief Get whether a given slider widget's displaying values are inverted or + * not. + * + * @return Use @c true to make @c obj inverted, @c false to bring it back to + * default, non-inverted values. + * + * @ingroup Elm_Slider + */ +EAPI Eina_Bool elm_slider_inverted_get(const Evas_Object *obj); + +/** + * @brief Set the (exact) length of the bar region of a given slider widget. + * + * This sets the minimum width (when in horizontal mode) or height (when in + * vertical mode) of the actual bar area of the slider @c obj. This in turn + * affects the object's minimum size. Use this when you're not setting other + * size hints expanding on the given direction (like weight and alignment + * hints) and you would like it to have a specific size. + * + * @note Icon, end, label, indicator and unit text around @c obj will require + * their own space, which will make @c obj to require more the @c size, + * actually. + * + * @param[in] size The length of the slider's bar region. + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size); + +/** + * @brief Get the length set for the bar region of a given slider widget + * + * If that size was not set previously, with @ref elm_slider_span_size_set, + * this call will return $0. + * + * @return The length of the slider's bar region. + * + * @ingroup Elm_Slider + */ +EAPI Evas_Coord elm_slider_span_size_get(const Evas_Object *obj); + +/** + * @brief Set the format string for the unit label. + * + * Unit label is displayed all the time, if set, after slider's bar. In + * horizontal mode, at right and in vertical mode, at bottom. + * + * If @c null, unit label won't be visible. If not it sets the format string + * for the label text. To the label text is provided a floating point value, so + * the label text can display up to 1 floating point value. Note that this is + * optional. + * + * Use a format string such as "%1.2f meters" for example, and it will display + * values like: "3.14 meters" for a value equal to 3.14159. + * + * Default is unit label disabled. + * + * @param[in] units The format string for the unit display. + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_unit_format_set(Evas_Object *obj, const char *units); + +/** + * @brief Get the unit label format of the slider. + * + * Unit label is displayed all the time, if set, after slider's bar. In + * horizontal mode, at right and in vertical mode, at bottom. + * + * @return The format string for the unit display. + * + * @ingroup Elm_Slider + */ +EAPI const char *elm_slider_unit_format_get(const Evas_Object *obj); + +/** + * @brief Set the format function pointer for the units label + * + * Set the callback function to format the units string. + * + * @param[in] func The units format function. + * @param[in] free_func The freeing function for the format string. + * + * @ingroup Elm_Slider + */ +EAPI void elm_slider_units_format_function_set(Evas_Object *obj, slider_func_type func, slider_freefunc_type free_func); + #include "elm_slider.eo.legacy.h" \ No newline at end of file diff --git a/src/lib/elementary/elm_widget_progressbar.h b/src/lib/elementary/elm_widget_progressbar.h index 072d4ec453..8176bb4670 100644 --- a/src/lib/elementary/elm_widget_progressbar.h +++ b/src/lib/elementary/elm_widget_progressbar.h @@ -34,8 +34,7 @@ struct _Elm_Progressbar_Data Evas_Coord size; /**< Width or height of progressbar */ double val; /**< Value of progressbar */ - Eina_Bool horizontal : 1; /**< Whether progressbar style is horizontal */ - Eina_Bool inverted : 1; /**< Whether direction of progressbar is LTR */ + Efl_Orient orientation; /**< Orientation of the progressbar */ Eina_Bool pulse : 1; /**< Whether object is put in the pulsing mode */ Eina_Bool pulse_state : 1; /**< To start the pulsing animation, otherwise to stop it */ Eina_List *progress_status; /**< The list of _Elm_Progress_Status. To save the progress value(in percentage) each part of given progress bar */ diff --git a/src/lib/elementary/elm_widget_slider.h b/src/lib/elementary/elm_widget_slider.h index 54a84082a0..6e136e6a9d 100644 --- a/src/lib/elementary/elm_widget_slider.h +++ b/src/lib/elementary/elm_widget_slider.h @@ -47,11 +47,10 @@ struct _Elm_Slider_Data Evas_Coord size; Evas_Coord downx, downy; + Efl_Orient orientation; double range_from, range_to; - Eina_Bool horizontal : 1; - Eina_Bool inverted : 1; Eina_Bool indicator_show : 1; Eina_Bool spacer_down : 1; Eina_Bool frozen : 1;