Elm_Spinner: UI Concept change fix.

Older UI concept: when text in spinner's entry is inputted and text is
not committed yet and when inc/dec is clicked. do not commit text and
reset the value to older original value.

New UI concept:
When Text in spinner's entry is inputted and text is not committed yet
and when inc/dec buttons are clicked.
Commit the entry's text and inc/dec accordingly.
If entry' s text is already modified owing to min/max update, then do not inc/dec.

Signed-off by: Shilpa Singh <shilpa.singh@samsung.com>
This commit is contained in:
Shilpa Singh 2013-11-02 20:33:00 +09:00 committed by Carsten Haitzler (Rasterman)
parent 1aa3dd0ec4
commit 6027ce9bad
2 changed files with 18 additions and 17 deletions

View File

@ -237,15 +237,6 @@ _entry_hide(Evas_Object *obj)
sd->entry_visible = EINA_FALSE;
}
static void
_reset_value(Evas_Object *obj)
{
ELM_SPINNER_DATA_GET(obj, sd);
_entry_hide(obj);
elm_spinner_value_set(obj, sd->orig_val);
}
static void
_entry_value_apply(Evas_Object *obj)
{
@ -283,7 +274,6 @@ _entry_toggle_cb(void *data,
if (sd->entry_visible) _entry_value_apply(data);
else
{
sd->orig_val = sd->val;
elm_layout_signal_emit(data, "elm,state,active", "elm");
_entry_show(sd);
elm_entry_select_all(sd->ent);
@ -358,7 +348,7 @@ _val_dec_stop(Evas_Object *obj)
static void
_button_inc_start_cb(void *data,
Evas_Object *obj __UNUSED__,
Evas_Object *obj,
const char *emission __UNUSED__,
const char *source __UNUSED__)
{
@ -366,7 +356,8 @@ _button_inc_start_cb(void *data,
if (sd->entry_visible)
{
_reset_value(data);
_entry_value_apply(obj);
if ((sd->val_updated) && (sd->val == sd->val_min)) return;
return;
}
_val_inc_start(data);
@ -391,8 +382,8 @@ _button_dec_start_cb(void *data,
if (sd->entry_visible)
{
_reset_value(data);
return;
_entry_value_apply(obj);
if ((sd->val_updated) && (sd->val == sd->val_max)) return;
}
_val_dec_start(data);
}
@ -979,8 +970,17 @@ _elm_spinner_value_set(Eo *obj, void *_pd, va_list *list)
if (sd->val == val) return;
sd->val = val;
if (sd->val < sd->val_min) sd->val = sd->val_min;
if (sd->val > sd->val_max) sd->val = sd->val_max;
sd->val_updated = EINA_FALSE;
if (sd->val < sd->val_min)
{
sd->val = sd->val_min;
sd->val_updated = EINA_TRUE;
}
if (sd->val > sd->val_max)
{
sd->val = sd->val_max;
sd->val_updated = EINA_TRUE;
}
_val_set(obj);
_label_write(obj);
}

View File

@ -26,7 +26,7 @@ struct _Elm_Spinner_Smart_Data
{
Evas_Object *ent;
const char *label;
double val, val_min, val_max, orig_val, val_base;
double val, val_min, val_max, val_base;
double step; // step for the value change. 1 by default.
double drag_start_val; // spinner value on drag start.
// this is reset to 0 when drag stops.
@ -39,6 +39,7 @@ struct _Elm_Spinner_Smart_Data
Eina_Bool dragging : 1;
Eina_Bool editable : 1;
Eina_Bool wrap : 1;
Eina_Bool val_updated : 1;
};
typedef struct _Elm_Spinner_Special_Value Elm_Spinner_Special_Value;