Remove the APIs elm_toolbar_items_max_set/get.

Instead of them, add the APIs elm_toolbar_standard_priority_set/get.
The items which are lower than standard priority are located in more menu or panel.


SVN revision: 71777
This commit is contained in:
Jaehwan Kim 2012-06-07 07:32:55 +00:00
parent 528457fb98
commit 564b6f13c8
4 changed files with 66 additions and 88 deletions

View File

@ -156,3 +156,9 @@
2012-06-01 Mike Blumenkrantz 2012-06-01 Mike Blumenkrantz
* Re-setting the current mirrored mode state no longer causes a full recalc * Re-setting the current mirrored mode state no longer causes a full recalc
012-06-01 Mike Blumenkrantz
* Toolbar: Remove the APIs elm_toolbar_items_max_set/get.
Instead of them, add the APIs elm_toolbar_standard_priority_set/get.
The items which are lower than standard priority are located in more menu or panel.

View File

@ -124,7 +124,7 @@ test_toolbar(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_inf
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, -999999); elm_toolbar_item_priority_set(tb_it, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -228,7 +228,7 @@ test_toolbar2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(item, EINA_TRUE); elm_toolbar_item_menu_set(item, EINA_TRUE);
elm_toolbar_item_priority_set(item, -999999); elm_toolbar_item_priority_set(item, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(item); menu = elm_toolbar_item_menu_get(item);
@ -332,7 +332,7 @@ test_toolbar3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, 999999); elm_toolbar_item_priority_set(tb_it, 9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -436,7 +436,7 @@ test_toolbar4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, -999999); elm_toolbar_item_priority_set(tb_it, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -545,7 +545,7 @@ test_toolbar5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, -999999); elm_toolbar_item_priority_set(tb_it, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -650,7 +650,7 @@ test_toolbar6(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, -999999); elm_toolbar_item_priority_set(tb_it, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -754,7 +754,7 @@ test_toolbar7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
elm_toolbar_item_priority_set(tb_it, -999999); elm_toolbar_item_priority_set(tb_it, -9999);
elm_toolbar_menu_parent_set(tb, win); elm_toolbar_menu_parent_set(tb, win);
menu = elm_toolbar_item_menu_get(tb_it); menu = elm_toolbar_item_menu_get(tb_it);
@ -831,7 +831,7 @@ test_toolbar8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
tb = elm_toolbar_add(win); tb = elm_toolbar_add(win);
elm_toolbar_homogeneous_set(tb, EINA_FALSE); elm_toolbar_homogeneous_set(tb, EINA_FALSE);
elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND); elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND);
elm_toolbar_items_max_set(tb, 9); elm_toolbar_standard_priority_set(tb, 0);
evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);

View File

