Log:
Change toolbar API for consistency with other widgets
BIG FAT WARNING: lots of changes on toolbar API
Trying to get a lib with easy to use API, I'm changing toolbar API
to be consistent with genlist / gengrid widgets and to be more concise.
Functions select_next, select_first, select_last, unselect, unselect_all
get all are gone.
You can do this calling a combination of the others functions.
This commit changes toolbar to use inlist, and previous items can be
get.
So now we have:
Elm_Toolbar_Item *elm_toolbar_first_item_get(const Evas_Object *obj)
Elm_Toolbar_Item *elm_toolbar_last_item_get(const Evas_Object *obj)
Elm_Toolbar_Item *elm_toolbar_item_next_get(const Elm_Toolbar_Item *it)
Elm_Toolbar_Item *elm_toolbar_item_prev_get(const Elm_Toolbar_Item *it)
Eina_Bool elm_toolbar_item_selected_get(const Elm_Toolbar_Item)
void elm_toolbar_item_selected_set(Elm_Toolbar_Item *item, Eina_Bool selected)
Elm_Toolbar_Item *elm_toolbar_selected_item_get(const Evas_Object *obj)
With these functions you can iterate over the items list getting /
selecting the item you need.
Another big change is that elm_toolbar_item_add is gone. Now you can
insert items in the position you want, with the functions append,
prepend, insert after, insert before (a relative item).
If you don't like any changes or have a case of use for something
that should be different, please ping me.
At last, includes ELM_TOOLBAR_ITEM_CHECK_OR_RETURN on EAPI that
receives items.
Author: bdilly
Date: 2010-10-26 03:29:24 -0700 (Tue, 26 Oct 2010)
New Revision: 53894
Modified:
trunk/TMP/st/elementary/src/bin/config.c trunk/TMP/st/elementary/src/bin/test_cursor.c trunk/TMP/st/elementary/src/bin/test_flip.c trunk/TMP/st/elementary/src/bin/test_panel.c trunk/TMP/st/elementary/src/bin/test_toolbar.c trunk/TMP/st/elementary/src/bin/test_tooltip.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_toolbar.c
Modified: trunk/TMP/st/elementary/src/bin/config.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/config.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/config.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -949,20 +949,20 @@
evas_object_size_hint_weight_set(tb, 1.0, 0.0);
evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
- sizing = it = elm_toolbar_item_add(tb, "zoom-fit-best", "Sizing", _cf_sizing, win);
+ sizing = it = elm_toolbar_item_append(tb, "zoom-fit-best", "Sizing", _cf_sizing, win);
elm_toolbar_item_priority_set(it, 100);
- it = elm_toolbar_item_add(tb, "preferences-desktop-theme", "Theme", _cf_themes, win);
+ it = elm_toolbar_item_append(tb, "preferences-desktop-theme", "Theme", _cf_themes, win);
elm_toolbar_item_priority_set(it, 90);
- elm_toolbar_item_add(tb, "preferences-desktop-font", "Fonts", _cf_fonts, win);
+ elm_toolbar_item_append(tb, "preferences-desktop-font", "Fonts", _cf_fonts, win);
- it = elm_toolbar_item_add(tb, "system-users", "Profiles", _cf_profiles, win);
+ it = elm_toolbar_item_append(tb, "system-users", "Profiles", _cf_profiles, win);
elm_toolbar_item_priority_set(it, 90);
- elm_toolbar_item_add(tb, "system-run", "Scrolling", _cf_scrolling, win);
- elm_toolbar_item_add(tb, "video-display", "Rendering", _cf_rendering, win);
- elm_toolbar_item_add(tb, "appointment-new", "Caches", _cf_caches, win);
+ elm_toolbar_item_append(tb, "system-run", "Scrolling", _cf_scrolling, win);
+ elm_toolbar_item_append(tb, "video-display", "Rendering", _cf_rendering, win);
+ elm_toolbar_item_append(tb, "appointment-new", "Caches", _cf_caches, win);
elm_box_pack_end(bx0, tb);
evas_object_show(tb);
@@ -989,7 +989,7 @@
evas_object_show(fl);
evas_object_data_set(win, "flip", fl);
- elm_toolbar_item_select(sizing);
+ elm_toolbar_item_selected_set(sizing, EINA_TRUE);
}
static void
Modified: trunk/TMP/st/elementary/src/bin/test_cursor.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/test_cursor.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/test_cursor.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -200,12 +200,12 @@
elm_toolbar_homogenous_set(o, 0);
evas_object_size_hint_weight_set(o, 0.0, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
- tit = elm_toolbar_item_add(o, NULL, "Bogosity", NULL, NULL);
+ tit = elm_toolbar_item_append(o, NULL, "Bogosity", NULL, NULL);
elm_toolbar_item_cursor_set(tit, ELM_CURSOR_BOGOSITY);
- tit = elm_toolbar_item_add(o, NULL, "Unset", NULL, NULL);
+ tit = elm_toolbar_item_append(o, NULL, "Unset", NULL, NULL);
elm_toolbar_item_cursor_set(tit, ELM_CURSOR_BOGOSITY);
elm_toolbar_item_cursor_unset(tit);
- tit = elm_toolbar_item_add(o, NULL, "Xterm", NULL, NULL);
+ tit = elm_toolbar_item_append(o, NULL, "Xterm", NULL, NULL);
elm_toolbar_item_cursor_set(tit, ELM_CURSOR_XTERM);
elm_box_pack_end(bx, o);
evas_object_show(o);
Modified: trunk/TMP/st/elementary/src/bin/test_flip.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/test_flip.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/test_flip.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -239,10 +239,10 @@
evas_object_size_hint_weight_set(tb, 0.0, 0.0);
evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
- elm_toolbar_item_add(tb, "arrow_left", "Hello", NULL, NULL);
- elm_toolbar_item_add(tb, "arrow_right", "Out", NULL, NULL);
- elm_toolbar_item_add(tb, "home", "There", NULL, NULL);
- elm_toolbar_item_add(tb, "refresh", "World", NULL, NULL);
+ elm_toolbar_item_append(tb, "arrow_left", "Hello", NULL, NULL);
+ elm_toolbar_item_append(tb, "arrow_right", "Out", NULL, NULL);
+ elm_toolbar_item_append(tb, "home", "There", NULL, NULL);
+ elm_toolbar_item_append(tb, "refresh", "World", NULL, NULL);
elm_box_pack_end(o, tb);
evas_object_show(tb);
Modified: trunk/TMP/st/elementary/src/bin/test_panel.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/test_panel.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/test_panel.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -18,6 +18,7 @@
static void
_tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
+ Elm_Toolbar_Item *sel;
const char *status;
if (elm_panel_hidden_get((Evas_Object*)data))
@@ -25,12 +26,14 @@
else
status = "shown";
printf("The top panel is currently %s\n", status);
- elm_toolbar_item_unselect_all(obj);
+ sel = elm_toolbar_selected_item_get(obj);
+ elm_toolbar_item_selected_set(sel, EINA_FALSE);
}
static void
_bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
+ Elm_Toolbar_Item *sel;
const char *status;
if (elm_panel_hidden_get((Evas_Object*)data))
@@ -38,7 +41,8 @@
else
status = "shown";
printf("The bottom panel is currently %s\n", status);
- elm_toolbar_item_unselect_all(obj);
+ sel = elm_toolbar_selected_item_get(obj);
+ elm_toolbar_item_selected_set(sel, EINA_FALSE);
}
static char *
@@ -182,7 +186,7 @@
evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(toolbar);
- elm_toolbar_item_add(toolbar, "home", "Hello", _tstatus, panel);
+ elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel);
elm_panel_content_set(panel, toolbar);
elm_box_pack_end(vbx, panel);
@@ -246,7 +250,7 @@
evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(toolbar);
- elm_toolbar_item_add(toolbar, "home", "Hello", _bstatus, panel);
+ elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel);
elm_panel_content_set(panel, toolbar);
elm_box_pack_end(vbx, panel);
Modified: trunk/TMP/st/elementary/src/bin/test_toolbar.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/test_toolbar.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/test_toolbar.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -75,23 +75,23 @@
ph3 = elm_photo_add(win);
ph4 = elm_photo_add(win);
- item = elm_toolbar_item_add(tb, "document-print", "Hello", tb_1, ph1);
+ item = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1);
elm_toolbar_item_disabled_set(item, EINA_TRUE);
elm_toolbar_item_priority_set(item, 100);
- item = elm_toolbar_item_add(tb, "folder-new", "World", tb_2, ph1);
+ item = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1);
elm_toolbar_item_priority_set(item, -100);
- item = elm_toolbar_item_add(tb, "object-rotate-right", "H", tb_3, ph4);
+ item = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4);
elm_toolbar_item_priority_set(item, 150);
- item = elm_toolbar_item_add(tb, "mail-send", "Comes", tb_4, ph4);
+ item = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4);
elm_toolbar_item_priority_set(item, 0);
- item = elm_toolbar_item_add(tb, "clock", "Elementary", tb_5, ph4);
+ item = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4);
elm_toolbar_item_priority_set(item, -200);
- item = elm_toolbar_item_add(tb, "refresh", "Menu", NULL, NULL);
+ item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(item, 1);
elm_toolbar_item_priority_set(item, -999999);
elm_toolbar_menu_parent_set(tb, win);
@@ -185,23 +185,23 @@
ph3 = elm_photo_add(win);
ph4 = elm_photo_add(win);
- item = elm_toolbar_item_add(tb, "document-print", "Hello", tb_1, ph1);
+ item = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1);
elm_toolbar_item_disabled_set(item, EINA_TRUE);
elm_toolbar_item_priority_set(item, -100);
- item = elm_toolbar_item_add(tb, "folder-new", "World", tb_2, ph1);
+ item = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1);
elm_toolbar_item_priority_set(item, 100);
- item = elm_toolbar_item_add(tb, "object-rotate-right", "H", tb_3, ph4);
+ item = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4);
elm_toolbar_item_priority_set(item, -150);
- item = elm_toolbar_item_add(tb, "mail-send", "Comes", tb_4, ph4);
+ item = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4);
elm_toolbar_item_priority_set(item, -200);
- item = elm_toolbar_item_add(tb, "clock", "Elementary", tb_5, ph4);
+ item = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4);
elm_toolbar_item_priority_set(item, 0);
- item = elm_toolbar_item_add(tb, "refresh", "Menu", NULL, NULL);
+ item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(item, 1);
elm_toolbar_item_priority_set(item, -999999);
elm_toolbar_menu_parent_set(tb, win);
@@ -295,23 +295,23 @@
ph3 = elm_photo_add(win);
ph4 = elm_photo_add(win);
- item = elm_toolbar_item_add(tb, "document-print", "Hello", tb_1, ph1);
+ item = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1);
elm_toolbar_item_disabled_set(item, EINA_TRUE);
elm_toolbar_item_priority_set(item, 0);
- item = elm_toolbar_item_add(tb, "folder-new", "World", tb_2, ph1);
+ item = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1);
elm_toolbar_item_priority_set(item, -200);
- item = elm_toolbar_item_add(tb, "object-rotate-right", "H", tb_3, ph4);
+ item = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4);
elm_toolbar_item_priority_set(item, 1);
- item = elm_toolbar_item_add(tb, "mail-send", "Comes", tb_4, ph4);
+ item = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4);
elm_toolbar_item_priority_set(item, -10);
- item = elm_toolbar_item_add(tb, "clock", "Elementary", tb_5, ph4);
+ item = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4);
elm_toolbar_item_priority_set(item, 50);
- item = elm_toolbar_item_add(tb, "refresh", "Menu", NULL, NULL);
+ item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL);
elm_toolbar_item_menu_set(item, 1);
elm_toolbar_item_priority_set(item, 999999);
elm_toolbar_menu_parent_set(tb, win);
Modified: trunk/TMP/st/elementary/src/bin/test_tooltip.c
===================================================================
--- trunk/TMP/st/elementary/src/bin/test_tooltip.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/bin/test_tooltip.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -288,10 +288,10 @@
elm_box_pack_end(bx, tb);
evas_object_show(tb);
- ti = elm_toolbar_item_add(tb, NULL, "Open", NULL, NULL);
+ ti = elm_toolbar_item_append(tb, NULL, "Open", NULL, NULL);
elm_toolbar_item_tooltip_text_set(ti, "Opens a file");
- ti = elm_toolbar_item_add(tb, NULL, "Icon", NULL, NULL);
+ ti = elm_toolbar_item_append(tb, NULL, "Icon", NULL, NULL);
elm_toolbar_item_tooltip_content_cb_set
(ti, _tt_item_icon, (void *)456L, _tt_item_icon_del);
elm_toolbar_item_tooltip_style_set(ti, "transparent");
Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in
===================================================================
--- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-26 10:29:24 UTC (rev 53894)
@@ -1171,17 +1171,27 @@
EAPI Evas_Object *elm_toolbar_add(Evas_Object *parent);
EAPI void elm_toolbar_icon_size_set(Evas_Object *obj, int icon_size);
EAPI int elm_toolbar_icon_size_get(const Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_add(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_append(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_prepend(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_insert_before(Evas_Object *obj, Elm_Toolbar_Item *before, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_insert_after(Evas_Object *obj, Elm_Toolbar_Item *after, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
+ EAPI Elm_Toolbar_Item *elm_toolbar_first_item_get(const Evas_Object *obj);
+ EAPI Elm_Toolbar_Item *elm_toolbar_last_item_get(const Evas_Object *obj);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_next_get(const Elm_Toolbar_Item *item);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_prev_get(const Elm_Toolbar_Item *item);
+ EAPI Evas_Object *elm_toolbar_item_toolbar_get(const Elm_Toolbar_Item *item);
EAPI void elm_toolbar_item_priority_set(Elm_Toolbar_Item *item, int priority);
EAPI int elm_toolbar_item_priority_get(const Elm_Toolbar_Item *item);
EAPI const char *elm_toolbar_item_icon_name_get(const Elm_Toolbar_Item *item);
EAPI Evas_Object *elm_toolbar_item_icon_get(const Elm_Toolbar_Item *item);
EAPI const char *elm_toolbar_item_label_get(const Elm_Toolbar_Item *item);
- EAPI Eina_Bool elm_toolbar_item_selected_get(const Elm_Toolbar_Item *item);
EAPI void elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label);
+ EAPI Elm_Toolbar_Item *elm_toolbar_item_find_by_label(const Evas_Object *obj, const char *label);
+ EAPI Eina_Bool elm_toolbar_item_selected_get(const Elm_Toolbar_Item *item);
+ EAPI void elm_toolbar_item_selected_set(Elm_Toolbar_Item *item, Eina_Bool selected);
+ EAPI Elm_Toolbar_Item *elm_toolbar_selected_item_get(const Evas_Object *obj);
EAPI void elm_toolbar_item_del(Elm_Toolbar_Item *item);
- EAPI void elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *it, Evas_Smart_Cb func);
- EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item);
+ EAPI void elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *item, Evas_Smart_Cb func);
EAPI Eina_Bool elm_toolbar_item_disabled_get(const Elm_Toolbar_Item *item);
EAPI void elm_toolbar_item_disabled_set(Elm_Toolbar_Item *item, Eina_Bool disabled);
EAPI void elm_toolbar_item_separator_set(Elm_Toolbar_Item *item, Eina_Bool separator);
@@ -1192,8 +1202,6 @@
EAPI Eina_Bool elm_toolbar_homogenous_get(const Evas_Object *obj);
EAPI void elm_toolbar_menu_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI Evas_Object *elm_toolbar_menu_parent_get(const Evas_Object *obj);
- EAPI void elm_toolbar_item_unselect_all(Evas_Object *obj);
- EAPI void elm_toolbar_item_unselect(Elm_Toolbar_Item *item);
EAPI void elm_toolbar_align_set(Evas_Object *obj, double align);
EAPI double elm_toolbar_align_get(const Evas_Object *obj);
EAPI void elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu);
@@ -1210,15 +1218,6 @@
EAPI const char *elm_toolbar_item_cursor_style_get(const Elm_Toolbar_Item *item);
EAPI void elm_toolbar_item_cursor_engine_only_set(Elm_Toolbar_Item *item, Eina_Bool engine_only);
EAPI Eina_Bool elm_toolbar_item_cursor_engine_only_get(const Elm_Toolbar_Item *item);
-
- EAPI Eina_List *elm_toolbar_item_get_all(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_get_first(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_get_last(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_get_next(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_select_next(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_select_first(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_select_last(Evas_Object *obj);
- EAPI Elm_Toolbar_Item *elm_toolbar_item_find_by_label(Evas_Object *obj, const char *label);
/* smart callbacks called:
* "clicked" - when the user clicks on a toolbar item and becomes selected
*/
Modified: trunk/TMP/st/elementary/src/lib/elm_toolbar.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-10-26 10:22:30 UTC (rev 53893)
+++ trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-10-26 10:29:24 UTC (rev 53894)
@@ -14,8 +14,8 @@
{
Evas_Object *scr, *bx;
Evas_Object *menu_parent;
- Eina_List *items;
- Elm_Toolbar_Item *more_item;
+ Eina_Inlist *items;
+ Elm_Toolbar_Item *more_item, *selected_item;
Elm_Toolbar_Shrink_Mode shrink_mode;
int icon_size;
double align;
@@ -25,6 +25,7 @@
struct _Elm_Toolbar_Item
{
Elm_Widget_Item base;
+ EINA_INLIST;
const char *label;
const char *icon_str;
Evas_Object *icon;
@@ -40,9 +41,17 @@
Eina_Bool menu : 1;
};
+#define ELM_TOOLBAR_ITEM_FROM_INLIST(item) \
+ ((item) ? EINA_INLIST_CONTAINER_GET(item, Elm_Toolbar_Item) : NULL)
+
+#define ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(it, ...) \
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *)it, __VA_ARGS__); \
+ ELM_CHECK_WIDTYPE(it->base.widget, widtype) __VA_ARGS__;
+
static const char *widtype = NULL;
static void _item_show(Elm_Toolbar_Item *it);
static void _item_select(Elm_Toolbar_Item *it);
+static void _item_unselect(Elm_Toolbar_Item *it);
static void _item_disable(Elm_Toolbar_Item *it, Eina_Bool disabled);
static void _del_pre_hook(Evas_Object *obj);
static void _del_hook(Evas_Object *obj);
@@ -83,26 +92,32 @@
}
static void
+_item_unselect(Elm_Toolbar_Item *item)
+{
+ Widget_Data *wd;
+ if ((!item) || (!item->selected)) return;
+ wd = elm_widget_data_get(item->base.widget);
+ if (!wd) return;
+ item->selected = EINA_FALSE;
+ wd->selected_item = NULL;
+ edje_object_signal_emit(item->base.view, "elm,state,unselected", "elm");
+}
+
+static void
_item_select(Elm_Toolbar_Item *it)
{
Elm_Toolbar_Item *it2;
Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Object *obj2;
- const Eina_List *l;
if (!wd) return;
if ((it->selected) || (it->disabled) || (it->separator)) return;
- EINA_LIST_FOREACH(wd->items, l, it2)
- {
- if (it2->selected)
- {
- it2->selected = EINA_FALSE;
- edje_object_signal_emit
- (it2->base.view, "elm,state,unselected", "elm");
- break;
- }
- }
+
+ it2 = elm_toolbar_selected_item_get(it->base.widget);
+ _item_unselect(it2);
+
it->selected = EINA_TRUE;
+ wd->selected_item = it;
edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
_item_show(it);
obj2 = it->base.widget;
@@ -123,8 +138,10 @@
static void
_menu_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
+ Elm_Toolbar_Item *selected;
Elm_Toolbar_Item *it = data;
- elm_toolbar_item_unselect_all(it->base.widget);
+ selected = elm_toolbar_selected_item_get(it->base.widget);
+ _item_unselect(selected);
}
static void
@@ -165,16 +182,19 @@
_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
- Elm_Toolbar_Item *it;
+ Elm_Toolbar_Item *it, *next;
if (!wd) return;
- EINA_LIST_FREE(wd->items, it)
+ it = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
+ while(it)
{
+ next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->label);
if (it->icon) evas_object_del(it->icon);
if ((!wd->menu_parent) && (it->o_menu)) evas_object_del(it->o_menu);
elm_widget_item_del(it);
+ it = next;
}
}
@@ -191,7 +211,6 @@
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
- const Eina_List *l;
Elm_Toolbar_Item *it;
const char *style = elm_widget_style_get(obj);
double scale = 0;
@@ -200,7 +219,7 @@
elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", elm_widget_style_get(obj));
scale = (elm_widget_scale_get(obj) * _elm_config->scale);
// edje_object_scale_set(wd->scr, scale);
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
Evas_Object *view = it->base.view;
Evas_Coord mw, mh;
@@ -311,7 +330,6 @@
{
Widget_Data *wd = elm_widget_data_get(data);
Evas_Coord mw, mh, vw, vh, w, h;
- const Eina_List *l;
Elm_Toolbar_Item *it;
if (!wd) return;
@@ -326,8 +344,14 @@
if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_MENU)
{
Evas_Coord iw = 0;
- Eina_List *sorted = eina_list_sort(eina_list_clone(wd->items), 0,
- _toolbar_item_prio_compare_cb);
+ Eina_List *sorted = NULL;
+
+ EINA_INLIST_FOREACH(wd->items, it)
+ {
+ sorted = eina_list_sorted_insert(sorted,
+ _toolbar_item_prio_compare_cb, it);
+ }
+
EINA_LIST_FREE(sorted, it)
{
Evas_Coord ciw;
@@ -348,7 +372,7 @@
_item_menu_create(wd, wd->more_item);
menu = elm_toolbar_item_menu_get(wd->more_item);
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
if (wd->more_item == it) continue;
if (!it->prio.visible)
@@ -378,7 +402,7 @@
else
{
/* All items are visible, show them all (except for the "More" button, of course). */
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
if (it == wd->more_item)
evas_object_hide(it->base.view);
@@ -392,7 +416,7 @@
}
else
{
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
if (it->selected)
{
@@ -417,6 +441,68 @@
_els_box_layout(o, priv, 1, wd->homogeneous);
}
+static Elm_Toolbar_Item *
+_item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Evas_Object *icon_obj;
+ Evas_Coord mw, mh;
+ Elm_Toolbar_Item *it;
+
+ icon_obj = elm_icon_add(obj);
+ if (!icon_obj) return NULL;
+ it = elm_widget_item_new(obj, Elm_Toolbar_Item);
+ if (!it)
+ {
+ evas_object_del(icon_obj);
+ return NULL;
+ }
+ it->label = eina_stringshare_add(label);
+ it->prio.visible = 1;
+ it->prio.priority = 0;
+ it->func = func;
+ it->separator = EINA_FALSE;
+ it->base.data = data;
+ it->base.view = edje_object_add(evas_object_evas_get(obj));
+ if (_item_icon_set(icon_obj, "toolbar/", icon))
+ {
+ it->icon = icon_obj;
+ it->icon_str = eina_stringshare_add(icon);
+ }
+ else
+ {
+ it->icon = NULL;
+ it->icon_str = NULL;
+ evas_object_del(icon_obj);
+ }
+
+ _elm_theme_object_set(obj, it->base.view, "toolbar", "item",
+ elm_widget_style_get(obj));
+ edje_object_signal_callback_add(it->base.view, "elm,action,click", "elm",
+ _select, it);
+ elm_widget_sub_object_add(obj, it->base.view);
+ 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(it->base.view, "elm.swallow.icon", it->icon);
+ evas_object_show(it->icon);
+ elm_widget_sub_object_add(obj, it->icon);
+ }
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
+ mw = mh = -1;
+ elm_coords_finger_size_adjust(1, &mw, 1, &mh);
+ edje_object_size_min_restricted_calc(it->base.view, &mw, &mh, mw, mh);
+ elm_coords_finger_size_adjust(1, &mw, 1, &mh);
+ evas_object_size_hint_weight_set(it->base.view, -1.0, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(it->base.view, 0.5, EVAS_HINT_FILL);
+ evas_object_size_hint_min_set(it->base.view, mw, mh);
+ return it;
+}
+
/**
* Add a toolbar object to @p parent.
*
@@ -446,6 +532,7 @@
elm_widget_can_focus_set(obj, EINA_FALSE);
wd->more_item = NULL;
+ wd->selected_item = NULL;
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");
@@ -513,87 +600,222 @@
}
/**
- * Add an item to the toolbar.
+ * Append item to the toolbar
*
* @param obj The toolbar object
* @param icon The icon string
* @param label The label of the item
* @param func The function to call when the item is clicked
* @param data The data to associate with the item
+ * @return The toolbar item, or NULL upon failure
*
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_item_append(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+
+ Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
+ if (!it) return NULL;
+
+ wd->items = eina_inlist_append(wd->items, EINA_INLIST_GET(it));
+ evas_object_box_append(wd->bx, it->base.view);
+ evas_object_show(it->base.view);
+ _sizing_eval(obj);
+
+ return it;
+}
+
+/**
+ * Prepend item to the toolbar
+ *
+ * @param obj The toolbar object
+ * @param icon The icon string
+ * @param label The label of the item
+ * @param func The function to call when the item is clicked
+ * @param data The data to associate with the item
* @return The toolbar item, or NULL upon failure
*
* @ingroup Toolbar
*/
EAPI Elm_Toolbar_Item *
-elm_toolbar_item_add(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
+elm_toolbar_item_prepend(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Object *icon_obj;
- Evas_Coord mw, mh;
- Elm_Toolbar_Item *it;
+ if (!wd) return NULL;
+ Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
+ if (!it) return NULL;
+
+ wd->items = eina_inlist_prepend(wd->items, EINA_INLIST_GET(it));
+ evas_object_box_prepend(wd->bx, it->base.view);
+ evas_object_show(it->base.view);
+ _sizing_eval(obj);
+
+ return it;
+}
+
+/**
+ * Insert item before another in the toolbar
+ *
+ * @param obj The toolbar object
+ * @param before The item to insert before
+ * @param icon The icon string
+ * @param label The label of the item
+ * @param func The function to call when the item is clicked
+ * @param data The data to associate with the item
+ * @return The toolbar item, or NULL upon failure
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_item_insert_before(Evas_Object *obj, Elm_Toolbar_Item *before, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(before, NULL);
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
- icon_obj = elm_icon_add(obj);
- if (!icon_obj) return NULL;
- it = elm_widget_item_new(obj, Elm_Toolbar_Item);
- if (!it)
- {
- evas_object_del(icon_obj);
- return NULL;
- }
- wd->items = eina_list_append(wd->items, it);
- it->label = eina_stringshare_add(label);
- it->prio.visible = 1;
- it->prio.priority = 0;
- it->func = func;
- it->separator = EINA_FALSE;
- it->base.data = data;
- it->base.view = edje_object_add(evas_object_evas_get(obj));
- if (_item_icon_set(icon_obj, "toolbar/", icon))
- {
- it->icon = icon_obj;
- it->icon_str = eina_stringshare_add(icon);
- }
- else
- {
- it->icon = NULL;
- it->icon_str = NULL;
- evas_object_del(icon_obj);
- }
- _elm_theme_object_set(obj, it->base.view, "toolbar", "item",
- elm_widget_style_get(obj));
- edje_object_signal_callback_add(it->base.view, "elm,action,click", "elm",
- _select, it);
- elm_widget_sub_object_add(obj, it->base.view);
- if (it->icon)
- {
- int ms = 0;
+ Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
+ if (!it) return NULL;
- 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(it->base.view, "elm.swallow.icon", it->icon);
- evas_object_show(it->icon);
- elm_widget_sub_object_add(obj, it->icon);
- }
- edje_object_part_text_set(it->base.view, "elm.text", it->label);
- mw = mh = -1;
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base.view, &mw, &mh, mw, mh);
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- evas_object_size_hint_weight_set(it->base.view, -1.0, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(it->base.view, 0.5, EVAS_HINT_FILL);
- evas_object_size_hint_min_set(it->base.view, mw, mh);
- evas_object_box_append(wd->bx, it->base.view);
+ wd->items = eina_inlist_prepend_relative(wd->items, EINA_INLIST_GET(it),
+ EINA_INLIST_GET(before));
+ evas_object_box_insert_before(wd->bx, it->base.view, before->base.view);
evas_object_show(it->base.view);
_sizing_eval(obj);
+
return it;
}
/**
+ * Insert item after another in the toolbar
+ *
+ * @param obj The toolbar object
+ * @param after The item to insert after
+ * @param icon The icon string
+ * @param label The label of the item
+ * @param func The function to call when the item is clicked
+ * @param data The data to associate with the item
+ * @return The toolbar item, or NULL upon failure
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_item_insert_after(Evas_Object *obj, Elm_Toolbar_Item *after, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(after, NULL);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+
+ Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
+ if (!it) return NULL;
+
+ wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(it),
+ EINA_INLIST_GET(after));
+ evas_object_box_insert_after(wd->bx, it->base.view, after->base.view);
+ evas_object_show(it->base.view);
+ _sizing_eval(obj);
+
+ return it;
+}
+
+/**
+ * Get the first item in the toolbar
+ *
+ * @param obj The toolbar object
+ * @return The first item, or NULL if none
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_first_item_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd || !wd->items) return NULL;
+ Elm_Toolbar_Item *it = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
+ return it;
+}
+
+/**
+ * Get the last item in the toolbar
+ *
+ * @return The last item, or NULL if none
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_last_item_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd || !wd->items) return NULL;
+ Elm_Toolbar_Item *it = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items->last);
+ return it;
+}
+
+/**
+ * Get the next item in the toolbar
+ *
+ * This returns the item after the item @p it.
+ *
+ * @param it The item
+ * @return The item after @p it, or NULL if none
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_item_next_get(const Elm_Toolbar_Item *item)
+{
+ Elm_Toolbar_Item *next;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
+ next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next);
+ return next;
+}
+
+/**
+ * Get the previous item in the toolbar
+ *
+ * This returns the item before the item @p it.
+ *
+ * @param it The item
+ * @return The item before @p it, or NULL if none
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_item_prev_get(const Elm_Toolbar_Item *item)
+{
+ Elm_Toolbar_Item *prev;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
+ prev = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->prev);
+ return prev;
+}
+
+/**
+ * Get the toolbar object from an item
+ *
+ * This returns the toolbar object itself that an item belongs to.
+ *
+ * @param it The item
+ * @return The toolbar object
+ *
+ * @ingroup Toolbar
+ */
+EAPI Evas_Object *
+elm_toolbar_item_toolbar_get(const Elm_Toolbar_Item *item)
+{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
+ return item->base.widget;
+}
+
+/**
* Sets the priority of a toolbar item. This is used only when the toolbar expand mode
* is set to ELM_TOOLBAR_SHRINK_MENU: when space is at a premium, items with low priority
* will be removed from the toolbar and added to a dynamically-created menu, while items
@@ -607,7 +829,7 @@
EAPI void
elm_toolbar_item_priority_set(Elm_Toolbar_Item *item, int priority)
{
- if (!item) return;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
if (item->prio.priority == priority) return;
item->prio.priority = priority;
_resize(item->base.widget, NULL, NULL, NULL);
@@ -624,8 +846,8 @@
EAPI int
elm_toolbar_item_priority_get(const Elm_Toolbar_Item *item)
{
- if (!item) return 0;
- return item->prio.priority;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, 0);
+ return item->prio.priority;
}
/**
@@ -639,7 +861,7 @@
EAPI Evas_Object *
elm_toolbar_item_icon_get(const Elm_Toolbar_Item *item)
{
- if (!item) return NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
return item->icon;
}
@@ -654,7 +876,7 @@
EAPI const char *
elm_toolbar_item_icon_name_get(const Elm_Toolbar_Item *item)
{
- if (!item) return NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
return item->icon_str;
}
@@ -669,26 +891,11 @@
EAPI const char *
elm_toolbar_item_label_get(const Elm_Toolbar_Item *item)
{
- if (!item) return NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
return item->label;
}
/**
- * Get the selected state of @p item.
- *
- * @param item The toolbar item
- * @return If true, the item is selected
- *
- * @ingroup Toolbar
- */
-EAPI Eina_Bool
-elm_toolbar_item_selected_get(const Elm_Toolbar_Item *item)
-{
- if (!item) return EINA_FALSE;
- return item->selected;
-}
-
-/**
* Set the label associated with @p item.
*
* @param item The toolbar item
@@ -701,7 +908,7 @@
{
Evas_Coord mw = -1, mh = -1;
- if (!item) return;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
eina_stringshare_replace(&item->label, label);
edje_object_part_text_set(item->base.view, "elm.text", item->label);
@@ -713,8 +920,68 @@
evas_object_size_hint_min_set(item->base.view, mw, mh);
}
+/**
+ * Get the selected state of @p item.
+ *
+ * @param item The toolbar item
+ * @return If true, the item is selected
+ *
+ * @ingroup Toolbar
+ */
+EAPI Eina_Bool
+elm_toolbar_item_selected_get(const Elm_Toolbar_Item *item)
+{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, EINA_FALSE);
+ return item->selected;
+}
/**
+ * Set the selected state of an item
+ *
+ * This sets the selected state (1 selected, 0 not selected) of the given
+ * item @p it. If a new item is selected the previosly selected will be
+ * unselected.
+ *
+ * @param it The item
+ * @param selected The selected state
+ *
+ * @ingroup Genlist
+ */
+EAPI void
+elm_toolbar_item_selected_set(Elm_Toolbar_Item *item, Eina_Bool selected)
+{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
+ if (!wd) return;
+
+ if (item->selected == selected) return;
+
+ if (selected)
+ _item_select(item);
+ else
+ _item_unselect(item);
+}
+
+/**
+ * Get the selectd item in the toolbar
+ *
+ * If no item is selected, NULL is returned.
+ *
+ * @param obj The toolbar object
+ * @return The selected item, or NULL if none.
+ *
+ * @ingroup Toolbar
+ */
+EAPI Elm_Toolbar_Item *
+elm_toolbar_selected_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 wd->selected_item;
+}
+
+/**
* Delete a toolbar item.
*
* @param it The toolbar item
@@ -722,21 +989,21 @@
* @ingroup Toolbar
*/
EAPI void
-elm_toolbar_item_del(Elm_Toolbar_Item *it)
+elm_toolbar_item_del(Elm_Toolbar_Item *item)
{
Widget_Data *wd;
Evas_Object *obj2;
- if ((!it) || (!it->base.widget)) return;
- wd = elm_widget_data_get(it->base.widget);
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
+ wd = elm_widget_data_get(item->base.widget);
if (!wd) return;
- obj2 = it->base.widget;
- elm_widget_item_pre_notify_del(it);
- wd->items = eina_list_remove(wd->items, it);
- eina_stringshare_del(it->label);
- eina_stringshare_del(it->icon_str);
- if (it->icon) evas_object_del(it->icon);
- elm_widget_item_del(it);
+ obj2 = item->base.widget;
+ elm_widget_item_pre_notify_del(item);
+ wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item));
+ eina_stringshare_del(item->label);
+ eina_stringshare_del(item->icon_str);
+ if (item->icon) evas_object_del(item->icon);
+ elm_widget_item_del(item);
_theme_hook(obj2);
}
@@ -749,26 +1016,13 @@
* @ingroup Toolbar
*/
EAPI void
-elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *it, Evas_Smart_Cb func)
+elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *item, Evas_Smart_Cb func)
{
- elm_widget_item_del_cb_set(it, func);
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
+ elm_widget_item_del_cb_set(item, func);
}
/**
- * Select the toolbar item @p item.
- *
- * @param item The toolbar item
- *
- * @ingroup Toolbar
- */
-EAPI void
-elm_toolbar_item_select(Elm_Toolbar_Item *item)
-{
- if (!item) return;
- _item_select(item);
-}
-
-/**
* Get the disabled state of @p item.
*
* @param item The toolbar item
@@ -779,7 +1033,7 @@
EAPI Eina_Bool
elm_toolbar_item_disabled_get(const Elm_Toolbar_Item *item)
{
- if (!item) return EINA_FALSE;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, EINA_FALSE);
return item->disabled;
}
@@ -794,7 +1048,7 @@
EAPI void
elm_toolbar_item_disabled_set(Elm_Toolbar_Item *item, Eina_Bool disabled)
{
- if (!item) return;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
_item_disable(item, disabled);
}
@@ -809,7 +1063,7 @@
EAPI void
elm_toolbar_item_separator_set(Elm_Toolbar_Item *item, Eina_Bool separator)
{
- if (!item) return;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
if (item->separator == separator) return;
item->separator = separator;
_theme_hook(item->base.view);
@@ -826,7 +1080,7 @@
EAPI Eina_Bool
elm_toolbar_item_separator_get(const Elm_Toolbar_Item *item)
{
- if (!item) return EINA_FALSE;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, EINA_FALSE);
return item->separator;
}
@@ -863,7 +1117,8 @@
{
elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF, ELM_SMART_SCROLLER_POLICY_OFF);
- wd->more_item = elm_toolbar_item_add(obj, "more_menu", "More", NULL, NULL);
+ wd->more_item = elm_toolbar_item_append(obj, "more_menu", "More",
+ NULL, NULL);
elm_toolbar_item_priority_set(wd->more_item, INT_MAX);
}
else
@@ -937,14 +1192,13 @@
EAPI void
elm_toolbar_menu_parent_set(Evas_Object *obj, Evas_Object *parent)
{
- Eina_List *l;
Elm_Toolbar_Item *it;
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if ((!wd) || (!parent)) return;
wd->menu_parent = parent;
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
if (it->o_menu)
elm_menu_parent_set(it->o_menu, wd->menu_parent);
@@ -970,49 +1224,6 @@
}
/**
- * Unselect all of the items in the toolbar.
- *
- * @param obj The toolbar object
- *
- * @ingroup Toolbar
- */
-EAPI void
-elm_toolbar_item_unselect_all(Evas_Object *obj)
-{
- Eina_List *l;
- Elm_Toolbar_Item *it;
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- EINA_LIST_FOREACH(wd->items, l, it)
- {
- if (it->selected)
- {
- it->selected = EINA_FALSE;
- edje_object_signal_emit
- (it->base.view, "elm,state,unselected", "elm");
- break;
- }
- }
-}
-
-/**
- * Unselect the specified toolbar item.
- *
- * @param item The toolbar item
- *
- * @ingroup Toolbar
- */
-EAPI void
-elm_toolbar_item_unselect(Elm_Toolbar_Item *item)
-{
- if ((!item) || (!item->selected)) return;
- item->selected = EINA_FALSE;
- edje_object_signal_emit(item->base.view, "elm,state,unselected", "elm");
-}
-
-/**
* Set the alignment of the items.
*
* @param obj The toolbar object
@@ -1061,9 +1272,10 @@
EAPI void
elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
Widget_Data *wd = elm_widget_data_get(item->base.widget);
+ if (!wd) return;
- if ((!wd) || (!item)) return;
if (item->menu == menu) return;
item->menu = menu;
if (menu) _item_menu_create(wd, item);
@@ -1084,6 +1296,7 @@
EAPI void
elm_toolbar_item_tooltip_text_set(Elm_Toolbar_Item *item, const char *text)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_tooltip_text_set(item, text);
}
@@ -1110,6 +1323,7 @@
EAPI void
elm_toolbar_item_tooltip_content_cb_set(Elm_Toolbar_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_tooltip_content_cb_set(item, func, data, del_cb);
}
@@ -1129,6 +1343,7 @@
EAPI void
elm_toolbar_item_tooltip_unset(Elm_Toolbar_Item *item)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_tooltip_unset(item);
}
@@ -1147,6 +1362,7 @@
EAPI void
elm_toolbar_item_tooltip_style_set(Elm_Toolbar_Item *item, const char *style)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_tooltip_style_set(item, style);
}
@@ -1162,6 +1378,7 @@
EAPI const char *
elm_toolbar_item_tooltip_style_get(const Elm_Toolbar_Item *item)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
return elm_widget_item_tooltip_style_get(item);
}
@@ -1177,6 +1394,7 @@
EAPI void
elm_toolbar_item_cursor_set(Elm_Toolbar_Item *item, const char *cursor)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_cursor_set(item, cursor);
}
@@ -1191,6 +1409,7 @@
EAPI void
elm_toolbar_item_cursor_unset(Elm_Toolbar_Item *item)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_cursor_unset(item);
}
@@ -1208,6 +1427,7 @@
EAPI void
elm_toolbar_item_cursor_style_set(Elm_Toolbar_Item *item, const char *style)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_cursor_style_set(item, style);
}
@@ -1223,6 +1443,7 @@
EAPI const char *
elm_toolbar_item_cursor_style_get(const Elm_Toolbar_Item *item)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
return elm_widget_item_cursor_style_get(item);
}
@@ -1243,6 +1464,7 @@
EAPI void
elm_toolbar_item_cursor_engine_only_set(Elm_Toolbar_Item *item, Eina_Bool engine_only)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item);
elm_widget_item_cursor_engine_only_set(item, engine_only);
}
@@ -1259,6 +1481,7 @@
EAPI Eina_Bool
elm_toolbar_item_cursor_engine_only_get(const Elm_Toolbar_Item *item)
{
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, EINA_FALSE);
return elm_widget_item_cursor_engine_only_get(item);
}
@@ -1273,201 +1496,16 @@
EAPI Evas_Object *
elm_toolbar_item_menu_get(Elm_Toolbar_Item *item)
{
- if (!item) return NULL;
+ ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(item, NULL);
Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return NULL;
+ /* FIXME: It's not ok. This function needs to be reviewed. And should
+ * receive a const item */
elm_toolbar_item_menu_set(item, 1);
return item->o_menu;
}
/**
- * Return a list of all toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return An Eina_List* of the toolbar items in @p obj
- *
- * @ingroup Toolbar
- */
-EAPI Eina_List *
-elm_toolbar_item_get_all(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- return wd->items;
-}
-
-/**
- * Return the first toolbar item in the list of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The first toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_get_first(Evas_Object *obj)
-{
- Elm_Toolbar_Item *it;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- if (!(it = eina_list_data_get(wd->items))) return NULL;
-
- return it;
-}
-
-/**
- * Return the last toolbar item in the list of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The last toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_get_last(Evas_Object *obj)
-{
- Eina_List *last;
- Elm_Toolbar_Item *it;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- if (!(last = eina_list_last(wd->items))) return NULL;
- it = eina_list_data_get(last);
-
- return it;
-}
-
-/**
- * Return the next toolbar item (relative to the currently selected
- * toolbar item) in the list of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The next toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_get_next(Evas_Object *obj)
-{
- Eina_List *l, *l2;
- Elm_Toolbar_Item *it, *next;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return NULL;
- EINA_LIST_FOREACH_SAFE(wd->items, l, l2, it)
- {
- if (it->selected)
- {
- if (!(next = eina_list_data_get(l2))) return NULL;
- return next;
- }
- }
- return NULL;
-}
-
-/**
- * Selects the next non-disabled, non-separator toolbar item in the list
- * of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The newly selected toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_select_next(Evas_Object *obj)
-{
- Eina_List *l, *l2;
- Elm_Toolbar_Item *it, *next;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return NULL;
- EINA_LIST_FOREACH(wd->items, l, it)
- {
- if (it->selected)
- {
- EINA_LIST_FOREACH(l, l2, next)
- if ((!next->disabled) && (next->separator))
- {
- _item_select(next);
- return next;
- }
- }
- }
- return NULL;
-}
-
-/**
- * Selects the first non-disabled, non-separator toolbar item in the list
- * of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The newly selected toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_select_first(Evas_Object *obj)
-{
- Eina_List *l;
- Elm_Toolbar_Item *it;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- EINA_LIST_FOREACH(wd->items, l, it)
- {
- if ((!it->disabled) && (!it->separator))
- {
- _item_select(it);
- return it;
- }
- }
-
- return NULL;
-}
-
-/**
- * Selects the last non-disabled, non-separator toolbar item in the list
- * of toolbar items.
- *
- * @param obj The toolbar object
- *
- * @return The newly selected toolbar item, or NULL on failure
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar_Item *
-elm_toolbar_item_select_last(Evas_Object *obj)
-{
- Eina_List *l;
- Elm_Toolbar_Item *it;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- EINA_LIST_REVERSE_FOREACH(wd->items, l, it)
- {
- if ((!it->disabled) && (!it->separator))
- {
- _item_select(it);
- return it;
- }
- }
-
- return NULL;
-}
-
-/**
* Returns a pointer to a toolbar item by its label
*
* @param obj The toolbar object
@@ -1479,15 +1517,14 @@
* @ingroup Toolbar
*/
EAPI Elm_Toolbar_Item *
-elm_toolbar_item_find_by_label(Evas_Object *obj, const char *label)
+elm_toolbar_item_find_by_label(const Evas_Object *obj, const char *label)
{
- Eina_List *l;
Elm_Toolbar_Item *it;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
-
+
if (!wd) return NULL;
- EINA_LIST_FOREACH(wd->items, l, it)
+ EINA_INLIST_FOREACH(wd->items, it)
{
if (!strcmp(it->label, label)) return it;
}
|