From c00911ee84f6741cca77a9624e54cbea5b841a90 Mon Sep 17 00:00:00 2001 From: Tiago Rezende Campos Falcao Date: Thu, 1 Apr 2010 14:22:32 +0000 Subject: [PATCH] Added get functions in elm spinner and added elm spinner in edje externals.By Fidencio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: Fabiano FidĂȘncio SVN revision: 47646 --- .../data/edje_externals/Makefile.am | 1 + .../data/edje_externals/ico_spinner.png | Bin 0 -> 215 bytes .../elementary/data/edje_externals/icons.edc | 3 +- .../elementary/src/edje_externals/Makefile.am | 1 + .../src/edje_externals/elm_spinner.c | 235 ++++++++++++++++++ .../elementary/src/edje_externals/modules.inc | 1 + legacy/elementary/src/lib/Elementary.h.in | 6 + legacy/elementary/src/lib/elm_spinner.c | 60 ++++- 8 files changed, 304 insertions(+), 3 deletions(-) create mode 100644 legacy/elementary/data/edje_externals/ico_spinner.png create mode 100644 legacy/elementary/src/edje_externals/elm_spinner.c diff --git a/legacy/elementary/data/edje_externals/Makefile.am b/legacy/elementary/data/edje_externals/Makefile.am index 170aa8f659..54c304ce10 100644 --- a/legacy/elementary/data/edje_externals/Makefile.am +++ b/legacy/elementary/data/edje_externals/Makefile.am @@ -21,6 +21,7 @@ ico_notepad.png \ ico_radio.png \ ico_scrolled_entry.png \ ico_slider.png \ +ico_spinner.png \ ico_thumb.png \ ico_toggle.png \ ico_toolbar.png diff --git a/legacy/elementary/data/edje_externals/ico_spinner.png b/legacy/elementary/data/edje_externals/ico_spinner.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab2af63bcbb4f1b8f9d995750524a5006a3f5fe GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg4W_eLn(G&IgA6y$9*$jMalG+Lyhdmy@H$=9CevT1xf)~()kM&RqQ z8@UCy|$Iel??f@sB(_ifK}e?EJz`ag(qN@((QQK9`UKr0wLUHx3vIVCg! E02h-;TL1t6 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/edje_externals/icons.edc b/legacy/elementary/data/edje_externals/icons.edc index 8c1d476a22..7f44374e15 100644 --- a/legacy/elementary/data/edje_externals/icons.edc +++ b/legacy/elementary/data/edje_externals/icons.edc @@ -1,6 +1,6 @@ #define ICON(_name) \ images { image: "ico_"_name".png" COMP; } \ -collections { group { name: "ico_"_name; \ +collections { group { name: "ico_"_name; \ parts { part { name: "icon"; \ type: IMAGE; mouse_events: 0; \ description { state: "default" 0.0; \ @@ -22,6 +22,7 @@ ICON("notepad") ICON("radio") ICON("scrolled_entry") ICON("slider") +ICON("spinner") ICON("thumb") ICON("toggle") ICON("toolbar") diff --git a/legacy/elementary/src/edje_externals/Makefile.am b/legacy/elementary/src/edje_externals/Makefile.am index 7b5ca23e59..8db4267260 100644 --- a/legacy/elementary/src/edje_externals/Makefile.am +++ b/legacy/elementary/src/edje_externals/Makefile.am @@ -38,6 +38,7 @@ elm_notepad.c \ elm_radio.c \ elm_scrolled_entry.c \ elm_slider.c \ +elm_spinner.c \ elm_thumb.c \ elm_toggle.c \ elm_toolbar.c diff --git a/legacy/elementary/src/edje_externals/elm_spinner.c b/legacy/elementary/src/edje_externals/elm_spinner.c new file mode 100644 index 0000000000..ba86ea0f70 --- /dev/null +++ b/legacy/elementary/src/edje_externals/elm_spinner.c @@ -0,0 +1,235 @@ +#include "private.h" + +typedef struct _Elm_Params_Spinner +{ + const char *label_format; + double min, max, step, value; + Eina_Bool min_exists:1; + Eina_Bool max_exists:1; + Eina_Bool step_exists:1; + Eina_Bool value_exists:1; + Eina_Bool wrap_exists:1; + Eina_Bool wrap:1; +} Elm_Params_Spinner; + +static void +external_spinner_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Spinner *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->label_format) + elm_spinner_label_format_set(obj, p->label_format); + if ((p->min_exists) && (p->max_exists)) + elm_spinner_min_max_set(obj, p->min, p->max); + else if ((p->min_exists) || (p->max_exists)) + { + double min, max; + elm_spinner_min_max_get(obj, &min, &max); + if (p->min_exists) + elm_spinner_min_max_set(obj, p->min, max); + else + elm_spinner_min_max_set(obj, min, p->max); + } + if (p->step_exists) + elm_spinner_step_set(obj, p->step); + if (p->value_exists) + elm_spinner_value_set(obj, p->value); + if (p->wrap_exists) + elm_spinner_wrap_set(obj, p->wrap); +} + +static Eina_Bool +external_spinner_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "label format")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + elm_spinner_label_format_set(obj, param->s); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "min")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + double min, max; + elm_spinner_min_max_get(obj, &min, &max); + elm_spinner_min_max_set(obj, param->d, max); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "max")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + double min, max; + elm_spinner_min_max_get(obj, &min, &max); + elm_spinner_min_max_set(obj, min, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "step")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_spinner_step_set(obj, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "value")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_spinner_value_set(obj, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "wrap")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_spinner_wrap_set(obj, param->i); + return EINA_TRUE; + } + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static Eina_Bool +external_spinner_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +{ + if (!strcmp(param->name, "label format")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + param->s = elm_spinner_label_format_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "min")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + double min, max; + elm_spinner_min_max_get(obj, &min, &max); + param->d = min; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "max")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + double min, max; + elm_spinner_min_max_get(obj, &min, &max); + param->d = max; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "step")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_spinner_step_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "value")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_spinner_value_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "wrap")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_spinner_value_get(obj); + return EINA_TRUE; + } + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static void * +external_spinner_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) +{ + Elm_Params_Spinner *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = calloc(1, sizeof(Elm_Params_Spinner)); + if (!mem) + return NULL; + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "label format")) + mem->label_format = eina_stringshare_add(param->s); + else if (!strcmp(param->name, "min")) + { + mem->min = param->d; + mem->min_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "max")) + { + mem->max = param->d; + mem->max_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "step")) + { + mem->step = param->d; + mem->step_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "value")) + { + mem->value = param->d; + mem->value_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "wrap")) + { + mem->wrap = param->i; + mem->wrap_exists = EINA_TRUE; + } + } + + return mem; +} + +static void +external_spinner_params_free(void *params) +{ + Elm_Params_Spinner *mem = params; + + if (mem->label_format) + eina_stringshare_del(mem->label_format); + free(mem); +} + +static Edje_External_Param_Info external_spinner_params[] = { + EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("label format", "%1.2f"), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE("min"), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("max", 100.0), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("step", 1.0), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE("value"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("wrap"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL +}; + +DEFINE_EXTERNAL_ICON_ADD(spinner, "spinner") +DEFINE_EXTERNAL_TYPE_SIMPLE(spinner, "Spinner") diff --git a/legacy/elementary/src/edje_externals/modules.inc b/legacy/elementary/src/edje_externals/modules.inc index 06f3631e76..dcfe3663b3 100644 --- a/legacy/elementary/src/edje_externals/modules.inc +++ b/legacy/elementary/src/edje_externals/modules.inc @@ -10,6 +10,7 @@ DEFINE_TYPE(notepad) DEFINE_TYPE(radio) DEFINE_TYPE(scrolled_entry) DEFINE_TYPE(slider) +DEFINE_TYPE(spinner) DEFINE_TYPE(thumb) DEFINE_TYPE(toggle) DEFINE_TYPE(toolbar) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index 3fb2492dbd..b21ce6e248 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -500,8 +500,11 @@ extern "C" { EAPI void elm_clock_time_set(Evas_Object *obj, int hrs, int min, int sec); EAPI void elm_clock_time_get(const Evas_Object *obj, int *hrs, int *min, int *sec); EAPI void elm_clock_edit_set(Evas_Object *obj, Eina_Bool edit); + EAPI Eina_Bool elm_clock_edit_get(const Evas_Object *obj); EAPI void elm_clock_show_am_pm_set(Evas_Object *obj, Eina_Bool am_pm); + EAPI Eina_Bool elm_clock_show_am_pm_get(const Evas_Object *obj); EAPI void elm_clock_show_seconds_set(Evas_Object *obj, Eina_Bool seconds); + EAPI Eina_Bool elm_clock_show_seconds_get(const Evas_Object *obj); /* smart callbacks called: * "changed" - the user changed the time */ @@ -1080,10 +1083,13 @@ extern "C" { EAPI void elm_spinner_label_format_set(Evas_Object *obj, const char *fmt); EAPI const char *elm_spinner_label_format_get(const Evas_Object *obj); EAPI void elm_spinner_min_max_set(Evas_Object *obj, double min, double max); + EAPI void elm_spinner_min_max_get(const Evas_Object *obj, double *min, double *max); EAPI void elm_spinner_step_set(Evas_Object *obj, double step); + EAPI double elm_spinner_step_get(const Evas_Object *obj); EAPI void elm_spinner_value_set(Evas_Object *obj, double val); 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); /* 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/legacy/elementary/src/lib/elm_spinner.c b/legacy/elementary/src/lib/elm_spinner.c index 7c72016e8c..65d50b25ed 100644 --- a/legacy/elementary/src/lib/elm_spinner.c +++ b/legacy/elementary/src/lib/elm_spinner.c @@ -558,7 +558,7 @@ elm_spinner_label_format_get(const Evas_Object *obj) /** * Set the minimum and maximum values for the spinner * - * Maximum mut be greater than minimum. + * Maximum must be greater than minimum. * * @param obj The spinner object * @param min The minimum value @@ -581,6 +581,27 @@ elm_spinner_min_max_set(Evas_Object *obj, double min, double max) _write_label(obj); } +/** + * Get the minimum and maximum values of the spinner + * + * @param obj The spinner object + * @param min The minimum value + * @param max The maximum value + * + * @ingroup Spinner + */ +EAPI void +elm_spinner_min_max_get(const Evas_Object *obj, double *min, double *max) +{ + if (min) *min = 0.0; + if (max) *max = 0.0; + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (min) *min = wd->val_min; + if (max) *max = wd->val_max; +} + /** * Set the step for the spinner * @@ -598,6 +619,22 @@ elm_spinner_step_set(Evas_Object *obj, double step) wd->step = step; } +/** + * Get the step of the spinner + * + * @param obj The spinner object + * @return The step value + * + * @ingroup Spinner + */ +EAPI double +elm_spinner_step_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) 0.0; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return 0.0; + return wd->step; +} /** * Set the value the spinner indicates * @@ -640,7 +677,7 @@ elm_spinner_value_get(const Evas_Object *obj) /** * Sets whether the spinner should wrap when it reaches its * minimum/maximum value - * + * * @param obj The spinner object * @param wrap True if it should wrap, false otherwise * @@ -654,3 +691,22 @@ elm_spinner_wrap_set(Evas_Object *obj, Eina_Bool wrap) if (!wd) return; wd->wrap = wrap; } + +/** + * Gets whether the spinner should wrap when it reaches its + * minimum/maximum value + * + * @param obj The spinner object + * @return Bool value of wrap option + * (0 = disabled, 1 = enabled) + * + * @ingroup Spinner + */ +EAPI Eina_Bool +elm_spinner_wrap_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return EINA_FALSE; + return wd->wrap; +}