The following patch add the capability to replace numerical values by
strings in elm_spinner as already is done by e_slider.
--
Rafael Fonseca
ProFUSION embedded systems
http://www.profusion.mobi
>From d88c8413fec225f703d7a713fcdd3f12fe79d87b Mon Sep 17 00:00:00 2001
From: Rafael Fonseca <[email protected]>
Date: Wed, 14 Apr 2010 16:12:56 -0300
Subject: [PATCH] Add special values to spinner.
Special value is a string showed instead a numerical one.
---
src/bin/test_spinner.c | 21 +++++++++++++++++++
src/lib/Elementary.h.in | 1 +
src/lib/elm_spinner.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/src/bin/test_spinner.c b/src/bin/test_spinner.c
index 5d421a0..7f73099 100644
--- a/src/bin/test_spinner.c
+++ b/src/bin/test_spinner.c
@@ -59,6 +59,27 @@ test_spinner(void *data, Evas_Object *obj, void *event_info)
elm_box_pack_end(bx, sp);
evas_object_show(sp);
+ sp = elm_spinner_add(win);
+ elm_spinner_min_max_set(sp, 1, 12);
+ elm_spinner_label_format_set(sp, "%.0f");
+ elm_spinner_step_set(sp, 1.0);
+ elm_spinner_special_value_add(sp, 1, "January");
+ elm_spinner_special_value_add(sp, 2, "February");
+ elm_spinner_special_value_add(sp, 3, "March");
+ elm_spinner_special_value_add(sp, 4, "April");
+ elm_spinner_special_value_add(sp, 5, "May");
+ elm_spinner_special_value_add(sp, 6, "June");
+ elm_spinner_special_value_add(sp, 7, "July");
+ elm_spinner_special_value_add(sp, 8, "August");
+ elm_spinner_special_value_add(sp, 9, "September");
+ elm_spinner_special_value_add(sp, 10, "October");
+ elm_spinner_special_value_add(sp, 11, "November");
+ elm_spinner_special_value_add(sp, 12, "December");
+ evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+ evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_box_pack_end(bx, sp);
+ evas_object_show(sp);
+
evas_object_show(win);
}
#endif
diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in
index 12fea7b..d126b46 100644
--- a/src/lib/Elementary.h.in
+++ b/src/lib/Elementary.h.in
@@ -1197,6 +1197,7 @@ extern "C" {
EAPI double elm_spinner_value_get(const Evas_Object *obj);
EAPI void elm_spinner_wrap_set(Evas_Object *obj, Eina_Bool wrap);
EAPI Eina_Bool elm_spinner_wrap_get(const Evas_Object *obj);
+ EAPI void elm_spinner_special_value_add(Evas_Object *obj, double
value, const char *label);
/* smart callbacks called:
* "changed" - when the spinner value changes
* "delay,changed" - when the spinner value changed, but a small time after
a change (use this if you only want to respond to a change once the spinner is
held still for a short while).
diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c
index 65d50b2..bef47bb 100644
--- a/src/lib/elm_spinner.c
+++ b/src/lib/elm_spinner.c
@@ -23,6 +23,7 @@
* expensive reactions to the value change.
*/
typedef struct _Widget_Data Widget_Data;
+typedef struct _Elm_Spinner_Special_Value Elm_Spinner_Special_Value;
struct _Widget_Data
{
@@ -31,11 +32,17 @@ struct _Widget_Data
double val, val_min, val_max, orig_val, step;
double drag_start_pos, spin_speed, interval;
Ecore_Timer *delay, *spin;
+ Eina_List *special_values;
Eina_Bool wrap : 1;
Eina_Bool entry_visible : 1;
Eina_Bool dragging : 1;
};
+struct _Elm_Spinner_Special_Value {
+ double value;
+ const char *label;
+};
+
static const char *widtype = NULL;
static void _del_hook(Evas_Object *obj);
static void _disable_hook(Evas_Object *obj);
@@ -47,10 +54,17 @@ static Eina_Bool _value_set(Evas_Object *obj, double delta);
static void
_del_hook(Evas_Object *obj)
{
+ Elm_Spinner_Special_Value *sv;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->label) eina_stringshare_del(wd->label);
if (wd->delay) ecore_timer_del(wd->delay);
+ if (wd->special_values)
+ EINA_LIST_FREE(wd->special_values, sv)
+ {
+ eina_stringshare_del(sv->label);
+ free(sv);
+ }
free(wd);
}
@@ -135,13 +149,23 @@ _entry_show(Widget_Data *wd)
static void
_write_label(Evas_Object *obj)
{
+ Eina_List *l;
+ Elm_Spinner_Special_Value *sv;
Widget_Data *wd = elm_widget_data_get(obj);
char buf[1024];
if (!wd) return;
+ EINA_LIST_FOREACH(wd->special_values, l, sv)
+ if (sv->value == wd->val)
+ {
+ snprintf(buf, sizeof(buf), "%s", sv->label);
+ goto apply;
+ }
if (wd->label)
snprintf(buf, sizeof(buf), wd->label, wd->val);
else
snprintf(buf, sizeof(buf), "%.0f", wd->val);
+
+apply:
edje_object_part_text_set(wd->spinner, "elm.text", buf);
if (wd->entry_visible) _entry_show(wd);
}
@@ -710,3 +734,29 @@ elm_spinner_wrap_get(const Evas_Object *obj)
if (!wd) return EINA_FALSE;
return wd->wrap;
}
+
+/**
+ * Set a special value to display in the place of the numerical one.
+ *
+ * @param obj The spinner object
+ * @param value The value to be replaced
+ * @param label The label to be used
+ *
+ * @ingroup Spinner
+ */
+EAPI void
+elm_spinner_special_value_add(Evas_Object *obj, double value, const char
*label)
+{
+ Elm_Spinner_Special_Value *sv;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+
+ sv = calloc(1, sizeof(*sv));
+ if (!sv) return;
+ sv->value = value;
+ sv->label = eina_stringshare_add(label);
+
+ wd->special_values = eina_list_append(wd->special_values, sv);
+ _write_label(obj);
+}
--
1.7.0.5
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel