Eo *win;
Eo *pb1;
Eo *pb2;
+ Eo *pb3;
+ Eo *pb4;
+ Eo *pb5;
+ Eo *check;
Eo *btn_start;
Eo *btn_stop;
Eo *btn_reset;
{
progress_val += 1;
efl_ui_range_value_set(pd->pb2, progress_val);
+ efl_ui_range_value_set(pd->pb3, progress_val);
+ efl_ui_range_value_set(pd->pb4, progress_val);
+ efl_ui_range_value_set(pd->pb5, progress_val);
}
if (!_set_progress_val(pd->pb1, 0.5))
efl_ui_range_value_set(pd->pb1, 0.0);
efl_ui_range_value_set(pd->pb2, 0.0);
+ efl_ui_range_value_set(pd->pb3, 0.0);
+ efl_ui_range_value_set(pd->pb4, 0.0);
+ efl_ui_range_value_set(pd->pb5, 0.0);
}
static void
free(pd);
}
+static void
+_custom_format_cb(void *data EINA_UNUSED, Eina_Strbuf *str, const Eina_Value value)
+{
+ double v;
+ eina_value_get(&value, &v);
+ if (v < 25.f) eina_strbuf_append_printf(str, "Starting up...");
+ else if (v < 50.f) eina_strbuf_append_printf(str, "Working...");
+ else if (v < 75.f) eina_strbuf_append_printf(str, "Getting there...");
+ else if (v < 100.f) eina_strbuf_append_printf(str, "Almost done...");
+ else eina_strbuf_append_printf(str, "Done!");
+}
+
+static void
+_toggle_progress_label(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_Check *check = ev->object;
+ Efl_Ui_Progressbar *pb3 = data;
+ Eina_Bool state = efl_ui_check_selected_get(check);
+
+ efl_ui_progressbar_show_progress_label_set(pb3, state);
+}
+
void
test_ui_progressbar(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
efl_ui_range_value_set(efl_added, 10)
);
+ pd->pb3 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
+ efl_pack(bx, efl_added),
+ efl_text_set(efl_added, "Toggle progress label"),
+ efl_ui_range_limits_set(efl_added, 0, 100),
+ efl_ui_progressbar_show_progress_label_set(efl_added, EINA_FALSE),
+ efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
+ );
+ pd->check = efl_add(EFL_UI_CHECK_CLASS, bx,
+ efl_pack(bx, efl_added),
+ efl_event_callback_add(efl_added, EFL_UI_CHECK_EVENT_SELECTED_CHANGED,
+ _toggle_progress_label, pd->pb3),
+ efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
+ );
+ efl_text_set(pd->check, "Show progress label of above progressbar"),
+
+ pd->pb4 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
+ efl_pack(bx, efl_added),
+ efl_text_set(efl_added, "Custom string"),
+ efl_ui_range_limits_set(efl_added, 0, 100),
+ efl_ui_format_string_set(efl_added, "%d rabbits"),
+ efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
+ );
+
+ pd->pb5 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
+ efl_pack(bx, efl_added),
+ efl_text_set(efl_added, "Custom func"),
+ efl_ui_range_limits_set(efl_added, 0, 100),
+ efl_ui_format_cb_set(efl_added, NULL, _custom_format_cb, NULL),
+ efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
+ );
+
btbx = efl_add(EFL_UI_BOX_CLASS, bx,
efl_pack(bx, efl_added),
efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
{
EFL_UI_PROGRESSBAR_DATA_GET(obj, sd);
- if (sd->format_cb)
+ if (sd->show_progress_label && sd->format_cb)
{
Eina_Value val;
if (sd->pulse_state)
elm_layout_signal_emit(obj, "elm,state,pulse,start", "elm");
- if (sd->format_cb && (!sd->pulse))
+ if (sd->show_progress_label && (!sd->pulse))
elm_layout_signal_emit(obj, "elm,state,units,visible", "elm");
}
else
if (sd->pulse_state)
elm_layout_signal_emit(obj, "efl,state,pulse,start", "efl");
- if (sd->format_cb && (!sd->pulse))
+ if (sd->show_progress_label && (!sd->pulse))
elm_layout_signal_emit(obj, "efl,state,units,visible", "efl");
}
sd->has_status_text_part = edje_object_part_exists(obj, statuspart[elm_widget_is_legacy(obj)]);
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_PROGRESS_BAR);
efl_ui_range_limits_set(obj, 0.0, 1.0);
+ efl_ui_progressbar_show_progress_label_set(obj, EINA_TRUE);
return obj;
}
}
}
+EOLIAN static void
+_efl_ui_progressbar_show_progress_label_set(Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *pd, Eina_Bool show)
+{
+ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+ char signal_name[32];
+ const char *ns = elm_widget_is_legacy(obj) ? "elm" : "efl";
+
+ pd->show_progress_label = show;
+
+ snprintf(signal_name, sizeof(signal_name), "%s,state,units,%s", ns,
+ show ? "visible" : "hidden");
+ elm_layout_signal_emit(obj, signal_name, ns);
+ edje_object_message_signal_process(wd->resize_obj);
+ _units_set(obj);
+ elm_layout_sizing_eval(obj);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_progressbar_show_progress_label_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *pd)
+{
+ return pd->show_progress_label;
+}
+
#include "efl_ui_progressbar_part.eo.c"
/* Efl.Part end */
state: bool; [[$true, to start the pulsing animation, $false to stop it]]
}
}
+ @property show_progress_label {
+ [[Whether a textual progress label is shown alongside the progressbar to give an exact
+ numerical indication of the current progress.
+
+ Not to be confused with the widget label set through @Efl.Text.text.
+ ]]
+ values {
+ show: bool; [[$true to show the progress label.]]
+ }
+ }
}
implements {
Efl.Object.constructor;
Eina_Bool is_legacy_format_cb : 1;
Eina_Bool has_status_text_part : 1;
Eina_Bool has_cur_progressbar_part : 1;
+ Eina_Bool show_progress_label : 1; /**< Show a progress text label besides the progressbar */
};
struct _Efl_Ui_Progress_Status
{ "efl_ui_widget", efl_ui_test_widget },
{ "efl_ui_active_view", efl_ui_test_active_view},
{ "efl_ui_check", efl_ui_test_check },
+ { "efl_ui_progressbar", efl_ui_test_progressbar },
{ "efl_ui_radio_group", efl_ui_test_radio_group },
{ "efl_ui_win", efl_ui_test_win },
{ NULL, NULL }
void efl_ui_test_widget(TCase *tc);
void efl_ui_test_active_view(TCase *tc);
void efl_ui_test_check(TCase *tc);
+void efl_ui_test_progressbar(TCase *tc);
void efl_ui_test_radio_group(TCase *tc);
void efl_ui_test_win(TCase *tc);
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+
+static Eo *win, *pb;
+
+static void
+check_setup()
+{
+ win = win_add();
+
+ pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
+}
+
+EFL_START_TEST(pb_text)
+{
+ efl_text_set(pb, "Test the Rest");
+ ck_assert_str_eq(efl_text_get(pb), "Test the Rest");
+}
+EFL_END_TEST
+
+EFL_START_TEST(pb_progress_label)
+{
+ efl_ui_progressbar_show_progress_label_set(pb, EINA_TRUE);
+ ck_assert_int_eq(efl_ui_progressbar_show_progress_label_get(pb), EINA_TRUE);
+ efl_ui_progressbar_show_progress_label_set(pb, EINA_FALSE);
+ ck_assert_int_eq(efl_ui_progressbar_show_progress_label_get(pb), EINA_FALSE);
+}
+EFL_END_TEST
+
+void efl_ui_test_progressbar(TCase *tc)
+{
+ tcase_add_checked_fixture(tc, check_setup, NULL);
+ tcase_add_test(tc, pb_text);
+ tcase_add_test(tc, pb_progress_label);
+}
'efl_ui_test_active_view.c',
'efl_ui_test_check.c',
'efl_ui_test_radio_group.c',
+ 'efl_ui_test_progressbar.c',
]
efl_ui_suite = executable('efl_ui_suite',