From f11480aea4b1a7ba212a5bd6670ce3771399d708 Mon Sep 17 00:00:00 2001 From: raster Date: Wed, 7 Mar 2012 13:23:22 +0000 Subject: [PATCH 1/1] From: Hyoyoung Chang Subject: [E-devel] [patch] elm_toolbar - add elm_toolbar_select_mode_set As already sent genlist select_mode_set patch, I applied same apis to elm_toolbar. +EAPI void +elm_toolbar_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode) +EAPI Elm_Object_Select_Mode_Type +elm_toolbar_select_mode_get(const Evas_Object *obj) git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@68945 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/bin/test_toolbar.c | 2 +- src/lib/elm_deprecated.h | 64 +++++++++++++++++++++++++++++ src/lib/elm_toolbar.c | 79 ++++++++++++++++++++++++++++-------- src/lib/elm_toolbar.h | 102 ++++++++++++++++++----------------------------- 4 files changed, 166 insertions(+), 81 deletions(-) diff --git a/src/bin/test_toolbar.c b/src/bin/test_toolbar.c index 9107eb0..2b91fdb 100644 --- a/src/bin/test_toolbar.c +++ b/src/bin/test_toolbar.c @@ -529,7 +529,7 @@ test_toolbar5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_MENU); 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_no_select_mode_set(tb, EINA_TRUE); + elm_toolbar_select_mode_set(tb, ELM_OBJECT_NO_SELECT); ph1 = elm_photo_add(win); ph2 = elm_photo_add(win); diff --git a/src/lib/elm_deprecated.h b/src/lib/elm_deprecated.h index 1b37c79..1a96b9d 100644 --- a/src/lib/elm_deprecated.h +++ b/src/lib/elm_deprecated.h @@ -5949,5 +5949,69 @@ EINA_DEPRECATED EAPI int elm_diskselector_side_label_length_g EINA_DEPRECATED EAPI void elm_diskselector_side_label_length_set(Evas_Object *obj, int len); /** + * Set whether the toolbar should always have an item selected. + * + * @param obj The toolbar object. + * @param always_select @c EINA_TRUE to enable always-select mode or @c EINA_FALSE to + * disable it. + * + * This will cause the toolbar to always have an item selected, and clicking + * the selected item will not cause a selected event to be emitted. Enabling this mode + * will immediately select the first toolbar item. + * + * Always-selected is disabled by default. + * + * @see elm_toolbar_always_select_mode_get(). + * + * @ingroup Toolbar + */ +EINA_DEPRECATED EAPI void elm_toolbar_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); + +/** + * Get whether the toolbar should always have an item selected. + * + * @param obj The toolbar object. + * @return @c EINA_TRUE means an item will always be selected, @c EINA_FALSE indicates + * that it is possible to have no items selected. If @p obj is @c NULL, @c EINA_FALSE is returned. + * + * @see elm_toolbar_always_select_mode_set() for details. + * + * @ingroup Toolbar + */ +EINA_DEPRECATED EAPI Eina_Bool elm_toolbar_always_select_mode_get(const Evas_Object *obj); + +/** + * Set whether the toolbar items' should be selected by the user or not. + * + * @param obj The toolbar object. + * @param no_select @c EINA_TRUE to disable selection or @c EINA_FALSE to + * enable it. + * + * This will turn off the ability to select items entirely and they will + * neither appear selected nor emit selected signals. The clicked + * callback function will still be called. + * + * Selection is enabled by default. + * + * @see elm_toolbar_no_select_mode_get(). + * + * @ingroup Toolbar + */ +EINA_DEPRECATED EAPI void elm_toolbar_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); + +/** + * Set whether the toolbar items' should be selected by the user or not. + * + * @param obj The toolbar object. + * @return @c EINA_TRUE means items can be selected. @c EINA_FALSE indicates + * they can't. If @p obj is @c NULL, @c EINA_FALSE is returned. + * + * @see elm_toolbar_no_select_mode_set() for details. + * + * @ingroup Toolbar + */ +EINA_DEPRECATED EAPI Eina_Bool elm_toolbar_no_select_mode_get(const Evas_Object *obj); + +/** * @} */ diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index a285a18..7a83f86 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -18,9 +18,8 @@ struct _Widget_Data int icon_size; unsigned int item_count; double align; + Elm_Object_Select_Mode_Type 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; @@ -174,11 +173,11 @@ _item_select(Elm_Toolbar_Item *it) if (elm_widget_item_disabled_get(it) || (it->separator) || (it->object)) return; sel = it->selected; - if (!wd->no_select) + if (wd->select_mode != ELM_OBJECT_NO_SELECT) { if (sel) { - if (wd->always_select) return; + if (wd->select_mode == ELM_OBJECT_ALWAYS_SELECT) return; _item_unselect(it); } else @@ -908,7 +907,8 @@ _item_del_pre_hook(Elm_Object_Item *it) 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); + if ((wd->select_mode == ELM_OBJECT_ALWAYS_SELECT) && + item->selected && next) _item_select(next); _item_del(item); _theme_hook(obj2); @@ -1022,7 +1022,8 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f 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); + if ((!wd->items) && (wd->select_mode == ELM_OBJECT_ALWAYS_SELECT)) + _item_select(it); wd->item_count++; return it; } @@ -2099,42 +2100,62 @@ elm_toolbar_item_cursor_engine_only_get(const Elm_Object_Item *it) return elm_object_item_cursor_engine_only_get(it); } -EAPI void +EINA_DEPRECATED 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; + if (always_select) + elm_toolbar_select_mode_set(obj, ELM_OBJECT_ALWAYS_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_toolbar_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + elm_toolbar_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED 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; + Elm_Object_Select_Mode_Type oldmode = elm_toolbar_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } -EAPI void +EINA_DEPRECATED 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; + if (no_select) + elm_toolbar_select_mode_set(obj, ELM_OBJECT_NO_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_toolbar_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + elm_toolbar_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED 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; + Elm_Object_Select_Mode_Type oldmode = elm_toolbar_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } EAPI void @@ -2216,3 +2237,29 @@ elm_toolbar_mode_shrink_get(const Evas_Object *obj) { return elm_toolbar_shrink_mode_get(obj); } + +EAPI void +elm_toolbar_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type 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_ALWAYS_SELECT) && + (wd->select_mode != ELM_OBJECT_ALWAYS_SELECT) && + 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_Type +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; +} + diff --git a/src/lib/elm_toolbar.h b/src/lib/elm_toolbar.h index 2011a5c..f78a86b 100644 --- a/src/lib/elm_toolbar.h +++ b/src/lib/elm_toolbar.h @@ -140,70 +140,6 @@ EAPI void elm_toolbar_icon_order_lookup_set(Evas_Object EAPI Elm_Icon_Lookup_Order elm_toolbar_icon_order_lookup_get(const Evas_Object *obj); /** - * Set whether the toolbar should always have an item selected. - * - * @param obj The toolbar object. - * @param always_select @c EINA_TRUE to enable always-select mode or @c EINA_FALSE to - * disable it. - * - * This will cause the toolbar to always have an item selected, and clicking - * the selected item will not cause a selected event to be emitted. Enabling this mode - * will immediately select the first toolbar item. - * - * Always-selected is disabled by default. - * - * @see elm_toolbar_always_select_mode_get(). - * - * @ingroup Toolbar - */ -EAPI void elm_toolbar_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); - -/** - * Get whether the toolbar should always have an item selected. - * - * @param obj The toolbar object. - * @return @c EINA_TRUE means an item will always be selected, @c EINA_FALSE indicates - * that it is possible to have no items selected. If @p obj is @c NULL, @c EINA_FALSE is returned. - * - * @see elm_toolbar_always_select_mode_set() for details. - * - * @ingroup Toolbar - */ -EAPI Eina_Bool elm_toolbar_always_select_mode_get(const Evas_Object *obj); - -/** - * Set whether the toolbar items' should be selected by the user or not. - * - * @param obj The toolbar object. - * @param no_select @c EINA_TRUE to disable selection or @c EINA_FALSE to - * enable it. - * - * This will turn off the ability to select items entirely and they will - * neither appear selected nor emit selected signals. The clicked - * callback function will still be called. - * - * Selection is enabled by default. - * - * @see elm_toolbar_no_select_mode_get(). - * - * @ingroup Toolbar - */ -EAPI void elm_toolbar_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); - -/** - * Set whether the toolbar items' should be selected by the user or not. - * - * @param obj The toolbar object. - * @return @c EINA_TRUE means items can be selected. @c EINA_FALSE indicates - * they can't. If @p obj is @c NULL, @c EINA_FALSE is returned. - * - * @see elm_toolbar_no_select_mode_set() for details. - * - * @ingroup Toolbar - */ -EAPI Eina_Bool elm_toolbar_no_select_mode_get(const Evas_Object *obj); - -/** * Append item to the toolbar. * * @param obj The toolbar object. @@ -920,6 +856,44 @@ EAPI Eina_Bool elm_toolbar_horizontal_get(const Evas_Object * * @ingroup Toolbar */ EAPI unsigned int elm_toolbar_items_count(const Evas_Object *obj); + +/** + * Set the toolbar select mode. + * + * @param obj The toolbar object + * @param mode The select mode + * + * elm_toolbar_select_mode_set() changes item select mode in the toolbar widget. + * - ELM_OBJECT_NORMAL_SELECT : Items will only call their selection func and + * callback when first becoming selected. Any further clicks will + * do nothing, unless you set always select mode. + * - ELM_OBJECT_ALWAYS_SELECT : This means that, even if selected, + * every click will make the selected callbacks be called. + * - ELM_OBJECT_NO_SELECT : This will turn off the ability to select items + * entirely and they will neither appear selected nor call selected + * callback functions. + * + * @see elm_toolbar_select_mode_get() + * + * @ingroup Toolbar + */ +EAPI void +elm_toolbar_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode); + +/** + * Get the toolbar select mode. + * + * @param obj The toolbar object + * @return The select mode + * (If getting mode is failed, it returns ELM_OBJECT_SELECT_MODE_MAX) + * + * @see elm_toolbar_select_mode_set() + * + * @ingroup Toolbar + */ +EAPI Elm_Object_Select_Mode_Type +elm_toolbar_select_mode_get(const Evas_Object *obj); + /** * @} */ -- 2.7.4