On 06/14/2012 12:15 AM, Michaël Bouchaud wrote:
Hum not really needed as is...
We just need a format function here ...
a progressbar is from 0.0 to 1.0.

Some more discussion in IRC led to the conclusion that this should be a handled in a signal callback I've attached the new patch where I also updated the progress bar example.

Regards,
Daniel Willmann


2012/6/12 Daniel Willmann<d.willm...@samsung.com>

Hello,

updated version. I added the @since 1.1 mentioned by Stefan and
mentioned the default value.

Regards,
Daniel

These functions change the range of the value displayed on the progress
bar with elm_progressbar_unit_format_set. At the moment the value displayed
is in the range of 0 to 100. These functions allow you to change the upper
range to something else.
This is useful if the value represented by the progress bar is something
else than percent, such as hours left.


From 8f7cc0343ed6b581f64f34e2ecc8fd0bf7c60aab Mon Sep 17 00:00:00 2001
From: Daniel Willmann <d.willm...@samsung.com>
Date: Thu, 14 Jun 2012 13:47:37 +0100
Subject: [PATCH] elementary: Add "changed" signal to elm_progressbar

This signal is emitted whenever the value of a progress bar changes.
The callback function can then set the unit format to an arbitrary
string. This is useful if the value represented by the progress bar
is something else than percent, such as hours left.

Signed-off-by: Daniel Willmann <d.willm...@samsung.com>
---
 trunk/elementary/ChangeLog                         |    4 ++
 .../elementary/src/examples/progressbar_example.c  |   52 +++++++++++++++-----
 trunk/elementary/src/lib/elm_progressbar.c         |   12 ++++-
 trunk/elementary/src/lib/elm_progressbar.h         |    4 ++
 4 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/trunk/elementary/ChangeLog b/trunk/elementary/ChangeLog
index 2d16db7..7ae3196 100644
--- a/trunk/elementary/ChangeLog
+++ b/trunk/elementary/ChangeLog
@@ -188,3 +188,7 @@
 
         * Toolbar : Add the reorder feature when the more panel is shown.
           After the item is long-pressed, it can be moved.
+
+2012-06-14 Daniel Willmann
+        * elm_progressbar: Add "changed" signal to be emitted when the value is changed.
+          Can be used for complex custom unit formats.
diff --git a/trunk/elementary/src/examples/progressbar_example.c b/trunk/elementary/src/examples/progressbar_example.c
index f7341a2..116efd2 100644
--- a/trunk/elementary/src/examples/progressbar_example.c
+++ b/trunk/elementary/src/examples/progressbar_example.c
@@ -17,9 +17,10 @@ typedef struct Progressbar_Example
    Evas_Object *pb2; /* pulsing */
    Evas_Object *pb3;
    Evas_Object *pb4;
-   Evas_Object *pb5; /* pulsing */
-   Evas_Object *pb6;
-   Evas_Object *pb7; /* pulsing */
+   Evas_Object *pb5;
+   Evas_Object *pb6; /* pulsing */
+   Evas_Object *pb7;
+   Evas_Object *pb8; /* pulsing */
 
    Eina_Bool    run;
    Ecore_Timer *timer;
@@ -40,7 +41,8 @@ _progressbar_example_value_set(void *data)
    elm_progressbar_value_set(example_data.pb1, progress);
    elm_progressbar_value_set(example_data.pb3, progress);
    elm_progressbar_value_set(example_data.pb4, progress);
-   elm_progressbar_value_set(example_data.pb6, progress);
+   elm_progressbar_value_set(example_data.pb5, progress);
+   elm_progressbar_value_set(example_data.pb7, progress);
 
    if (progress < 1.0) return ECORE_CALLBACK_RENEW;
 
