Added get functions in elm spinner and added elm spinner in edje externals.By Fidencio
authorTiago Rezende Campos Falcao <developer@tiagofalcao.com>
Thu, 1 Apr 2010 14:22:32 +0000 (14:22 +0000)
committerTiago Rezende Campos Falcao <developer@tiagofalcao.com>
Thu, 1 Apr 2010 14:22:32 +0000 (14:22 +0000)
Author: Fabiano FidĂȘncio <fidencio at profusion.mobi>

SVN revision: 47646

data/edje_externals/Makefile.am
data/edje_externals/ico_spinner.png [new file with mode: 0644]
data/edje_externals/icons.edc
src/edje_externals/Makefile.am
src/edje_externals/elm_spinner.c [new file with mode: 0644]
src/edje_externals/modules.inc
src/lib/Elementary.h.in
src/lib/elm_spinner.c

index 170aa8f..54c304c 100644 (file)
@@ -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/data/edje_externals/ico_spinner.png b/data/edje_externals/ico_spinner.png
new file mode 100644 (file)
index 0000000..0ab2af6
Binary files /dev/null and b/data/edje_externals/ico_spinner.png differ
index 8c1d476..7f44374 100644 (file)
@@ -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")
index 7b5ca23..8db4267 100644 (file)
@@ -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/src/edje_externals/elm_spinner.c b/src/edje_externals/elm_spinner.c
new file mode 100644 (file)
index 0000000..ba86ea0
--- /dev/null
@@ -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")
index 06f3631..dcfe366 100644 (file)
@@ -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)
index 3fb2492..b21ce6e 100644 (file)
@@ -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).
index 7c72016..65d50b2 100644 (file)
@@ -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
@@ -582,6 +582,27 @@ elm_spinner_min_max_set(Evas_Object *obj, double min, double max)
 }
 
 /**
+ * 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
  *
  * @param obj The spinner object
@@ -599,6 +620,22 @@ elm_spinner_step_set(Evas_Object *obj, double 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
  *
  * @param obj The spinner object
@@ -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;
+}