From b585212ef960177a66e70aa5c5e67dec53ccbb38 Mon Sep 17 00:00:00 2001 From: Prince Kumar Dubey Date: Tue, 8 Jun 2010 14:35:44 +0530 Subject: [PATCH] [elm_button,elm_segment_control] Merged with Beat. --- src/lib/elm_button.c | 90 +++++++++++++++++++++---------------------- src/lib/elm_segment_control.c | 47 ++++++++-------------- 2 files changed, 61 insertions(+), 76 deletions(-) diff --git a/src/lib/elm_button.c b/src/lib/elm_button.c index d48cab9..cb46029 100644 --- a/src/lib/elm_button.c +++ b/src/lib/elm_button.c @@ -14,6 +14,12 @@ typedef struct _Widget_Data Widget_Data; +enum{ + DEFAULT = 0, + HIGHLIGHTED, + FOCUSED, + DISABLED, +}; struct _Widget_Data { Evas_Object *btn, *icon; @@ -24,14 +30,8 @@ struct _Widget_Data double ar_threshold; double ar_interval; Ecore_Timer *timer; - const char *clickedlabel; - const char *focusedlabel; - const char *disabledlabel; - const char *defaultlabel; - int highlightedstate; - int focusedstate; - int disabledstate; - int defaultstate; + const char *statelabel[4]; + int statetype[4]; }; static const char *widtype = NULL; @@ -64,10 +64,10 @@ _del_hook(Evas_Object *obj) Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; if (wd->label) eina_stringshare_del(wd->label); - if (wd->defaultlabel) eina_stringshare_del(wd->defaultlabel); - if (wd->clickedlabel) eina_stringshare_del(wd->clickedlabel); - if (wd->focusedlabel) eina_stringshare_del(wd->focusedlabel); - if (wd->disabledlabel) eina_stringshare_del(wd->disabledlabel); + if (wd->statelabel[DEFAULT]) eina_stringshare_del(wd->statelabel[DEFAULT]); + if (wd->statelabel[HIGHLIGHTED]) eina_stringshare_del(wd->statelabel[HIGHLIGHTED]); + if (wd->statelabel[FOCUSED]) eina_stringshare_del(wd->statelabel[FOCUSED]); + if (wd->statelabel[DISABLED]) eina_stringshare_del(wd->statelabel[DISABLED]); free(wd); } @@ -78,17 +78,17 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj) if (!wd) return; if (elm_widget_focus_get(obj)) { - if(wd->focusedstate) + if(wd->statelabel[FOCUSED]) { - _set_label(obj, wd->focusedlabel); + _set_label(obj, wd->statelabel[FOCUSED]); } edje_object_signal_emit(wd->btn, "elm,action,focus", "elm"); evas_object_focus_set(wd->btn, 1); } else { - if(wd->defaultlabel) - _set_label(obj, wd->defaultlabel); + if(wd->statelabel[DEFAULT]) + _set_label(obj, wd->statelabel[DEFAULT]); else _set_label(obj, wd->label); edje_object_signal_emit(wd->btn, "elm,action,unfocus", "elm"); @@ -125,16 +125,16 @@ _disable_hook(Evas_Object *obj) if (!wd) return; if (elm_widget_disabled_get(obj)) { - if(wd->disabledstate ) + if(wd->statelabel[DISABLED] ) { - _set_label(obj, wd->disabledlabel); + _set_label(obj, wd->statelabel[DISABLED]); } edje_object_signal_emit(wd->btn, "elm,state,disabled", "elm"); } else { - if(wd->defaultlabel) - _set_label(obj, wd->defaultlabel); + if(wd->statelabel[DEFAULT]) + _set_label(obj, wd->statelabel[DEFAULT]); else _set_label(obj, wd->label); edje_object_signal_emit(wd->btn, "elm,state,enabled", "elm"); @@ -231,9 +231,10 @@ _signal_pressed(void *data, Evas_Object *obj __UNUSED__, const char *emission __ { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; - if(wd->highlightedstate) + + if(wd->statelabel[HIGHLIGHTED]) { - _set_label(data, wd->clickedlabel); + _set_label(data, wd->statelabel[HIGHLIGHTED]); } if (wd->autorepeat && !wd->repeating) { @@ -249,8 +250,8 @@ _signal_default_text_set(void *data, Evas_Object *obj, const char *emission, con { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; - if(wd->defaultlabel) - _set_label(data, wd->defaultlabel); + if(wd->statelabel[DEFAULT]) + _set_label(data, wd->statelabel[DEFAULT]); else _set_label(data, wd->label); return; @@ -261,8 +262,8 @@ _signal_unpressed(void *data, Evas_Object *obj __UNUSED__, const char *emission { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; - if(wd->defaultlabel) - _set_label(data, wd->defaultlabel); + if(wd->statelabel[DEFAULT]) + _set_label(data, wd->statelabel[DEFAULT]); else _set_label(data, wd->label); evas_object_smart_callback_call(data, "unpressed", NULL); @@ -305,10 +306,10 @@ elm_button_add(Evas_Object *parent) wd->btn = edje_object_add(e); _elm_theme_object_set(obj, wd->btn, "button", "base", "default"); - wd->defaultstate = 0; - wd->highlightedstate = 0; - wd->focusedstate = 0; - wd->disabledstate = 0; + wd->statetype[DEFAULT] = 0; + wd->statetype[HIGHLIGHTED] = 0; + wd->statetype[FOCUSED] = 0; + wd->statetype[DISABLED] = 0; edje_object_signal_callback_add(wd->btn, "elm,action,click", "", _signal_clicked, obj); edje_object_signal_callback_add(wd->btn, "elm,action,press", "", @@ -382,29 +383,26 @@ elm_button_label_set_for_state(Evas_Object *obj, const char *label, UIControlSta if(state == UIControlStateDefault) { - wd->defaultstate = UIControlStateDefault; - if (wd->defaultlabel) eina_stringshare_del(wd->defaultlabel); - wd->defaultlabel = eina_stringshare_add(label); + wd->statetype[DEFAULT] = UIControlStateDefault; + eina_stringshare_replace(&wd->statelabel[DEFAULT], label); + return; } if(state == UIControlStateHighlighted) { - wd->highlightedstate = UIControlStateHighlighted; - if (wd->clickedlabel) eina_stringshare_del(wd->clickedlabel); - wd->clickedlabel = eina_stringshare_add(label); + wd->statetype[HIGHLIGHTED] = UIControlStateHighlighted; + eina_stringshare_replace(&wd->statelabel[HIGHLIGHTED], label); return; } if(state == UIControlStateFocused) { - wd->focusedstate = UIControlStateFocused; - if (wd->focusedlabel) eina_stringshare_del(wd->focusedlabel); - wd->focusedlabel = eina_stringshare_add(label); + wd->statetype[FOCUSED] = UIControlStateFocused; + eina_stringshare_replace(&wd->statelabel[FOCUSED], label); return; } if(state == UIControlStateDisabled) { - wd->disabledstate = UIControlStateDisabled; - if (wd->disabledlabel) eina_stringshare_del(wd->disabledlabel); - wd->disabledlabel = eina_stringshare_add(label); + wd->statetype[DISABLED] = UIControlStateDisabled; + eina_stringshare_replace(&wd->statelabel[DISABLED], label); return; } } @@ -433,13 +431,13 @@ elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state) if (!wd) return NULL; if(state == UIControlStateDefault) - return wd->defaultlabel; + return wd->statelabel[DEFAULT]; else if(state == UIControlStateHighlighted) - return wd->highlightedstate; + return wd->statelabel[HIGHLIGHTED]; else if(state == UIControlStateFocused) - return wd->focusedlabel; + return wd->statelabel[FOCUSED]; else if(state == UIControlStateDisabled) - return wd->disabledlabel; + return wd->statelabel[DISABLED]; else return NULL; } diff --git a/src/lib/elm_segment_control.c b/src/lib/elm_segment_control.c index e743a7d..edb17dd 100755 --- a/src/lib/elm_segment_control.c +++ b/src/lib/elm_segment_control.c @@ -297,7 +297,7 @@ static void _update_list(Evas_Object *obj) edje_object_part_swallow(it->base, "elm.swallow.content", it->icon); edje_object_signal_emit(it->base, "elm,state,icon,visible", "elm"); - if(wd->cur_seg_id == i) + if(wd->cur_seg_id == it->segment_id) { edje_object_signal_emit(it->base, "elm,state,segment,on", "elm"); edje_object_signal_emit(it->base, "elm,state,text,change", "elm"); @@ -447,6 +447,7 @@ _animator_animate_del_cb(Evas_Object *obj) wd->ani = NULL; wd->ani_it = NULL; _update_list(obj); + wd->id = eina_list_count(wd->seg_ctrl); return ECORE_CALLBACK_CANCEL; } } @@ -480,25 +481,21 @@ elm_segment_control_add_segment(Evas_Object *obj, Evas_Object *icon, const char return; wd->seg_ctrl = eina_list_append(wd->seg_ctrl, it); + wd->id = eina_list_count(wd->seg_ctrl); _update_list(obj); edje_object_signal_callback_add(it->base, "elm,action,segment,click", "elm", _signal_segment_on, it); - ++wd->id; +// ++wd->id; + wd->insert_index = 0; + wd->del_index = 0; _refresh_segment_ids(obj); - if(animate && it->segment_id) + if(animate && it->segment_id && wd->ani_it == NULL) { - if(wd->ani_it == NULL) - { evas_object_resize(it->base, 1, wd->height); wd->ani_it = it; wd->ani = ecore_animator_add( _animator_animate_add_cb, obj ); - } - else - { - wd->queue = eina_list_append(wd->queue, it); - } } else _state_value_set(obj); @@ -573,24 +570,18 @@ elm_segment_control_insert_segment_at(Evas_Object *obj, Evas_Object *icon, const } edje_object_signal_callback_add(it->base, "elm,action,segment,click", "elm", _signal_segment_on, it); wd->insert_index = index; - ++wd->id; +// ++wd->id; + wd->id = eina_list_count(wd->seg_ctrl); _refresh_segment_ids(obj); _update_list(obj); - if(animate && it->segment_id) + if(animate && it->segment_id && wd->ani_it == NULL) { - if(wd->ani_it == NULL) - { wd->ani_it = it; evas_object_resize(it->base, 1, wd->height); wd->ani = ecore_animator_add( _animator_animate_add_cb, obj ); - } - else - { - wd->queue = eina_list_append(wd->queue, it); - } } else _state_value_set(obj); @@ -627,18 +618,11 @@ elm_segment_control_delete_segment(Evas_Object *obj, Elm_Segment_Item *item, Ein return; wd->del_index = it->segment_id; - if(animate && it->segment_id) + if(animate && it->segment_id && wd->ani_it == NULL) { - if(wd->ani_it == NULL) - { it->delete_me = EINA_TRUE; wd->ani_it = it; wd->ani = ecore_animator_add( _animator_animate_del_cb, obj ); - } - else - { - wd->queue = eina_list_append(wd->queue, it); - } } else { @@ -649,7 +633,8 @@ elm_segment_control_delete_segment(Evas_Object *obj, Elm_Segment_Item *item, Ein _state_value_set(obj); _update_list(obj); } - --wd->id; +// --wd->id; + wd->id = eina_list_count(wd->seg_ctrl); return; } @@ -667,7 +652,7 @@ elm_segment_control_delete_segment_at(Evas_Object *obj, unsigned int index, Ein return; wd->del_index = index; - --wd->id; + if(animate && it->segment_id) { if(wd->ani_it == NULL) @@ -688,9 +673,11 @@ elm_segment_control_delete_segment_at(Evas_Object *obj, unsigned int index, Ein _item_free(obj, it); _refresh_segment_ids(obj); _state_value_set(obj); + _update_list(obj); } - _update_list(obj); +// --wd->id; + wd->id = eina_list_count(wd->seg_ctrl); return; } -- 2.7.4