X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_toolbar.c;h=6bbebb6bdb67c889194857098b730a5a0658f21e;hb=8d5275d5db79b4bd83ab88e3d48feec63ddbd5bc;hp=030bc4b70374bad5cd58818a9e43d9ddb67f3bf7;hpb=f586a54ab8279026543489f5d7da76fa71e5bb59;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 030bc4b..6bbebb6 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -9,18 +9,19 @@ typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item; struct _Widget_Data { - Evas_Object *scr, *bx; + Evas_Object *scr, *bx, *more, *bx_more, *bx_more2; Evas_Object *menu_parent; Eina_Inlist *items; Elm_Toolbar_Item *more_item, *selected_item; + Elm_Toolbar_Item *reorder_from, *reorder_to; Elm_Toolbar_Shrink_Mode shrink_mode; Elm_Icon_Lookup_Order lookup_order; int icon_size; + int standard_priority; unsigned int item_count; double align; + Elm_Object_Select_Mode select_mode; Eina_Bool homogeneous : 1; - Eina_Bool no_select : 1; - Eina_Bool always_select : 1; Eina_Bool vertical : 1; Eina_Bool long_press : 1; Ecore_Timer *long_timer; @@ -34,12 +35,15 @@ struct _Elm_Toolbar_Item const char *label; const char *icon_str; Evas_Object *icon; + Evas_Object *object; Evas_Object *o_menu; + Evas_Object *in_box; Evas_Smart_Cb func; - struct { - int priority; - Eina_Bool visible : 1; - } prio; + struct + { + int priority; + Eina_Bool visible : 1; + } prio; Eina_Bool selected : 1; Eina_Bool separator : 1; Eina_Bool menu : 1; @@ -73,8 +77,8 @@ static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_hide(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data); -static void _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal); -static void _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal); +static void _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *sig); +static void _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *sig); static const char SIG_CLICKED[] = "clicked"; static const char SIG_LONGPRESSED[] = "longpressed"; @@ -88,12 +92,10 @@ static const Evas_Smart_Cb_Description _signals[] = { }; static void -_item_disable_set_hook(Elm_Object_Item *it) +_item_disable_hook(Elm_Object_Item *it) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Widget_Data *wd; - Elm_Toolbar_Item *toolbar_it = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *toolbar_it = (Elm_Toolbar_Item *)it; wd = elm_widget_data_get(WIDGET(toolbar_it)); if (!wd) return; @@ -170,17 +172,26 @@ _item_select(Elm_Toolbar_Item *it) Widget_Data *wd = elm_widget_data_get(WIDGET(it)); Evas_Object *obj2; Eina_Bool sel; + Evas_Coord w = 0, h = 0; if (!wd) return; - if (elm_widget_item_disabled_get(it) || (it->separator)) return; + if (elm_widget_item_disabled_get(it) || (it->separator) || (it->object)) return; sel = it->selected; - if (!wd->no_select) + if (it->object) evas_object_geometry_get(it->object, NULL, NULL, &w, &h); + + if (wd->select_mode != ELM_OBJECT_SELECT_MODE_NONE) { if (sel) { - if (wd->always_select) return; - _item_unselect(it); + if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) + if (wd->more_item == it) + { + edje_object_signal_emit(elm_layout_edje_get(wd->more), "elm,state,close", "elm"); + _item_unselect(it); + } + if (wd->select_mode != ELM_OBJECT_SELECT_MODE_ALWAYS) + _item_unselect(it); } else { @@ -190,6 +201,30 @@ _item_select(Elm_Toolbar_Item *it) it->selected = EINA_TRUE; wd->selected_item = it; + if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) + { + if (wd->more_item == it) + { + if (!evas_object_box_children_get(wd->bx_more2)) + edje_object_signal_emit(elm_layout_edje_get(wd->more), "elm,state,open", "elm"); + else + edje_object_signal_emit(elm_layout_edje_get(wd->more), "elm,state,open2", "elm"); + } + else + { + if (it->in_box != wd->bx) + { + edje_object_signal_emit(wd->VIEW(more_item), "elm,state,selected", "elm"); + elm_widget_signal_emit(wd->more_item->icon, "elm,state,selected", "elm"); + } + else + { + edje_object_signal_emit(wd->VIEW(more_item), "elm,state,unselected", "elm"); + elm_widget_signal_emit(wd->more_item->icon, "elm,state,unselected", "elm"); + } + edje_object_signal_emit(elm_layout_edje_get(wd->more), "elm,state,close", "elm"); + } + } edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); elm_widget_signal_emit(it->icon, "elm,state,selected", "elm"); _item_show(it); @@ -244,7 +279,6 @@ _item_del(Elm_Toolbar_Item *it) { Elm_Toolbar_Item_State *it_state; _item_unselect(it); - elm_widget_item_pre_notify_del(it); EINA_LIST_FREE(it->states, it_state) { if (it->icon == it_state->icon) @@ -255,11 +289,16 @@ _item_del(Elm_Toolbar_Item *it) free(it_state); } eina_stringshare_del(it->label); + if (it->label) edje_object_signal_emit(VIEW(it), "elm,state,text,hidden", "elm"); eina_stringshare_del(it->icon_str); - if (it->icon) evas_object_del(it->icon); + if (it->icon) + { + edje_object_signal_emit(VIEW(it), "elm,state,icon,hidden", "elm"); + evas_object_del(it->icon); + } + if (it->object) evas_object_del(it->object); //TODO: See if checking for wd->menu_parent is necessary before deleting menu if (it->o_menu) evas_object_del(it->o_menu); - elm_widget_item_del(it); } static void @@ -270,14 +309,18 @@ _del_pre_hook(Evas_Object *obj) if (!wd) return; it = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items); - while(it) + while (it) { next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next); _item_del(it); + elm_widget_item_free(it); it = next; } if (wd->more_item) - _item_del(wd->more_item); + { + _item_del(wd->more_item); + elm_widget_item_free(wd->more_item); + } if (wd->long_timer) { ecore_timer_del(wd->long_timer); @@ -299,19 +342,20 @@ static void _mirrored_set_item(Evas_Object *obj __UNUSED__, Elm_Toolbar_Item *it, Eina_Bool mirrored) { edje_object_mirrored_set(VIEW(it), mirrored); - elm_widget_mirrored_set(it->o_menu, mirrored); + if (it->o_menu) elm_widget_mirrored_set(it->o_menu, mirrored); } static void _theme_hook_item(Evas_Object *obj, Elm_Toolbar_Item *it, double scale, int icon_size) { + Widget_Data *wd = elm_widget_data_get(obj); Evas_Object *view = VIEW(it); - Evas_Coord mw, mh; + Evas_Coord mw, mh, minw, minh; const char *style = elm_widget_style_get(obj); _mirrored_set_item(obj, it, elm_widget_mirrored_get(obj)); edje_object_scale_set(view, scale); - if (!it->separator) + if (!it->separator && !it->object) { _elm_theme_object_set(obj, view, "toolbar", "item", style); if (it->selected) @@ -331,21 +375,51 @@ _theme_hook_item(Evas_Object *obj, Elm_Toolbar_Item *it, double scale, int icon_ ms = ((double)icon_size * scale); evas_object_size_hint_min_set(it->icon, ms, ms); evas_object_size_hint_max_set(it->icon, ms, ms); - edje_object_part_swallow(view, "elm.swallow.icon", - it->icon); + edje_object_part_swallow(view, "elm.swallow.icon", it->icon); + edje_object_signal_emit(VIEW(it), "elm,state,icon,visible", "elm"); + } + if (it->label) + { + edje_object_part_text_escaped_set(view, "elm.text", it->label); + edje_object_signal_emit(VIEW(it), "elm,state,text,visible", "elm"); } - edje_object_part_text_set(view, "elm.text", it->label); } else - _elm_theme_object_set(obj, view, "toolbar", "separator", style); + { + if (!it->object) + { + _elm_theme_object_set(obj, view, "toolbar", "separator", style); + if (wd->vertical) + { + evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(view, EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(view, -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(view, 0.5, EVAS_HINT_FILL); + } + } + else + { + _elm_theme_object_set(obj, view, "toolbar", "object", style); + edje_object_part_swallow(view, "elm.swallow.object", it->object); + } + } - mw = mh = -1; - if (!it->separator) + mw = mh = minw = minh = -1; + if (!it->separator && !it->object) elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(view, &mw, &mh, mw, mh); - if (!it->separator) + if (!it->separator && !it->object) elm_coords_finger_size_adjust(1, &mw, 1, &mh); - evas_object_size_hint_min_set(view, mw, mh); + evas_object_size_hint_min_get(view, &minw, &minh); + if ((minw < mw) && (minh < mh)) + evas_object_size_hint_min_set(view, mw, mh); + else if ((minw < mw) && (minh > mh)) + evas_object_size_hint_min_set(view, mw, minh); + else if ((minw > mw) && (minh < mh)) + evas_object_size_hint_min_set(view, minw, mh); } static void @@ -370,6 +444,7 @@ _theme_hook(Evas_Object *obj) if (!wd) return; _elm_widget_mirrored_reload(obj); elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", elm_widget_style_get(obj)); + elm_layout_theme_set(wd->more, "toolbar", "more", elm_widget_style_get(obj)); _mirrored_set(obj, elm_widget_mirrored_get(obj)); scale = (elm_widget_scale_get(obj) * _elm_config->scale); edje_object_scale_set(wd->scr, scale); @@ -386,17 +461,68 @@ _item_text_set_hook(Elm_Object_Item *it, const char *part, const char *label) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); if (part && strcmp(part, "default")) return; - _item_label_set(((Elm_Toolbar_Item *) it), label, "elm,state,label_set"); + _item_label_set(((Elm_Toolbar_Item *)it), label, "elm,state,label_set"); } static const char * _item_text_get_hook(const Elm_Object_Item *it, const char *part) { - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); if (part && strcmp(part, "default")) return NULL; - return ((Elm_Toolbar_Item *) it)->label; + return ((Elm_Toolbar_Item *)it)->label; +} + +static void +_item_content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content) +{ + double scale; + + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + if (part && strcmp(part, "object")) return; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Evas_Object *obj = WIDGET(item); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd || !obj) return; + if (item->object == content) return; + + if (item->object) evas_object_del(item->object); + + item->object = content; + if (item->object) + elm_widget_sub_object_add(obj, item->object); + scale = (elm_widget_scale_get(obj) * _elm_config->scale); + _theme_hook_item(obj, item, scale, wd->icon_size); +} + +static Evas_Object * +_item_content_get_hook(const Elm_Object_Item *it, const char *part) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + if (part && strcmp(part, "object")) return NULL; + return ((Elm_Toolbar_Item *) it)->object; +} + +static Evas_Object * +_item_content_unset_hook(Elm_Object_Item *it, const char *part) +{ + Evas_Object *o; + double scale; + + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + if (part && strcmp(part, "object")) return NULL; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Evas_Object *obj = WIDGET(item); + Widget_Data *wd = elm_widget_data_get(obj); + + edje_object_part_unswallow(VIEW(it), item->object); + elm_widget_sub_object_del(obj, item->object); + o = item->object; + item->object = NULL; + scale = (elm_widget_scale_get(obj) * _elm_config->scale); + _theme_hook_item(obj, item, scale, wd->icon_size); + return o; } static void @@ -409,11 +535,12 @@ static void _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - Evas_Coord minw = -1, minh = -1, minw_bx, minh_bx; + Evas_Coord minw = -1, minh = -1, minw_bx = -1, minh_bx = -1; Evas_Coord vw = 0, vh = 0; Evas_Coord w, h; if (!wd) return; + evas_object_smart_need_recalculate_set(wd->bx, EINA_TRUE); evas_object_smart_calculate(wd->bx); edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); @@ -422,24 +549,48 @@ _sizing_eval(Evas_Object *obj) if (h < minh) h = minh; evas_object_resize(wd->scr, w, h); - evas_object_size_hint_min_get(wd->bx, &minw, &minh); - minw_bx = minw; - minh_bx = minh; - if (wd->vertical && (h > minh)) minh = h; - if ((!wd->vertical) && (w > minw)) minw = w; - evas_object_resize(wd->bx, minw, minh); + evas_object_size_hint_min_get(wd->bx, &minw_bx, &minh_bx); +// if (wd->vertical && (h > minh)) minh = h; +// if ((!wd->vertical) && (w > minw)) minw = w; elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_NONE) { - if (wd->vertical) minh = minh_bx + (h - vh); - else minw = minw_bx + (w - vw); + if (wd->vertical) + { + minw = minw_bx + (w - vw); + minh = minh_bx + (h - vh); + } + else + { + minw = minw_bx + (w - vw); + minh = minh_bx + (h - vh); + } + } + else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) + { + minw = minw_bx + (w - vw); + minh = minh_bx + (h - vh); + if (minw_bx < vw) minw_bx = vw; + if (minh_bx < vh) minh_bx = vh; } else { - if (wd->vertical) minh = h - vh; - else minw = w - vw; + if (wd->vertical) + { + minw = minw_bx + (w - vw); + minh = h - vh; + } + else + { + minw = w - vw; + minh = minh_bx + (h - vh); + } +// if (wd->vertical) minh = h - vh; +// else minw = w - vw; +// minh = minh + (h - vh); } - minh = minh + (h - vh); + evas_object_resize(wd->bx, minw_bx, minh_bx); + evas_object_resize(wd->more, w, h); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, -1, -1); } @@ -447,7 +598,7 @@ _sizing_eval(Evas_Object *obj) static void _item_menu_create(Widget_Data *wd, Elm_Toolbar_Item *item) { - item->o_menu = elm_menu_add(VIEW(item)); + item->o_menu = elm_menu_add(WIDGET(item)); item->menu = EINA_TRUE; if (wd->menu_parent) elm_menu_parent_set(item->o_menu, wd->menu_parent); @@ -477,15 +628,29 @@ _toolbar_item_prio_compare_cb(const void *i1, const void *i2) if (!eti2) return 1; if (!eti1) return -1; + if (eti2->prio.priority == eti1->prio.priority) + return -1; + return eti2->prio.priority - eti1->prio.priority; } static void -_fix_items_visibility(Widget_Data *wd, Evas_Coord *iw, Evas_Coord vw) +_fix_items_visibility(Widget_Data *wd, Evas_Coord *iw, Evas_Coord vw, Eina_Bool *more) { - Elm_Toolbar_Item *it; + Elm_Toolbar_Item *it, *prev; Eina_List *sorted = NULL; - Evas_Coord ciw; + Evas_Coord ciw = 0, cih = 0; + int count = 0, i = 0; + *more = EINA_FALSE; + + EINA_INLIST_FOREACH(wd->items, it) + { + if (it->separator) + { + prev = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev); + it->prio.priority = prev->prio.priority; + } + } EINA_INLIST_FOREACH(wd->items, it) { @@ -495,14 +660,32 @@ _fix_items_visibility(Widget_Data *wd, Evas_Coord *iw, Evas_Coord vw) if (wd->more_item) { - evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, &ciw, NULL); - *iw += ciw; + evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, &ciw, &cih); + if (wd->vertical) *iw += cih; + else *iw += ciw; } + EINA_LIST_FREE(sorted, it) { - evas_object_geometry_get(VIEW(it), NULL, NULL, &ciw, NULL); - *iw += ciw; - it->prio.visible = (*iw <= vw); + if (it->prio.priority > wd->standard_priority) + { + evas_object_geometry_get(VIEW(it), NULL, NULL, &ciw, &cih); + if (wd->vertical) *iw += cih; + else *iw += ciw; + it->prio.visible = (*iw <= vw); + it->in_box = wd->bx; + if (!it->separator) count++; + } + else + { + it->prio.visible = EINA_FALSE; + if (!it->separator) i++; + if (i <= (count + 1)) + it->in_box = wd->bx_more; + else + it->in_box = wd->bx_more2; + *more = EINA_TRUE; + } } } @@ -516,10 +699,12 @@ _elm_toolbar_item_menu_cb(void *data, Evas_Object *obj __UNUSED__, void *event_i static void _resize_job(void *data) { - Widget_Data *wd = elm_widget_data_get(data); - Evas_Coord mw, mh, vw, vh, w, h; + Evas_Object *obj = (Evas_Object *)data; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Coord mw, mh, vw = 0, vh = 0, w = 0, h = 0; Elm_Toolbar_Item *it; - Evas_Object *obj = (Evas_Object *) data; + Eina_List *list; + Eina_Bool more; if (!wd) return; wd->resize_job = NULL; @@ -528,26 +713,40 @@ _resize_job(void *data) evas_object_geometry_get(wd->bx, NULL, NULL, &w, &h); if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_MENU) { - Evas_Coord iw = 0, more_w; + Evas_Coord iw = 0, ih = 0, more_w = 0, more_h = 0; - evas_object_resize(wd->bx, vw, h); - _fix_items_visibility(wd, &iw, vw); - evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, &more_w, NULL); - if (iw - more_w <= vw) - iw -= more_w; + if (wd->vertical) + { + evas_object_resize(wd->bx, w, vh); + _fix_items_visibility(wd, &ih, vh, &more); + } + else + { + evas_object_resize(wd->bx, vw, h); + _fix_items_visibility(wd, &iw, vw, &more); + } + evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, + &more_w, &more_h); + if (wd->vertical) + { + if ((ih - more_h) <= vh) ih -= more_h; + } + else + { + if ((iw - more_w) <= vw) iw -= more_w; + } /* All items are removed from the box object, since removing individual * items won't trigger a resize. Items are be readded below. */ evas_object_box_remove_all(wd->bx, EINA_FALSE); - if (iw > vw) + if (((wd->vertical) && (ih > vh)) || + ((!wd->vertical) && (iw > vw)) || more) { Evas_Object *menu; _item_menu_destroy(wd->more_item); _item_menu_create(wd, wd->more_item); - menu = - elm_toolbar_item_menu_get((Elm_Object_Item *) wd->more_item); - + menu = elm_toolbar_item_menu_get((Elm_Object_Item *)wd->more_item); EINA_INLIST_FOREACH(wd->items, it) { if (!it->prio.visible) @@ -557,11 +756,11 @@ _resize_job(void *data) else { Elm_Object_Item *menu_it; - menu_it = elm_menu_item_add(menu, NULL, - it->icon_str, it->label, - _elm_toolbar_item_menu_cb, it); - elm_object_item_disabled_set(menu_it, - elm_widget_item_disabled_get(it)); + menu_it = elm_menu_item_add + (menu, NULL, it->icon_str, it->label, + _elm_toolbar_item_menu_cb, it); + elm_object_item_disabled_set + (menu_it, elm_widget_item_disabled_get(it)); if (it->o_menu) elm_menu_clone(it->o_menu, menu, menu_it); } @@ -573,7 +772,6 @@ _resize_job(void *data) evas_object_show(VIEW(it)); } } - evas_object_box_append(wd->bx, wd->VIEW(more_item)); evas_object_show(wd->VIEW(more_item)); } @@ -591,12 +789,21 @@ _resize_job(void *data) } else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_HIDE) { - Evas_Coord iw = 0; + Evas_Coord iw = 0, ih = 0; - evas_object_resize(wd->bx, vw, h); - _fix_items_visibility(wd, &iw, vw); + if (wd->vertical) + { + evas_object_resize(wd->bx, w, vh); + _fix_items_visibility(wd, &ih, vh, &more); + } + else + { + evas_object_resize(wd->bx, vw, h); + _fix_items_visibility(wd, &iw, vw, &more); + } evas_object_box_remove_all(wd->bx, EINA_FALSE); - if (iw > vw) + if (((wd->vertical) && (ih > vh)) || + ((!wd->vertical) && (iw > vw)) || more) { EINA_INLIST_FOREACH(wd->items, it) { @@ -619,9 +826,50 @@ _resize_job(void *data) } } } + else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) + { + Evas_Coord iw = 0, ih = 0; + if ((vw >= mw) && (vh >= mh)) + evas_object_resize(wd->bx, vw, vh); + else if (vw < mw) + evas_object_resize(wd->bx, mw, vh); + else if (vh < mh) + evas_object_resize(wd->bx, vw, mh); + + if (wd->vertical) + _fix_items_visibility(wd, &ih, vh, &more); + else + _fix_items_visibility(wd, &iw, vw, &more); + + evas_object_box_remove_all(wd->bx, EINA_FALSE); + evas_object_box_remove_all(wd->bx_more, EINA_FALSE); + evas_object_box_remove_all(wd->bx_more2, EINA_FALSE); + EINA_INLIST_FOREACH(wd->items, it) + { + if (it->in_box) + { + evas_object_box_append(it->in_box, VIEW(it)); + evas_object_show(VIEW(it)); + } + } + if (more) + { + evas_object_box_append(wd->bx, wd->VIEW(more_item)); + evas_object_show(wd->VIEW(more_item)); + } + else + evas_object_hide(wd->VIEW(more_item)); + } else { - if ((vw >= mw) && (w != vw)) evas_object_resize(wd->bx, vw, h); + if (wd->vertical) + { + if ((vh >= mh) && (h != vh)) evas_object_resize(wd->bx, w, vh); + } + else + { + if ((vw >= mw) && (w != vw)) evas_object_resize(wd->bx, vw, h); + } EINA_INLIST_FOREACH(wd->items, it) { if (it->selected) @@ -632,6 +880,30 @@ _resize_job(void *data) } } + // Remove the first or last separator since it is not neccessary + list = evas_object_box_children_get(wd->bx_more); + EINA_INLIST_FOREACH(wd->items, it) + { + if (it->separator && ((VIEW(it) == eina_list_data_get(list)) || + (VIEW(it) == eina_list_nth(list, eina_list_count(list)-1)))) + { + evas_object_box_remove(wd->bx_more, VIEW(it)); + evas_object_move(VIEW(it), -9999, -9999); + evas_object_hide(VIEW(it)); + } + } + list = evas_object_box_children_get(wd->bx_more2); + EINA_INLIST_FOREACH(wd->items, it) + { + if (it->separator && ((VIEW(it) == eina_list_data_get(list)) || + (VIEW(it) == eina_list_nth(list, eina_list_count(list)-1)))) + { + evas_object_box_remove(wd->bx_more2, VIEW(it)); + evas_object_move(VIEW(it), -9999, -9999); + evas_object_hide(VIEW(it)); + } + } + _mirrored_set(obj, elm_widget_mirrored_get(obj)); } @@ -646,11 +918,23 @@ static void _resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Widget_Data *wd = elm_widget_data_get(data); + Evas_Coord x, y, h; + evas_object_geometry_get(data, &x, &y, NULL, &h); + evas_object_move(wd->more, x, y + h); if (!wd->resize_job) wd->resize_job = ecore_job_add(_resize_job, data); } static void +_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Widget_Data *wd = elm_widget_data_get(data); + Evas_Coord x, y, h; + evas_object_geometry_get(data, &x, &y, NULL, &h); + evas_object_move(wd->more, x, y + h); +} + +static void _select_filter(Elm_Toolbar_Item *it, Evas_Object *obj __UNUSED__, const char *emission, const char *source __UNUSED__) { int button; @@ -676,17 +960,194 @@ _select(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__ } } +static void +_change_items(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + Elm_Toolbar_Item *prev = NULL, *next = NULL; + int tmp; + + if ((wd->reorder_from) && (wd->reorder_to) && + (!wd->reorder_from->separator) && (!wd->reorder_to->separator)) + { + prev = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(wd->reorder_from)->prev); + if (!prev) + next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(wd->reorder_from)->next); + + wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(wd->reorder_from)); + wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(wd->reorder_from), + EINA_INLIST_GET(wd->reorder_to)); + + wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(wd->reorder_to)); + if (prev) + wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(wd->reorder_to), + EINA_INLIST_GET(prev)); + else if (next) + wd->items = eina_inlist_prepend_relative(wd->items, EINA_INLIST_GET(wd->reorder_to), + EINA_INLIST_GET(next)); + tmp = wd->reorder_from->prio.priority; + wd->reorder_from->prio.priority = wd->reorder_to->prio.priority; + wd->reorder_to->prio.priority = tmp; + } + _resize(obj, NULL, NULL, NULL); +} + +static void +_reorder_mouse_move(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Move *ev) +{ + Widget_Data *wd = elm_widget_data_get(WIDGET(it)); + if (!wd) return; + Evas_Coord w, h; + evas_object_geometry_get(VIEW(it), NULL, NULL, &w, &h); + evas_object_move(VIEW(it), ev->cur.canvas.x - (w / 2), ev->cur.canvas.y - (h /2)); + evas_object_show(VIEW(it)); +} + +static void +_reorder_mouse_up(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Up *ev) +{ + Widget_Data *wd = elm_widget_data_get(WIDGET(it)); + if (!wd) return; + Evas_Coord x, y, w, h; + + evas_object_event_callback_del_full(wd->scr, EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + evas_object_event_callback_del_full(wd->more, EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + evas_object_event_callback_del_full(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + evas_object_event_callback_del_full(wd->scr, EVAS_CALLBACK_MOUSE_UP, + (Evas_Object_Event_Cb)_reorder_mouse_up, it); + evas_object_event_callback_del_full(wd->more, EVAS_CALLBACK_MOUSE_UP, + (Evas_Object_Event_Cb)_reorder_mouse_up, it); + _item_del(it); + elm_widget_item_free(it); + + EINA_INLIST_FOREACH(wd->items, it) + { + evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); + if ((x < ev->canvas.x) && (ev->canvas.x < x + w) && + (y < ev->canvas.y) && (ev->canvas.y < y + h)) + { + wd->reorder_to = it; + _change_items(WIDGET(it)); + } + } +} + +static void +_item_reorder_start(Elm_Toolbar_Item *item) +{ + Evas_Object *obj = WIDGET(item); + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *icon_obj; + Evas_Coord x, y, w, h; + Elm_Toolbar_Item *it; + + wd->reorder_from = item; + + icon_obj = elm_icon_add(obj); + elm_icon_order_lookup_set(icon_obj, wd->lookup_order); + if (!icon_obj) return; + it = elm_widget_item_new(obj, Elm_Toolbar_Item); + if (!it) + { + evas_object_del(icon_obj); + return; + } + + it->label = eina_stringshare_add(item->label); + VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + + if (_item_icon_set(icon_obj, "toolbar/", item->icon_str)) + { + it->icon = icon_obj; + it->icon_str = eina_stringshare_add(item->icon_str); + } + else + { + it->icon = NULL; + it->icon_str = NULL; + evas_object_del(icon_obj); + } + + _elm_theme_object_set(obj, VIEW(it), "toolbar", "item", + elm_widget_style_get(obj)); + if (it->icon) + { + int ms = 0; + + ms = ((double)wd->icon_size * _elm_config->scale); + evas_object_size_hint_min_set(it->icon, ms, ms); + evas_object_size_hint_max_set(it->icon, ms, ms); + edje_object_part_swallow(VIEW(it), "elm.swallow.icon", it->icon); + edje_object_signal_emit(VIEW(it), "elm,state,icon,visible", "elm"); + evas_object_show(it->icon); + elm_widget_sub_object_add(obj, it->icon); + } + if (it->label) + { + edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); + edje_object_signal_emit(VIEW(it), "elm,state,text,visible", "elm"); + } + + edje_object_signal_emit(VIEW(it), "elm,state,moving", "elm"); + + evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + + evas_object_event_callback_add(wd->more, EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + + evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_reorder_mouse_move, it); + + evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_MOUSE_UP, + (Evas_Object_Event_Cb)_reorder_mouse_up, it); + + evas_object_event_callback_add(wd->more, EVAS_CALLBACK_MOUSE_UP, + (Evas_Object_Event_Cb)_reorder_mouse_up, it); + + evas_object_geometry_get(VIEW(item), &x, &y, &w, &h); + evas_object_resize(VIEW(it), w, h); + evas_object_move(VIEW(it), x, y); + evas_object_show(VIEW(it)); +} + static Eina_Bool _long_press(Elm_Toolbar_Item *it) { Widget_Data *wd = elm_widget_data_get(WIDGET(it)); wd->long_timer = NULL; wd->long_press = EINA_TRUE; + + if ((wd->more_item != it) && + (wd->more_item == (Elm_Toolbar_Item *)elm_toolbar_selected_item_get(WIDGET(it)))) + _item_reorder_start(it); + evas_object_smart_callback_call(WIDGET(it), SIG_LONGPRESSED, it); return ECORE_CALLBACK_CANCEL; } static void +_mouse_move(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Move *ev) +{ + Widget_Data *wd = elm_widget_data_get(WIDGET(it)); + if (!wd) return; + Evas_Coord x, y, w, h; + evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); + + if ((wd->long_timer) && + ((x > ev->cur.canvas.x) || (ev->cur.canvas.x > x + w) || + (y > ev->cur.canvas.y) || (ev->cur.canvas.y > y + h))) + { + ecore_timer_del(wd->long_timer); + wd->long_timer = NULL; + } +} + +static void _mouse_down(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Down *ev) { Widget_Data *wd = elm_widget_data_get(WIDGET(it)); @@ -697,6 +1158,8 @@ _mouse_down(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUS wd->long_press = EINA_FALSE; if (wd->long_timer) ecore_timer_interval_set(wd->long_timer, _elm_config->longpress_timeout); else wd->long_timer = ecore_timer_add(_elm_config->longpress_timeout, (Ecore_Task_Cb)_long_press, it); + evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_mouse_move, it); } static void @@ -710,6 +1173,8 @@ _mouse_up(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED ecore_timer_del(wd->long_timer); wd->long_timer = NULL; } + evas_object_event_callback_del_full(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, + (Evas_Object_Event_Cb)_mouse_move, it); } static void @@ -734,7 +1199,8 @@ _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) Evas_Object *obj = (Evas_Object *) data; Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - _els_box_layout(o, priv, !wd->vertical, wd->homogeneous, elm_widget_mirrored_get(obj)); + _els_box_layout(o, priv, !wd->vertical, wd->homogeneous, + elm_widget_mirrored_get(obj)); } static char * @@ -762,6 +1228,30 @@ _access_state_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Widget_ return NULL; } +static Eina_Bool +_item_del_pre_hook(Elm_Object_Item *it) +{ + Widget_Data *wd; + Evas_Object *obj2; + Elm_Toolbar_Item *item, *next; + item = (Elm_Toolbar_Item *)it; + + wd = elm_widget_data_get(WIDGET(item)); + if (!wd) return EINA_FALSE; + + obj2 = WIDGET(item); + next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next); + wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item)); + wd->item_count--; + if (!next) next = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items); + if ((wd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS) && + item->selected && next) _item_select(next); + _item_del(item); + _theme_hook(obj2); + + return EINA_TRUE; +} + static Elm_Toolbar_Item * _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) { @@ -780,15 +1270,20 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f return NULL; } - elm_widget_item_disable_set_hook_set(it, _item_disable_set_hook); + elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook); + elm_widget_item_disable_hook_set(it, _item_disable_hook); elm_widget_item_text_set_hook_set(it, _item_text_set_hook); elm_widget_item_text_get_hook_set(it, _item_text_get_hook); + elm_widget_item_content_set_hook_set(it, _item_content_set_hook); + elm_widget_item_content_get_hook_set(it, _item_content_get_hook); + elm_widget_item_content_unset_hook_set(it, _item_content_unset_hook); it->label = eina_stringshare_add(label); it->prio.visible = 1; it->prio.priority = 0; it->func = func; it->separator = EINA_FALSE; + it->object = NULL; it->base.data = data; VIEW(it) = edje_object_add(evas_object_evas_get(obj)); _elm_access_item_register(&it->base, VIEW(it)); @@ -834,53 +1329,84 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f evas_object_size_hint_min_set(it->icon, ms, ms); evas_object_size_hint_max_set(it->icon, ms, ms); edje_object_part_swallow(VIEW(it), "elm.swallow.icon", it->icon); + edje_object_signal_emit(VIEW(it), "elm,state,icon,visible", "elm"); evas_object_show(it->icon); elm_widget_sub_object_add(obj, it->icon); } - edje_object_part_text_set(VIEW(it), "elm.text", it->label); + if (it->label) + { + edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); + edje_object_signal_emit(VIEW(it), "elm,state,text,visible", "elm"); + } mw = mh = -1; - elm_coords_finger_size_adjust(1, &mw, 1, &mh); + if (!it->separator && !it->object) + elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(VIEW(it), &mw, &mh, mw, mh); - elm_coords_finger_size_adjust(1, &mw, 1, &mh); - if (wd->vertical) + if (!it->separator && !it->object) + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND) { - evas_object_size_hint_weight_set(VIEW(it), EVAS_HINT_EXPAND, -1.0); - evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, 0.5); + if (wd->vertical) + { + evas_object_size_hint_weight_set(VIEW(it), EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(VIEW(it), -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(it), 0.5, EVAS_HINT_FILL); + } } else { - evas_object_size_hint_weight_set(VIEW(it), -1.0, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(VIEW(it), 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(VIEW(it), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, EVAS_HINT_FILL); } evas_object_size_hint_min_set(VIEW(it), mw, mh); + evas_object_size_hint_max_set(VIEW(it), -1, -1); evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_RESIZE, _resize_item, obj); - if ((!wd->items) && wd->always_select) _item_select(it); - wd->item_count++; + if ((!wd->items) && (wd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)) + _item_select(it); return it; } static void _elm_toolbar_item_label_update(Elm_Toolbar_Item *item) { - Evas_Coord mw = -1, mh = -1; + Evas_Coord mw = -1, mh = -1, minw = -1, minh = -1; Widget_Data *wd = elm_widget_data_get(WIDGET(item)); - edje_object_part_text_set(VIEW(item), "elm.text", item->label); + edje_object_part_text_escaped_set(VIEW(item), "elm.text", item->label); + edje_object_signal_emit(VIEW(item), "elm,state,text,visible", "elm"); elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh); elm_coords_finger_size_adjust(1, &mw, 1, &mh); - if (wd->vertical) + if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND) { - evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); - evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + if (wd->vertical) + { + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + } } else { - evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL); } - evas_object_size_hint_min_set(VIEW(item), mw, mh); + evas_object_size_hint_min_get(VIEW(item), &minw, &minh); + if ((minw < mw) && (minh < mh)) + evas_object_size_hint_min_set(VIEW(item), mw, mh); + else if ((minw < mw) && (minh > mh)) + evas_object_size_hint_min_set(VIEW(item), mw, minh); + else if ((minw > mw) && (minh < mh)) + evas_object_size_hint_min_set(VIEW(item), minw, mh); } static void @@ -894,7 +1420,7 @@ _elm_toolbar_item_label_set_cb (void *data, Evas_Object *obj, const char *emissi } static void -_item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal) +_item_label_set(Elm_Toolbar_Item *item, const char *label, const char *sig) { const char *s; @@ -904,8 +1430,8 @@ _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal) s = edje_object_data_get(VIEW(item), "transition_animation_on"); if ((s) && (atoi(s))) { - edje_object_part_text_set(VIEW(item), "elm.text_new", item->label); - edje_object_signal_emit (VIEW(item), signal, "elm"); + edje_object_part_text_escaped_set(VIEW(item), "elm.text_new", item->label); + edje_object_signal_emit (VIEW(item), sig, "elm"); edje_object_signal_callback_add(VIEW(item), "elm,state,label_set,done", "elm", _elm_toolbar_item_label_set_cb, item); @@ -920,31 +1446,48 @@ _elm_toolbar_item_icon_update(Elm_Toolbar_Item *item) { Elm_Toolbar_Item_State *it_state; Eina_List *l; - Evas_Coord mw = -1, mh = -1; + Evas_Coord mw = -1, mh = -1, minw = -1, minh = -1; Widget_Data *wd = elm_widget_data_get(WIDGET(item)); Evas_Object *old_icon = edje_object_part_swallow_get(VIEW(item), "elm.swallow.icon"); elm_widget_sub_object_del(VIEW(item), old_icon); - evas_object_hide(old_icon); + /* edje_object_part_unswallow(VIEW(item), old_icon); */ edje_object_part_swallow(VIEW(item), "elm.swallow.icon", item->icon); + edje_object_signal_emit(VIEW(item), "elm,state,icon,visible", "elm"); + evas_object_hide(old_icon); elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh); elm_coords_finger_size_adjust(1, &mw, 1, &mh); - if (wd->vertical) + if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND) { - evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); - evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + if (wd->vertical) + { + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + } } else { - evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL); } - evas_object_size_hint_min_set(VIEW(item), mw, mh); + evas_object_size_hint_min_get(VIEW(item), &minw, &minh); + if ((minw < mw) && (minh < mh)) + evas_object_size_hint_min_set(VIEW(item), mw, mh); + else if ((minw < mw) && (minh > mh)) + evas_object_size_hint_min_set(VIEW(item), mw, minh); + else if ((minw > mw) && (minh < mh)) + evas_object_size_hint_min_set(VIEW(item), minw, mh); EINA_LIST_FOREACH(item->states, l, it_state) - if (it_state->icon == old_icon) - return; + { + if (it_state->icon == old_icon) return; + } evas_object_del(old_icon); } @@ -960,7 +1503,7 @@ _elm_toolbar_item_icon_set_cb (void *data, Evas_Object *obj, const char *emissio } static void -_elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal) +_elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *sig) { Evas_Object *old_icon; int ms = 0; @@ -994,7 +1537,7 @@ _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Ob } edje_object_part_swallow(VIEW(item), "elm.swallow.icon_new", item->icon); - edje_object_signal_emit (VIEW(item), signal, "elm"); + edje_object_signal_emit (VIEW(item), sig, "elm"); edje_object_signal_callback_add(VIEW(item), "elm,state,icon_set,done", "elm", _elm_toolbar_item_icon_set_cb, item); @@ -1045,10 +1588,11 @@ elm_toolbar_add(Evas_Object *parent) elm_widget_del_hook_set(obj, _del_hook); elm_widget_theme_hook_set(obj, _theme_hook); elm_widget_translate_hook_set(obj, _translate_hook); - elm_widget_can_focus_set(obj, EINA_FALSE); + elm_widget_can_focus_set(obj, EINA_TRUE); wd->more_item = NULL; wd->selected_item = NULL; + wd->standard_priority = -99999; wd->scr = elm_smart_scroller_add(e); elm_smart_scroller_widget_set(wd->scr, obj); elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", "default"); @@ -1060,7 +1604,6 @@ elm_toolbar_add(Evas_Object *parent) ELM_SMART_SCROLLER_POLICY_AUTO, ELM_SMART_SCROLLER_POLICY_OFF); - wd->icon_size = _elm_toolbar_icon_size_get(wd); @@ -1074,8 +1617,28 @@ elm_toolbar_add(Evas_Object *parent) elm_smart_scroller_child_set(wd->scr, wd->bx); evas_object_show(wd->bx); - elm_toolbar_mode_shrink_set(obj, _elm_config->toolbar_shrink_mode); + wd->more = elm_layout_add(obj); + elm_layout_theme_set(wd->more, "toolbar", "more", "default"); + elm_widget_sub_object_add(obj, wd->more); + evas_object_show(wd->more); + + wd->bx_more = evas_object_box_add(e); + evas_object_size_hint_align_set(wd->bx_more, wd->align, 0.5); + evas_object_box_layout_set(wd->bx_more, _layout, obj, NULL); + elm_widget_sub_object_add(obj, wd->bx_more); + elm_object_part_content_set(wd->more, "elm.swallow.content", wd->bx_more); + evas_object_show(wd->bx_more); + + wd->bx_more2 = evas_object_box_add(e); + evas_object_size_hint_align_set(wd->bx_more2, wd->align, 0.5); + evas_object_box_layout_set(wd->bx_more2, _layout, obj, NULL); + elm_widget_sub_object_add(obj, wd->bx_more2); + elm_object_part_content_set(wd->more, "elm.swallow.content2", wd->bx_more2); + evas_object_show(wd->bx_more2); + + elm_toolbar_shrink_mode_set(obj, _elm_config->toolbar_shrink_mode); evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_RESIZE, _resize, obj); + evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_MOVE, _move, obj); evas_object_event_callback_add(wd->bx, EVAS_CALLBACK_RESIZE, _resize, obj); elm_toolbar_icon_order_lookup_set(obj, ELM_ICON_LOOKUP_THEME_FDO); @@ -1122,8 +1685,9 @@ elm_toolbar_item_append(Evas_Object *obj, const char *icon, const char *label, E _theme_hook_item(obj, it, scale, wd->icon_size); _sizing_eval(obj); + wd->item_count++; - return (Elm_Object_Item *) it; + return (Elm_Object_Item *)it; } EAPI Elm_Object_Item * @@ -1142,8 +1706,9 @@ elm_toolbar_item_prepend(Evas_Object *obj, const char *icon, const char *label, evas_object_show(VIEW(it)); _theme_hook_item(obj, it, scale, wd->icon_size); _sizing_eval(obj); + wd->item_count++; - return (Elm_Object_Item *) it; + return (Elm_Object_Item *)it; } EAPI Elm_Object_Item * @@ -1167,8 +1732,9 @@ elm_toolbar_item_insert_before(Evas_Object *obj, Elm_Object_Item *before, const evas_object_show(VIEW(it)); _theme_hook_item(obj, it, scale, wd->icon_size); _sizing_eval(obj); + wd->item_count++; - return (Elm_Object_Item *) it; + return (Elm_Object_Item *)it; } EAPI Elm_Object_Item * @@ -1192,8 +1758,9 @@ elm_toolbar_item_insert_after(Evas_Object *obj, Elm_Object_Item *after, const ch evas_object_show(VIEW(it)); _theme_hook_item(obj, it, scale, wd->icon_size); _sizing_eval(obj); + wd->item_count++; - return (Elm_Object_Item *) it; + return (Elm_Object_Item *)it; } EAPI Elm_Object_Item * @@ -1219,7 +1786,7 @@ elm_toolbar_item_next_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST( - EINA_INLIST_GET(((Elm_Toolbar_Item *) it))->next); + EINA_INLIST_GET(((Elm_Toolbar_Item *)it))->next); } EAPI Elm_Object_Item * @@ -1227,21 +1794,14 @@ elm_toolbar_item_prev_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST( - EINA_INLIST_GET(((Elm_Toolbar_Item *) it))->prev); -} - -EAPI Evas_Object * -elm_toolbar_item_toolbar_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return elm_object_item_object_get(it); + EINA_INLIST_GET(((Elm_Toolbar_Item *)it))->prev); } EAPI void elm_toolbar_item_priority_set(Elm_Object_Item *it, int priority) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; if (item->prio.priority == priority) return; item->prio.priority = priority; _resize(WIDGET(item), NULL, NULL, NULL); @@ -1251,31 +1811,7 @@ EAPI int elm_toolbar_item_priority_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, 0); - return ((Elm_Toolbar_Item *) it)->prio.priority; -} - -EAPI const char * -elm_toolbar_item_label_get(const Elm_Object_Item *it) -{ - return _item_text_get_hook(it, NULL); -} - -EAPI void -elm_toolbar_item_label_set(Elm_Object_Item *it, const char *label) -{ - _item_text_set_hook(it, NULL, label); -} - -EAPI void * -elm_toolbar_item_data_get(const Elm_Object_Item *it) -{ - return elm_object_item_data_get(it); -} - -EAPI void -elm_toolbar_item_data_set(Elm_Object_Item *it, const void *data) -{ - elm_object_item_data_set(it, (void *) data); + return ((Elm_Toolbar_Item *)it)->prio.priority; } EAPI Elm_Object_Item * @@ -1289,7 +1825,7 @@ elm_toolbar_item_find_by_label(const Evas_Object *obj, const char *label) EINA_INLIST_FOREACH(wd->items, it) { if (!strcmp(it->label, label)) - return (Elm_Object_Item *) it; + return (Elm_Object_Item *)it; } return NULL; } @@ -1298,7 +1834,7 @@ EAPI void elm_toolbar_item_selected_set(Elm_Object_Item *it, Eina_Bool selected) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; Widget_Data *wd = elm_widget_data_get(WIDGET(item)); if (!wd) return; @@ -1311,7 +1847,7 @@ EAPI Eina_Bool elm_toolbar_item_selected_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return ((Elm_Toolbar_Item *) it)->selected; + return ((Elm_Toolbar_Item *)it)->selected; } EAPI Elm_Object_Item * @@ -1323,6 +1859,15 @@ elm_toolbar_selected_item_get(const Evas_Object *obj) return (Elm_Object_Item *) wd->selected_item; } +EAPI Elm_Object_Item * +elm_toolbar_more_item_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + return (Elm_Object_Item *) wd->more_item; +} + EAPI void elm_toolbar_item_icon_set(Elm_Object_Item *it, const char *icon) { @@ -1331,7 +1876,7 @@ elm_toolbar_item_icon_set(Elm_Object_Item *it, const char *icon) Evas_Object *icon_obj; Widget_Data *wd; Evas_Object *obj; - Elm_Toolbar_Item * item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item * item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1355,7 +1900,7 @@ EAPI const char * elm_toolbar_item_icon_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return ((Elm_Toolbar_Item *) it)->icon_str; + return ((Elm_Toolbar_Item *)it)->icon_str; } EAPI Evas_Object * @@ -1365,7 +1910,7 @@ elm_toolbar_item_object_get(const Elm_Object_Item *it) Widget_Data *wd; Evas_Object *obj; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1378,7 +1923,7 @@ EAPI Evas_Object * elm_toolbar_item_icon_object_get(Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return ((Elm_Toolbar_Item *) it)->icon; + return ((Elm_Toolbar_Item *)it)->icon; } EAPI Eina_Bool @@ -1390,7 +1935,7 @@ elm_toolbar_item_icon_memfile_set(Elm_Object_Item *it, const void *img, size_t s Widget_Data *wd; Evas_Object *obj; Eina_Bool ret; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1423,7 +1968,7 @@ elm_toolbar_item_icon_file_set(Elm_Object_Item *it, const char *file, const char Widget_Data *wd; Evas_Object *obj; Eina_Bool ret; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1448,50 +1993,10 @@ elm_toolbar_item_icon_file_set(Elm_Object_Item *it, const char *file, const char } EAPI void -elm_toolbar_item_del(Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - - Widget_Data *wd; - Evas_Object *obj2; - Elm_Toolbar_Item *item, *next; - item = (Elm_Toolbar_Item *) it; - - wd = elm_widget_data_get(WIDGET(item)); - if (!wd) return; - obj2 = WIDGET(item); - next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next); - wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item)); - wd->item_count--; - if (!next) next = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items); - if (wd->always_select && item->selected && next) _item_select(next); - _item_del(item); - _theme_hook(obj2); -} - -EAPI void -elm_toolbar_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func) -{ - elm_object_item_del_cb_set(it, func); -} - -EAPI Eina_Bool -elm_toolbar_item_disabled_get(const Elm_Object_Item *it) -{ - return elm_object_item_disabled_get(it); -} - -EAPI void -elm_toolbar_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled) -{ - elm_object_item_disabled_set(it, disabled); -} - -EAPI void elm_toolbar_item_separator_set(Elm_Object_Item *it, Eina_Bool separator) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; Evas_Object *obj = WIDGET(item); Widget_Data *wd = elm_widget_data_get(obj); double scale; @@ -1499,17 +2004,18 @@ elm_toolbar_item_separator_set(Elm_Object_Item *it, Eina_Bool separator) item->separator = separator; scale = (elm_widget_scale_get(obj) * _elm_config->scale); _theme_hook_item(obj, item, scale, wd->icon_size); + evas_object_size_hint_min_set(VIEW(item), -1, -1); } EAPI Eina_Bool elm_toolbar_item_separator_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return ((Elm_Toolbar_Item *) it)->separator; + return ((Elm_Toolbar_Item *)it)->separator; } EAPI void -elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode) +elm_toolbar_shrink_mode_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode) { ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); @@ -1524,19 +2030,25 @@ elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mod if (wd->more_item) { _item_del(wd->more_item); + elm_widget_item_free(wd->more_item); wd->more_item = NULL; } if (shrink_mode == ELM_TOOLBAR_SHRINK_MENU) { - elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF, ELM_SMART_SCROLLER_POLICY_OFF); - - wd->more_item = _item_new(obj, "more_menu", "More", - NULL, NULL); + elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF, + ELM_SMART_SCROLLER_POLICY_OFF); + wd->more_item = _item_new(obj, "more_menu", "More", NULL, NULL); } else if (shrink_mode == ELM_TOOLBAR_SHRINK_HIDE) elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF, ELM_SMART_SCROLLER_POLICY_OFF); + else if (shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) + { + elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_AUTO, + ELM_SMART_SCROLLER_POLICY_OFF); + wd->more_item = _item_new(obj, "more_menu", "More", NULL, NULL); + } else elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_AUTO, ELM_SMART_SCROLLER_POLICY_OFF); @@ -1544,7 +2056,7 @@ elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mod } EAPI Elm_Toolbar_Shrink_Mode -elm_toolbar_mode_shrink_get(const Evas_Object *obj) +elm_toolbar_shrink_mode_get(const Evas_Object *obj) { ELM_CHECK_WIDTYPE(obj, widtype) ELM_TOOLBAR_SHRINK_NONE; Widget_Data *wd = elm_widget_data_get(obj); @@ -1610,8 +2122,16 @@ elm_toolbar_align_set(Evas_Object *obj, double align) Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if (wd->align != align) - evas_object_size_hint_align_set(wd->bx, align, 0.5); + if (wd->vertical) + { + if (wd->align != align) + evas_object_size_hint_align_set(wd->bx, 0.5, align); + } + else + { + if (wd->align != align) + evas_object_size_hint_align_set(wd->bx, align, 0.5); + } wd->align = align; } @@ -1629,7 +2149,7 @@ EAPI void elm_toolbar_item_menu_set(Elm_Object_Item *it, Eina_Bool menu) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; Widget_Data *wd = elm_widget_data_get(WIDGET(item)); if (!wd) return; @@ -1642,7 +2162,7 @@ EAPI Evas_Object * elm_toolbar_item_menu_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; if (!item->menu) return NULL; Widget_Data *wd = elm_widget_data_get(WIDGET(item)); if (!wd) return NULL; @@ -1658,7 +2178,7 @@ elm_toolbar_item_state_add(Elm_Object_Item *it, const char *icon, const char *la Evas_Object *icon_obj; Evas_Object *obj; Widget_Data *wd; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(WIDGET(item)); if (!wd) return NULL; @@ -1712,7 +2232,7 @@ elm_toolbar_item_state_del(Elm_Object_Item *it, Elm_Toolbar_Item_State *state) if (!state) return EINA_FALSE; - item = (Elm_Toolbar_Item *) it; + item = (Elm_Toolbar_Item *)it; if (!item->states) return EINA_FALSE; del_state = eina_list_data_find_list(item->states, state); @@ -1748,7 +2268,7 @@ elm_toolbar_item_state_set(Elm_Object_Item *it, Elm_Toolbar_Item_State *state) Eina_List *next_state; Elm_Toolbar_Item_State *it_state; Evas_Object *obj; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1801,7 +2321,7 @@ EAPI Elm_Toolbar_Item_State * elm_toolbar_item_state_get(const Elm_Object_Item *it) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; if ((!item->states) || (!item->current_state)) return NULL; if (item->current_state == item->states) return NULL; @@ -1817,7 +2337,7 @@ elm_toolbar_item_state_next(Elm_Object_Item *it) Widget_Data *wd; Evas_Object *obj; Eina_List *next_state; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1838,7 +2358,7 @@ elm_toolbar_item_state_prev(Elm_Object_Item *it) Widget_Data *wd; Evas_Object *obj; Eina_List *prev_state; - Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it; + Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it; obj = WIDGET(item); wd = elm_widget_data_get(obj); @@ -1852,128 +2372,6 @@ elm_toolbar_item_state_prev(Elm_Object_Item *it) } EAPI void -elm_toolbar_item_tooltip_text_set(Elm_Object_Item *it, const char *text) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_tooltip_text_set(it, text); -} - -EAPI void -elm_toolbar_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_tooltip_content_cb_set(it, func, data, del_cb); -} - -EAPI void -elm_toolbar_item_tooltip_unset(Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_tooltip_unset(it); -} - -EAPI void -elm_toolbar_item_tooltip_style_set(Elm_Object_Item *it, const char *style) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_tooltip_style_set(it, style); -} - -EAPI const char * -elm_toolbar_item_tooltip_style_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return elm_widget_item_tooltip_style_get(it); -} - -EAPI void -elm_toolbar_item_cursor_set(Elm_Object_Item *it, const char *cursor) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_cursor_set(it, cursor); -} - -EAPI const char * -elm_toolbar_item_cursor_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return elm_widget_item_cursor_get(it); -} - -EAPI void -elm_toolbar_item_cursor_unset(Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_cursor_unset(it); -} - -EAPI void -elm_toolbar_item_cursor_style_set(Elm_Object_Item *it, const char *style) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_cursor_style_set(it, style); -} - -EAPI const char * -elm_toolbar_item_cursor_style_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - return elm_widget_item_cursor_style_get(it); -} - -EAPI void -elm_toolbar_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - elm_widget_item_cursor_engine_only_set(it, engine_only); -} - -EAPI Eina_Bool -elm_toolbar_item_cursor_engine_only_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return elm_widget_item_cursor_engine_only_get(it); -} - -EAPI void -elm_toolbar_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) -{ - ELM_CHECK_WIDTYPE(obj, widtype); - Widget_Data *wd = elm_widget_data_get(obj); - if (!wd) return; - if (always_select && (!wd->always_select) && wd->items) - _item_select(ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items)); - wd->always_select = always_select; -} - -EAPI Eina_Bool -elm_toolbar_always_select_mode_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->always_select; -} - -EAPI void -elm_toolbar_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select) -{ - ELM_CHECK_WIDTYPE(obj, widtype); - Widget_Data *wd = elm_widget_data_get(obj); - if (!wd) return; - wd->no_select = no_select; -} - -EAPI Eina_Bool -elm_toolbar_no_select_mode_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->no_select; -} - -EAPI void elm_toolbar_icon_order_lookup_set(Evas_Object *obj, Elm_Icon_Lookup_Order order) { ELM_CHECK_WIDTYPE(obj, widtype); @@ -1997,18 +2395,6 @@ elm_toolbar_icon_order_lookup_get(const Evas_Object *obj) return wd->lookup_order; } -EINA_DEPRECATED EAPI void -elm_toolbar_orientation_set(Evas_Object *obj, Eina_Bool vertical) -{ - elm_toolbar_horizontal_set(obj, !vertical); -} - -EINA_DEPRECATED EAPI Eina_Bool -elm_toolbar_orientation_get(const Evas_Object *obj) -{ - return !elm_toolbar_horizontal_get(obj); -} - EAPI void elm_toolbar_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) { @@ -2016,6 +2402,10 @@ elm_toolbar_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; wd->vertical = !horizontal; + if (wd->vertical) + evas_object_size_hint_align_set(wd->bx, 0.5, wd->align); + else + evas_object_size_hint_align_set(wd->bx, wd->align, 0.5); _sizing_eval(obj); } @@ -2036,3 +2426,48 @@ elm_toolbar_items_count(const Evas_Object *obj) if (!wd) return 0; return wd->item_count; } + +EAPI void +elm_toolbar_standard_priority_set(Evas_Object *obj, int priority) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + wd->standard_priority = priority; + _resize(obj, NULL, NULL, NULL); +} + +EAPI int +elm_toolbar_standard_priority_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) 0; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return 0; + return wd->standard_priority; +} + +EAPI void +elm_toolbar_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode mode) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (mode >= ELM_OBJECT_SELECT_MODE_MAX) + return; + if ((mode == ELM_OBJECT_SELECT_MODE_ALWAYS) && + (wd->select_mode != ELM_OBJECT_SELECT_MODE_ALWAYS) && + wd->items) + _item_select(ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items)); + if (wd->select_mode != mode) + wd->select_mode = mode; +} + +EAPI Elm_Object_Select_Mode +elm_toolbar_select_mode_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) ELM_OBJECT_SELECT_MODE_MAX; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return ELM_OBJECT_SELECT_MODE_MAX; + return wd->select_mode; +} +