@ -15,8 +15,8 @@ struct _Widget_Data
Elm_Toolbar_Shrink_Mode shrink_mode; Elm_Toolbar_Shrink_Mode shrink_mode;
Elm_Icon_Lookup_Order lookup_order; Elm_Icon_Lookup_Order lookup_order;
int icon_size; int icon_size;
int standard_priority;
unsigned int item_count; unsigned int item_count;
unsigned int item_max;
double align; double align;
Elm_Object_Select_Mode select_mode; Elm_Object_Select_Mode select_mode;
Eina_Bool homogeneous : 1; Eina_Bool homogeneous : 1;
@ -612,45 +612,13 @@ _toolbar_item_prio_compare_cb(const void *i1, const void *i2)
} }
static void 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, *prev; Elm_Toolbar_Item *it, *prev;
Eina_List *sorted = NULL; Eina_List *sorted = NULL;
Evas_Coord ciw = 0, cih = 0; Evas_Coord ciw = 0, cih = 0;
int count = 0, i = 0;
EINA_INLIST_FOREACH(wd->items, it) *more = EINA_FALSE;
{
sorted = eina_list_sorted_insert(sorted,
_toolbar_item_prio_compare_cb, it);
}
if (wd->more_item)
{
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, &cih);
if (wd->vertical) *iw += cih;
else *iw += ciw;
if (!it->separator)
it->prio.visible = (*iw <= vw);
else
{
prev = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev);
it->prio.visible = prev->prio.visible;
}
}
}
static void
_fix_items_visibility_by_number(Widget_Data *wd, unsigned int *count)
{
Elm_Toolbar_Item *it, *prev, *next, *max = NULL;
Eina_List *sorted = NULL;
*count = 0;
EINA_INLIST_FOREACH(wd->items, it) EINA_INLIST_FOREACH(wd->items, it)
{ {
@ -667,37 +635,33 @@ _fix_items_visibility_by_number(Widget_Data *wd, unsigned int *count)
_toolbar_item_prio_compare_cb, it); _toolbar_item_prio_compare_cb, it);
} }
if (wd->more_item)
{
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) EINA_LIST_FREE(sorted, it)
{ {
*count += 1; if (it->prio.priority > wd->standard_priority)
if(*count <= wd->item_max)
{ {
it->prio.visible = EINA_TRUE; 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; it->in_box = wd->bx;
if (*count == wd->item_max) if (!it->separator) count++;
max = it;
} }
else else
{ {
it->prio.visible = EINA_FALSE; it->prio.visible = EINA_FALSE;
if (wd->item_count < (wd->item_max * 2) || if (!it->separator) i++;
*count <= (wd->item_count + wd->item_max) / 2) if (i <= (count + 1))
it->in_box = wd->bx_more; it->in_box = wd->bx_more;
else else
it->in_box = wd->bx_more2; it->in_box = wd->bx_more2;
*more = EINA_TRUE;
if (max)
{
max->prio.visible = EINA_FALSE;
max->in_box = wd->bx_more;
next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(max)->next);
if (next && next->separator)
{
next->prio.visible = max->prio.visible;
next->in_box = max->in_box;
}
max = NULL;
}
} }
} }
} }
@ -717,6 +681,7 @@ _resize_job(void *data)
Evas_Coord mw, mh, vw = 0, vh = 0, w = 0, h = 0; Evas_Coord mw, mh, vw = 0, vh = 0, w = 0, h = 0;
Elm_Toolbar_Item *it; Elm_Toolbar_Item *it;
Eina_List *list; Eina_List *list;
Eina_Bool more;
if (!wd) return; if (!wd) return;
wd->resize_job = NULL; wd->resize_job = NULL;
@ -730,12 +695,12 @@ _resize_job(void *data)
if (wd->vertical) if (wd->vertical)
{ {
evas_object_resize(wd->bx, w, vh); evas_object_resize(wd->bx, w, vh);
_fix_items_visibility(wd, &ih, vh); _fix_items_visibility(wd, &ih, vh, &more);
} }
else else
{ {
evas_object_resize(wd->bx, vw, h); evas_object_resize(wd->bx, vw, h);
_fix_items_visibility(wd, &iw, vw); _fix_items_visibility(wd, &iw, vw, &more);
} }
evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL,
&more_w, &more_h); &more_w, &more_h);
@ -752,7 +717,7 @@ _resize_job(void *data)
* items won't trigger a resize. Items are be readded below. */ * items won't trigger a resize. Items are be readded below. */
evas_object_box_remove_all(wd->bx, EINA_FALSE); evas_object_box_remove_all(wd->bx, EINA_FALSE);
if (((wd->vertical) && (ih > vh)) || if (((wd->vertical) && (ih > vh)) ||
((!wd->vertical) && (iw > vw))) ((!wd->vertical) && (iw > vw)) || more)
{ {
Evas_Object *menu; Evas_Object *menu;
@ -806,16 +771,16 @@ _resize_job(void *data)
if (wd->vertical) if (wd->vertical)
{ {
evas_object_resize(wd->bx, w, vh); evas_object_resize(wd->bx, w, vh);
_fix_items_visibility(wd, &ih, vh); _fix_items_visibility(wd, &ih, vh, &more);
} }
else else
{ {
evas_object_resize(wd->bx, vw, h); evas_object_resize(wd->bx, vw, h);
_fix_items_visibility(wd, &iw, vw); _fix_items_visibility(wd, &iw, vw, &more);
} }
evas_object_box_remove_all(wd->bx, EINA_FALSE); evas_object_box_remove_all(wd->bx, EINA_FALSE);
if (((wd->vertical) && (ih > vh)) || if (((wd->vertical) && (ih > vh)) ||
((!wd->vertical) && (iw > vw))) ((!wd->vertical) && (iw > vw)) || more)
{ {
EINA_INLIST_FOREACH(wd->items, it) EINA_INLIST_FOREACH(wd->items, it)
{ {
@ -840,14 +805,18 @@ _resize_job(void *data)
} }
else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND) else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND)
{ {
unsigned int count; Evas_Coord iw = 0, ih = 0;
if ((vw >= mw) && (vh >= mh)) if ((vw >= mw) && (vh >= mh))
evas_object_resize(wd->bx, vw, vh); evas_object_resize(wd->bx, vw, vh);
else if (vw < mw) else if (vw < mw)
evas_object_resize(wd->bx, mw, vh); evas_object_resize(wd->bx, mw, vh);
else if (vh < mh) else if (vh < mh)
evas_object_resize(wd->bx, vw, mh); evas_object_resize(wd->bx, vw, mh);
_fix_items_visibility_by_number(wd, &count);
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, EINA_FALSE);
evas_object_box_remove_all(wd->bx_more, EINA_FALSE); evas_object_box_remove_all(wd->bx_more, EINA_FALSE);
@ -860,7 +829,7 @@ _resize_job(void *data)
evas_object_show(VIEW(it)); evas_object_show(VIEW(it));
} }
} }
if (count > wd->item_max) if (more)
{ {
evas_object_box_append(wd->bx, wd->VIEW(more_item)); evas_object_box_append(wd->bx, wd->VIEW(more_item));
evas_object_show(wd->VIEW(more_item)); evas_object_show(wd->VIEW(more_item));
@ -896,6 +865,7 @@ _resize_job(void *data)
(VIEW(it) == eina_list_nth(list, eina_list_count(list)-1)))) (VIEW(it) == eina_list_nth(list, eina_list_count(list)-1))))
{ {
evas_object_box_remove(wd->bx_more, VIEW(it)); evas_object_box_remove(wd->bx_more, VIEW(it));
evas_object_move(VIEW(it), -9999, -9999);
evas_object_hide(VIEW(it)); evas_object_hide(VIEW(it));
} }
} }
@ -906,6 +876,7 @@ _resize_job(void *data)
(VIEW(it) == eina_list_nth(list, eina_list_count(list)-1)))) (VIEW(it) == eina_list_nth(list, eina_list_count(list)-1))))
{ {
evas_object_box_remove(wd->bx_more2, VIEW(it)); evas_object_box_remove(wd->bx_more2, VIEW(it));
evas_object_move(VIEW(it), -9999, -9999);
evas_object_hide(VIEW(it)); evas_object_hide(VIEW(it));
} }
} }
@ -1396,7 +1367,7 @@ elm_toolbar_add(Evas_Object *parent)
wd->more_item = NULL; wd->more_item = NULL;
wd->selected_item = NULL; wd->selected_item = NULL;
wd->item_max = 9999; wd->standard_priority = -99999;
wd->scr = elm_smart_scroller_add(e); wd->scr = elm_smart_scroller_add(e);
elm_smart_scroller_widget_set(wd->scr, obj); elm_smart_scroller_widget_set(wd->scr, obj);
elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", "default"); elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", "default");
@ -2231,21 +2202,22 @@ elm_toolbar_items_count(const Evas_Object *obj)
} }
EAPI void EAPI void
elm_toolbar_items_max_set(Evas_Object *obj, unsigned int max) elm_toolbar_standard_priority_set(Evas_Object *obj, int priority)
{ {
ELM_CHECK_WIDTYPE(obj, widtype); ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj); Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return; if (!wd) return;
wd->item_max = max; wd->standard_priority = priority;
_resize(obj, NULL, NULL, NULL);
} }
EAPI unsigned int EAPI int
elm_toolbar_items_max_get(const Evas_Object *obj) elm_toolbar_standard_priority_get(const Evas_Object *obj)
{ {
ELM_CHECK_WIDTYPE(obj, widtype) 0; ELM_CHECK_WIDTYPE(obj, widtype) 0;
Widget_Data *wd = elm_widget_data_get(obj); Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return 0; if (!wd) return 0;
return wd->item_max; return wd->standard_priority;
} }
EAPI void EAPI void

