X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_diskselector.c;h=c2b5ff08642688e627876807e2799b431b635a7f;hb=49948ead683ed56c77b3f7e8cf7aff83cfc54b8e;hp=f30f8cf59996c097bced0ce0d430fce0f4dea71c;hpb=6dd781949ccc0aba6a3c9990bb1cb70273ed03cb;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_diskselector.c b/src/lib/elm_diskselector.c index f30f8cf..c2b5ff0 100644 --- a/src/lib/elm_diskselector.c +++ b/src/lib/elm_diskselector.c @@ -77,8 +77,17 @@ static Evas_Object * _item_content_get_hook(const Elm_Object_Item *it, const char *part); static const char SIG_SELECTED[] = "selected"; +static const char SIG_SCROLL_ANIM_START[] = "scroll,anim,start"; +static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop"; +static const char SIG_SCROLL_DRAG_START[] = "scroll,drag,start"; +static const char SIG_SCROLL_DRAG_STOP[] = "scroll,drag,stop"; + static const Evas_Smart_Cb_Description _signals[] = { {SIG_SELECTED, ""}, + {SIG_SCROLL_ANIM_START, ""}, + {SIG_SCROLL_ANIM_STOP, ""}, + {SIG_SCROLL_DRAG_START, ""}, + {SIG_SCROLL_DRAG_STOP, ""}, {NULL, NULL} }; @@ -217,7 +226,7 @@ _check_string(void *data) // cut it off at byte mark returned form _check_letter strncpy(buf, it->label, length); buf[length] = '\0'; - edje_object_part_text_set(VIEW(it), "elm.text", buf); + edje_object_part_text_escaped_set(VIEW(it), "elm.text", buf); } if (wd->check_idler) @@ -279,14 +288,14 @@ _item_del_pre_hook(Elm_Object_Item *it) if (dit) { eina_stringshare_replace(&wd->first->label, dit->label); - edje_object_part_text_set(wd->VIEW(first), "elm.text", + edje_object_part_text_escaped_set(wd->VIEW(first), "elm.text", wd->first->label); } dit = eina_list_nth(wd->items, 1); if (dit) { eina_stringshare_replace(&wd->second->label, dit->label); - edje_object_part_text_set(wd->VIEW(second), "elm.text", + edje_object_part_text_escaped_set(wd->VIEW(second), "elm.text", wd->second->label); } // if more than 3 itmes should be displayed @@ -295,21 +304,21 @@ _item_del_pre_hook(Elm_Object_Item *it) dit = eina_list_nth(wd->items, i); item2 = eina_list_nth(wd->over_items, i - 2); eina_stringshare_replace(&item2->label, dit->label); - edje_object_part_text_set(VIEW(item2), "elm.text", item2->label); + edje_object_part_text_escaped_set(VIEW(item2), "elm.text", item2->label); } dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 1); if (dit) { eina_stringshare_replace(&wd->last->label, dit->label); - edje_object_part_text_set(wd->VIEW(last), "elm.text", + edje_object_part_text_escaped_set(wd->VIEW(last), "elm.text", wd->last->label); } dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 2); if (dit) { eina_stringshare_replace(&wd->s_last->label, dit->label); - edje_object_part_text_set(wd->VIEW(s_last), "elm.text", + edje_object_part_text_escaped_set(wd->VIEW(s_last), "elm.text", wd->s_last->label); } // if more than 3 itmes should be displayed @@ -318,7 +327,7 @@ _item_del_pre_hook(Elm_Object_Item *it) dit = eina_list_nth(wd->items, wd->item_count - i); item2 = eina_list_nth(wd->under_items, i - 3); eina_stringshare_replace(&item2->label, dit->label); - edje_object_part_text_set(VIEW(item2), "elm.text", + edje_object_part_text_escaped_set(VIEW(item2), "elm.text", item2->label); } } @@ -358,7 +367,7 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb if (it->label) { - edje_object_part_text_set(VIEW(it), "elm.text", it->label); + edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); edje_object_signal_callback_add(VIEW(it), "elm,action,click", "", _item_click_cb, it); } if (it->icon) @@ -407,6 +416,11 @@ _del_hook(Evas_Object * obj) { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; + if (wd->idler) + { + ecore_idle_enterer_del(wd->idler); + wd->idler = NULL; + } free(wd); } @@ -501,7 +515,7 @@ _theme_hook(Evas_Object * obj) { _elm_theme_object_set(obj, VIEW(it), "diskselector", "item", elm_widget_style_get(obj)); - edje_object_part_text_set(VIEW(it), "elm.text", it->label); + edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); } } else @@ -510,7 +524,7 @@ _theme_hook(Evas_Object * obj) { _elm_theme_object_set(obj, VIEW(it), "diskselector", "item", elm_widget_style_get(obj)); - edje_object_part_text_set(VIEW(it), "elm.text", it->label); + edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); } } _elm_theme_object_set(obj, wd->right_blank, "diskselector", "item", @@ -593,23 +607,29 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty return EINA_TRUE; } - if ((!strcmp(ev->keyname, "Left")) || (!strcmp(ev->keyname, "KP_Left")) || - (!strcmp(ev->keyname, "Up")) || (!strcmp(ev->keyname, "KP_Up"))) + if ((!strcmp(ev->keyname, "Left")) || + ((!strcmp(ev->keyname, "KP_Left")) && (!ev->string)) || + (!strcmp(ev->keyname, "Up")) || + ((!strcmp(ev->keyname, "KP_Up")) && (!ev->string))) { l = wd->selected_item->node->prev; if ((!l) && (wd->round)) l = eina_list_last(wd->items); } - else if ((!strcmp(ev->keyname, "Right")) || (!strcmp(ev->keyname, "KP_Right")) || - (!strcmp(ev->keyname, "Down")) || (!strcmp(ev->keyname, "KP_Down"))) + else if ((!strcmp(ev->keyname, "Right")) || + ((!strcmp(ev->keyname, "KP_Right")) && (!ev->string)) || + (!strcmp(ev->keyname, "Down")) || + ((!strcmp(ev->keyname, "KP_Down")) && (!ev->string))) { l = wd->selected_item->node->next; if ((!l) && (wd->round)) l = wd->items; } - else if ((!strcmp(ev->keyname, "Home")) || (!strcmp(ev->keyname, "KP_Home"))) + else if ((!strcmp(ev->keyname, "Home")) || + ((!strcmp(ev->keyname, "KP_Home")) && (!ev->string))) l = wd->items; - else if ((!strcmp(ev->keyname, "End")) || (!strcmp(ev->keyname, "KP_End"))) + else if ((!strcmp(ev->keyname, "End")) || + ((!strcmp(ev->keyname, "KP_End")) && (!ev->string))) l = eina_list_last(wd->items); else return EINA_FALSE; @@ -636,10 +656,12 @@ _selected_item_indicate(Elm_Diskselector_Item *it) wd = elm_widget_data_get(WIDGET(it)); if (!wd) return; + if (!it->label) return; EINA_LIST_FOREACH(wd->r_items, l, item) { - if (!strcmp(item->label, it->label)) edje_object_signal_emit(VIEW(item), "elm,state,selected", "elm"); + if (item->label && !strcmp(item->label, it->label)) + edje_object_signal_emit(VIEW(item), "elm,state,selected", "elm"); else edje_object_signal_emit(VIEW(item), "elm,state,default", "elm"); } @@ -694,7 +716,7 @@ static void _scroller_stop_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Elm_Diskselector_Item *it; - Widget_Data *wd = data; + Widget_Data *wd = elm_widget_data_get(data); Evas_Coord x, w, ow; Eina_List *l, *list; @@ -714,6 +736,28 @@ _scroller_stop_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UN if (!it) return; _select_item(it); + evas_object_smart_callback_call(data, SIG_SCROLL_ANIM_STOP, it); +} + +static void +_scroller_start_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_smart_callback_call(data, SIG_SCROLL_ANIM_START, + elm_diskselector_selected_item_get(data)); +} + +static void +_drag_start_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_smart_callback_call(data, SIG_SCROLL_DRAG_START, + elm_diskselector_selected_item_get(data)); +} + +static void +_drag_stop_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_smart_callback_call(data, SIG_SCROLL_DRAG_STOP, + elm_diskselector_selected_item_get(data)); } static Eina_Bool @@ -888,8 +932,7 @@ static void _item_icon_set(Elm_Diskselector_Item *it, Evas_Object *icon) { if (it->icon == icon) return; - if (it->icon) - evas_object_del(it->icon); + if (it->icon) evas_object_del(it->icon); it->icon = icon; if (VIEW(it)) { @@ -946,7 +989,7 @@ _check_identical_item(Elm_Diskselector_Item *it, Evas_Object *icon) idx - ic + (2 * ac)); } - if(dit) _item_icon_set(dit, icon); + if (dit) _item_icon_set(dit, icon); _sizing_eval(wd->self); } } @@ -958,7 +1001,7 @@ _item_text_set_hook(Elm_Object_Item *it, const char *part, const char *label) if (part && strcmp(part, "default")) return; item = (Elm_Diskselector_Item *)it; eina_stringshare_replace(&item->label, label); - edje_object_part_text_set(VIEW(item), "elm.text", item->label); + edje_object_part_text_escaped_set(VIEW(item), "elm.text", item->label); } static const char * @@ -1022,7 +1065,14 @@ elm_diskselector_add(Evas_Object *parent) evas_object_smart_callback_add(wd->scroller, "scroll", _scroller_move_cb, wd); evas_object_smart_callback_add(wd->scroller, "animate,stop", - _scroller_stop_cb, wd); + _scroller_stop_cb, obj); + evas_object_smart_callback_add(wd->scroller, "animate,start", + _scroller_start_cb, obj); + evas_object_smart_callback_add(wd->scroller, "drag,stop", + _drag_stop_cb, obj); + evas_object_smart_callback_add(wd->scroller, "drag,start", + _drag_start_cb, obj); + _elm_theme_object_set(obj, wd->scroller, "diskselector", "base", "default"); evas_object_event_callback_add(wd->scroller, EVAS_CALLBACK_RESIZE,