@@ -54,8 +56,8 @@ _progressbar_example_start(void        *data,
                            void        *event_info)
 {
    elm_progressbar_pulse(example_data.pb2, EINA_TRUE);
-   elm_progressbar_pulse(example_data.pb5, EINA_TRUE);
-   elm_progressbar_pulse(example_data.pb7, EINA_TRUE);
+   elm_progressbar_pulse(example_data.pb6, EINA_TRUE);
+   elm_progressbar_pulse(example_data.pb8, EINA_TRUE);
 
    if (!example_data.run)
      {
@@ -72,8 +74,8 @@ _progressbar_example_stop(void        *data,
                           void        *event_info)
 {
    elm_progressbar_pulse(example_data.pb2, EINA_FALSE);
-   elm_progressbar_pulse(example_data.pb5, EINA_FALSE);
-   elm_progressbar_pulse(example_data.pb7, EINA_FALSE);
+   elm_progressbar_pulse(example_data.pb6, EINA_FALSE);
+   elm_progressbar_pulse(example_data.pb8, EINA_FALSE);
 
    if (example_data.run)
      {
@@ -83,6 +85,21 @@ _progressbar_example_stop(void        *data,
 }
 
 static void
+_on_changed(void *data, Evas_Object *obj, void *event_info)
+{
+   double progress;
+   int files;
+   char text[30];
+
+   /* Count down from 3 minutes */
+   progress = elm_progressbar_value_get(obj);
+   files = (1-progress) * 12000;
+   snprintf(text, 29, "%i files remaining", files);
+
+   elm_progressbar_unit_format_set(obj, text);
+}
+
+static void
 _on_done(void        *data,
          Evas_Object *obj,
          void        *event_info)
@@ -150,6 +167,17 @@ elm_main(int    argc,
    evas_object_show(pb);
    example_data.pb3 = pb;
 
+   /* pb with callback function */
+   pb = elm_progressbar_add(win);
+   elm_progressbar_unit_format_set(pb, NULL);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, pb);
+   evas_object_show(ic1);
+   evas_object_show(pb);
+   evas_object_smart_callback_add(pb, "changed", _on_changed, NULL);
+   example_data.pb4 = pb;
+
    hbx = elm_box_add(win);
    elm_box_horizontal_set(hbx, EINA_TRUE);
    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -165,7 +193,7 @@ elm_main(int    argc,
    elm_box_pack_end(hbx, pb);
    elm_object_text_set(pb, "percent");
    evas_object_show(pb);
-   example_data.pb4 = pb;
+   example_data.pb5 = pb;
 
    /* vertical pb, with pulse and custom (small) span size */
    pb = elm_progressbar_add(win);
@@ -178,7 +206,7 @@ elm_main(int    argc,
    elm_object_text_set(pb, "Infinite bounce");
    elm_box_pack_end(hbx, pb);
    evas_object_show(pb);
-   example_data.pb5 = pb;
+   example_data.pb6 = pb;
 
    ic2 = elm_icon_add(win);
    elm_icon_file_set(ic2, buf, NULL);
@@ -197,7 +225,7 @@ elm_main(int    argc,
    elm_box_pack_end(hbx, pb);
    evas_object_show(ic2);
    evas_object_show(pb);
-   example_data.pb6 = pb;
+   example_data.pb7 = pb;
 
    /* "wheel" style progress bar */
    pb = elm_progressbar_add(win);
@@ -207,7 +235,7 @@ elm_main(int    argc,
    evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    elm_box_pack_end(bx, pb);
    evas_object_show(pb);
-   example_data.pb7 = pb;
+   example_data.pb8 = pb;
 
    bt_bx = elm_box_add(win);
    elm_box_horizontal_set(bt_bx, EINA_TRUE);
diff --git a/trunk/elementary/src/lib/elm_progressbar.c b/trunk/elementary/src/lib/elm_progressbar.c
index 61f2b64..2daa65c 100644
--- a/trunk/elementary/src/lib/elm_progressbar.c
+++ b/trunk/elementary/src/lib/elm_progressbar.c
@@ -4,6 +4,8 @@
 
 static const char PROGRESSBAR_SMART_NAME[] = "elm_progressbar";
 
+static const char SIG_CHANGED[] = "changed";
+
 #define MIN_RATIO_LVL 0.0
 #define MAX_RATIO_LVL 1.0
 
@@ -51,11 +53,18 @@ struct _Elm_Progressbar_Smart_Data
         ((obj), PROGRESSBAR_SMART_NAME, __func__)) \
     return
 
+/* smart callbacks coming from elm progressbar objects (besides the
+ * ones coming from elm layout): */
+static const Evas_Smart_Cb_Description _smart_callbacks[] = {
+   {SIG_CHANGED, ""},
+   {NULL, NULL}
+};
+
 /* Inheriting from elm_layout. Besides, we need no more than what is
  * there */
 EVAS_SMART_SUBCLASS_NEW
   (PROGRESSBAR_SMART_NAME, _elm_progressbar, Elm_Layout_Smart_Class,
-  Elm_Layout_Smart_Class, elm_layout_smart_class_get, NULL);
+  Elm_Layout_Smart_Class, elm_layout_smart_class_get, _smart_callbacks);
 
 static const Elm_Layout_Part_Alias_Description _content_aliases[] =
 {
@@ -353,6 +362,7 @@ elm_progressbar_value_set(Evas_Object *obj,
 
    _val_set(obj);
    _units_set(obj);
+   evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
 }
 
 EAPI double
diff --git a/trunk/elementary/src/lib/elm_progressbar.h b/trunk/elementary/src/lib/elm_progressbar.h
index 989433d..58687ae 100644
--- a/trunk/elementary/src/lib/elm_progressbar.h
+++ b/trunk/elementary/src/lib/elm_progressbar.h
@@ -33,6 +33,10 @@
  * This widget inherits from the @ref Layout one, so that all the
  * functions acting on it also work for progress bar objects.
  *
+ * This widget emits the following signals, besides the ones sent from
+ * @ref Layout:
+ * @li @c "changed" - when the value is changed
+ *
  * This widget has the following styles:
  * - @c "default"
  * - @c "wheel" (simple style, no text, no progression, only
-- 
1.7.9.5


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to