View File

@ -871,29 +871,29 @@ EAPI Eina_Bool elm_toolbar_horizontal_get(const Evas_Object *
EAPI unsigned int elm_toolbar_items_count(const Evas_Object *obj); EAPI unsigned int elm_toolbar_items_count(const Evas_Object *obj);
/** /**
* Set the max number of visible items in a toolbar * Set the standard priority of visible items in a toolbar
* @param obj The toolbar object * @param obj The toolbar object
* @param max The max number of visible items * @param priority The standard_priority of visible items
* *
* When it is the ELM_TOOLBAR_SHRINK_EXPAND mode, the items are shown only up to max number. * When it is the ELM_TOOLBAR_SHRINK_EXPAND mode, the items are shown only up to standard priority.
* The other items are located in more panel. The more panel can be shown when the more item is clicked. * The other items are located in more panel. The more panel can be shown when the more item is clicked.
* *
* @see elm_toolbar_items_max_get() * @see elm_toolbar_standard_priority_get()
* *
* @ingroup Toolbar * @ingroup Toolbar
*/ */
EAPI void elm_toolbar_items_max_set(Evas_Object *obj, unsigned int max); EAPI void elm_toolbar_standard_priority_set(Evas_Object *obj, int priority);
/** /**
* Get the max number of visible items in a toolbar * Get the standard_priority of visible items in a toolbar
* @param obj The toolbar object * @param obj The toolbar object
* @return The max number of items in @p obj toolbar * @return The standard priority of items in @p obj toolbar
* *
* @see elm_toolbar_items_max_set() * @see elm_toolbar_standard_priority_set()
* *
* @ingroup Toolbar * @ingroup Toolbar
*/ */
EAPI unsigned int elm_toolbar_items_max_get(const Evas_Object *obj); EAPI int elm_toolbar_standard_priority_get(const Evas_Object *obj);
/** /**
* Set the toolbar select mode. * Set the toolbar select mode.