From 6fde32a96c130c3b5c488671c4afeeacfce60727 Mon Sep 17 00:00:00 2001 From: Hyoyoung Chang Date: Wed, 7 Mar 2012 12:43:19 +0000 Subject: [PATCH] From: Hyoyoung Chang Subject: [E-devel] [patch] elm_gen{list, grid} - add elm_genlist_select_mode_set As discussed in irc, I made a patch about unifying always_select_mode_set and no_select_mode_set. I'm introducing two apis in genlist (also in gengrid) +EAPI void +elm_genlist_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode) +EAPI Elm_Object_Select_Mode_Type +elm_genlist_select_mode_get(const Evas_Object *obj); And added a enum in elm_general.h +typedef enum +{ + ELM_OBJECT_NORMAL_SELECT = 0, /**< default select mode */ + ELM_OBJECT_ALWAYS_SELECT, /**< always select mode */ + ELM_OBJECT_NO_SELECT, /**< no select mode */ + + ELM_OBJECT_SELECT_MODE_MAX +} Elm_Object_Select_Mode_Type; After this is commited, i'll send a patch about examples and edje_external. SVN revision: 68937 --- src/bin/test_gengrid.c | 2 +- src/bin/test_genlist.c | 12 ++--- src/lib/elm_deprecated.h | 132 ++++++++++++++++++++++++++++++++++++++++++++--- src/lib/elm_gen_common.h | 3 +- src/lib/elm_general.h | 9 ++++ src/lib/elm_gengrid.c | 53 +++++++++++++++---- src/lib/elm_gengrid.h | 110 +++++++++++++-------------------------- src/lib/elm_genlist.c | 68 ++++++++++++++++++++---- src/lib/elm_genlist.h | 104 ++++++++++++++----------------------- 9 files changed, 316 insertions(+), 177 deletions(-) diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c index 0146e0c..406c1ea 100644 --- a/src/bin/test_gengrid.c +++ b/src/bin/test_gengrid.c @@ -42,7 +42,7 @@ set_api_state(api_data *api) break; case GRID_NO_SELECT_MODE: /* 2 */ - elm_gengrid_no_select_mode_set(grid, EINA_TRUE); + elm_gengrid_select_mode_set(grid, ELM_OBJECT_NO_SELECT); break; case GRID_NO_BOUNCE: /* 3 */ diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c index abe9e1f..0433bb0 100644 --- a/src/bin/test_genlist.c +++ b/src/bin/test_genlist.c @@ -42,12 +42,12 @@ set_api_state(api_data *api) break; case NO_SELECT_MODE_SET: /* 1 */ - elm_genlist_no_select_mode_set(gl, EINA_TRUE); + elm_genlist_select_mode_set(gl, ELM_OBJECT_NO_SELECT); elm_genlist_mode_set(gl, ELM_LIST_SCROLL); /* Back to default */ break; case COMPRESS_MODE_SET: /* 2 */ - elm_genlist_no_select_mode_set(gl, EINA_FALSE); /* Back to default */ + elm_genlist_select_mode_set(gl, ELM_OBJECT_NORMAL_SELECT); elm_genlist_compress_mode_set(gl, EINA_TRUE); break; @@ -1055,7 +1055,7 @@ test_genlist5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in evas_object_show(bx); gl = elm_genlist_add(win); - elm_genlist_always_select_mode_set(gl, 1); + elm_genlist_select_mode_set(gl, ELM_OBJECT_ALWAYS_SELECT); evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(gl); @@ -2401,14 +2401,14 @@ static void gl15_edit_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { elm_genlist_edit_mode_set(data, EINA_TRUE); - elm_genlist_always_select_mode_set(data, EINA_TRUE); + elm_genlist_select_mode_set(data, ELM_OBJECT_ALWAYS_SELECT); } static void gl15_normal_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { elm_genlist_edit_mode_set(data, EINA_FALSE); - elm_genlist_always_select_mode_set(data, EINA_FALSE); + elm_genlist_select_mode_set(data, ELM_OBJECT_NORMAL_SELECT); } void gl15_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) @@ -2564,7 +2564,7 @@ test_genlist16(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i /* note: flip mode can be used with/without edit mode */ elm_genlist_edit_mode_set(gl, EINA_TRUE); - elm_genlist_always_select_mode_set(gl, EINA_TRUE); + elm_genlist_select_mode_set(gl, ELM_OBJECT_ALWAYS_SELECT); itc15 = elm_genlist_item_class_new(); itc15->item_style = "default"; diff --git a/src/lib/elm_deprecated.h b/src/lib/elm_deprecated.h index 5ca8273..a3c5db6 100644 --- a/src/lib/elm_deprecated.h +++ b/src/lib/elm_deprecated.h @@ -6019,17 +6019,135 @@ EINA_DEPRECATED EAPI void elm_genlist_item_middle_show( EINA_DEPRECATED EAPI void elm_diskselector_round_set(Evas_Object *obj, Eina_Bool round); /** - * Get a value whether round mode is enabled or not. + * Set the always select mode. * - * @see elm_diskselector_round_enabled_set() for details. + * @param obj The genlist object + * @param always_select The always select mode (@c EINA_TRUE = on, @c + * EINA_FALSE = off). Default is @c EINA_FALSE. * - * @param obj The diskselector object. - * @return @c EINA_TRUE means round mode is enabled. @c EINA_FALSE indicates - * it's disabled. If @p obj is @c NULL, @c EINA_FALSE is returned. + * Items will only call their selection func and callback when first + * becoming selected. Any further clicks will do nothing, unless you + * enable always select with elm_genlist_always_select_mode_set(). + * This means that, even if selected, every click will make the selected + * callbacks be called. + * + * @see elm_genlist_always_select_mode_get() + * + * @ingroup Genlist + */ +EINA_DEPRECATED EAPI void elm_genlist_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); + + +/** + * Get the always select mode. + * + * @param obj The genlist object + * @return The always select mode + * (@c EINA_TRUE = on, @c EINA_FALSE = off) + * + * @see elm_genlist_always_select_mode_set() + * + * @ingroup Genlist + */ +EINA_DEPRECATED EAPI Eina_Bool elm_genlist_always_select_mode_get(const Evas_Object *obj); + +/** + * Enable/disable the no select mode. + * + * @param obj The genlist object + * @param no_select The no select mode + * (EINA_TRUE = on, EINA_FALSE = off) + * + * This will turn off the ability to select items entirely and they + * will neither appear selected nor call selected callback functions. + * + * @see elm_genlist_no_select_mode_get() + * + * @ingroup Genlist + */ +EINA_DEPRECATED EAPI void elm_genlist_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); + +/** + * Gets whether the no select mode is enabled. + * + * @param obj The genlist object + * @return The no select mode + * (@c EINA_TRUE = on, @c EINA_FALSE = off) + * + * @see elm_genlist_no_select_mode_set() + * + * @ingroup Genlist + */ +EINA_DEPRECATED EAPI Eina_Bool elm_genlist_no_select_mode_get(const Evas_Object *obj); + +/** + * Set whether items on a given gengrid widget are to get their + * selection callbacks issued for @b every subsequent selection + * click on them or just for the first click. + * + * @param obj The gengrid object + * @param always_select @c EINA_TRUE to make items "always + * selected", @c EINA_FALSE, otherwise + * + * By default, grid items will only call their selection callback + * function when firstly getting selected, any subsequent further + * clicks will do nothing. With this call, you make those + * subsequent clicks also to issue the selection callbacks. + * + * @note Double clicks will @b always be reported on items. + * + * @see elm_gengrid_always_select_mode_get() + * + * @ingroup Gengrid + */ +EINA_DEPRECATED EAPI void elm_gengrid_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); + +/** + * Get whether items on a given gengrid widget have their selection + * callbacks issued for @b every subsequent selection click on them + * or just for the first click. * - * @deprecated elm_diskselector_round_enabled_get() + * @param obj The gengrid object. + * @return @c EINA_TRUE if the gengrid items are "always selected", + * @c EINA_FALSE, otherwise + * + * @see elm_gengrid_always_select_mode_set() for more details + * + * @ingroup Gengrid + */ +EINA_DEPRECATED EAPI Eina_Bool elm_gengrid_always_select_mode_get(const Evas_Object *obj); + +/** + * Set whether items on a given gengrid widget can be selected or not. + * + * @param obj The gengrid object + * @param no_select @c EINA_TRUE to make items selectable, + * @c EINA_FALSE otherwise + * + * This will make items in @p obj selectable or not. In the latter + * case, any user interaction on the gengrid items will neither make + * them appear selected nor them call their selection callback + * functions. + * + * @see elm_gengrid_no_select_mode_get() + * + * @ingroup Gengrid + */ +EINA_DEPRECATED EAPI void elm_gengrid_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); + +/** + * Get whether items on a given gengrid widget can be selected or + * not. + * + * @param obj The gengrid object + * @return @c EINA_TRUE, if items are selectable, @c EINA_FALSE + * otherwise + * + * @see elm_gengrid_no_select_mode_set() for more details + * + * @ingroup Gengrid */ -EINA_DEPRECATED EAPI Eina_Bool elm_diskselector_round_get(const Evas_Object *obj); +EINA_DEPRECATED EAPI Eina_Bool elm_gengrid_no_select_mode_get(const Evas_Object *obj); /** * Get the side labels max length. diff --git a/src/lib/elm_gen_common.h b/src/lib/elm_gen_common.h index 507471c..eb66d03 100644 --- a/src/lib/elm_gen_common.h +++ b/src/lib/elm_gen_common.h @@ -93,12 +93,11 @@ struct _Widget_Data int minw, minh; unsigned int item_count; Evas_Coord pan_x, pan_y; + Elm_Object_Select_Mode_Type select_mode; Eina_Bool reorder_mode : 1; /**< a flag for reorder mode enable/disable */ Eina_Bool on_hold : 1; Eina_Bool multi : 1; /**< a flag for item multi selection */ - Eina_Bool no_select : 1; Eina_Bool wasselected : 1; - Eina_Bool always_select : 1; Eina_Bool clear_me : 1; /**< a flag whether genlist is marked as to be cleared or not. if this flag is true, genlist clear was already deferred. */ Eina_Bool h_bounce : 1; Eina_Bool v_bounce : 1; diff --git a/src/lib/elm_general.h b/src/lib/elm_general.h index ca3cc83..8d3de49 100644 --- a/src/lib/elm_general.h +++ b/src/lib/elm_general.h @@ -94,6 +94,15 @@ typedef enum ELM_FOCUS_NEXT } Elm_Focus_Direction; +typedef enum +{ + ELM_OBJECT_NORMAL_SELECT = 0, /**< default select mode */ + ELM_OBJECT_ALWAYS_SELECT, /**< always select mode */ + ELM_OBJECT_NO_SELECT, /**< no select mode */ + + ELM_OBJECT_SELECT_MODE_MAX +} Elm_Object_Select_Mode_Type; + /** * @typedef Elm_Object_Item * An Elementary Object item handle. diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 457e604..3358b3b 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -59,9 +59,7 @@ struct _Widget_Data Eina_Bool reorder_mode : 1; Eina_Bool on_hold : 1; Eina_Bool multi : 1; - Eina_Bool no_select : 1; Eina_Bool wasselected : 1; - Eina_Bool always_select : 1; Eina_Bool clear_me : 1; Eina_Bool h_bounce : 1; Eina_Bool v_bounce : 1; @@ -918,7 +916,7 @@ _mouse_up(void *data, static void _item_highlight(Elm_Gen_Item *it) { - if ((it->wd->no_select) || (it->generation < it->wd->generation) || (it->highlighted)) return; + if ((it->wd->select_mode == ELM_OBJECT_NO_SELECT) || (it->generation < it->wd->generation) || (it->highlighted)) return; edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); it->highlighted = EINA_TRUE; } @@ -2576,30 +2574,52 @@ elm_gengrid_reorder_mode_get(const Evas_Object *obj) return wd->reorder_mode; } -EAPI void +EINA_DEPRECATED EAPI void elm_gengrid_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) { - elm_genlist_always_select_mode_set(obj, always_select); + if (always_select) + elm_genlist_select_mode_set(obj, ELM_OBJECT_ALWAYS_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + elm_genlist_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED EAPI Eina_Bool elm_gengrid_always_select_mode_get(const Evas_Object *obj) { - return elm_genlist_always_select_mode_get(obj); + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } -EAPI void +EINA_DEPRECATED EAPI void elm_gengrid_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select) { - elm_genlist_no_select_mode_set(obj, no_select); + if (no_select) + elm_genlist_select_mode_set(obj, ELM_OBJECT_NO_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + elm_genlist_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED EAPI Eina_Bool elm_gengrid_no_select_mode_get(const Evas_Object *obj) { - return elm_genlist_no_select_mode_get(obj); + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } EAPI void @@ -2816,3 +2836,14 @@ elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *itc) } } +EAPI void +elm_gengrid_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode) +{ + elm_genlist_select_mode_set(obj, mode); +} + +EAPI Elm_Object_Select_Mode_Type +elm_gengrid_select_mode_get(const Evas_Object *obj) +{ + return elm_genlist_select_mode_get(obj); +} diff --git a/src/lib/elm_gengrid.h b/src/lib/elm_gengrid.h index 1a60812..8ae4951 100644 --- a/src/lib/elm_gengrid.h +++ b/src/lib/elm_gengrid.h @@ -357,79 +357,6 @@ EAPI void elm_gengrid_horizontal_set(Evas_Object *obj, EAPI Eina_Bool elm_gengrid_horizontal_get(const Evas_Object *obj); /** - * Set whether items on a given gengrid widget are to get their - * selection callbacks issued for @b every subsequent selection - * click on them or just for the first click. - * - * @param obj The gengrid object - * @param always_select @c EINA_TRUE to make items "always - * selected", @c EINA_FALSE, otherwise - * - * By default, grid items will only call their selection callback - * function when firstly getting selected, any subsequent further - * clicks will do nothing. With this call, you make those - * subsequent clicks also to issue the selection callbacks. - * - * @note Double clicks will @b always be reported on items. - * - * @see elm_gengrid_always_select_mode_get() - * - * @ingroup Gengrid - */ -//XXX: How about elm_gengrid_select_mode_set() ? -EAPI void elm_gengrid_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); - -/** - * Get whether items on a given gengrid widget have their selection - * callbacks issued for @b every subsequent selection click on them - * or just for the first click. - * - * @param obj The gengrid object. - * @return @c EINA_TRUE if the gengrid items are "always selected", - * @c EINA_FALSE, otherwise - * - * @see elm_gengrid_always_select_mode_set() for more details - * - * @ingroup Gengrid - */ -//XXX: How about elm_gengrid_select_mode_get() ? -EAPI Eina_Bool elm_gengrid_always_select_mode_get(const Evas_Object *obj); - -/** - * Set whether items on a given gengrid widget can be selected or not. - * - * @param obj The gengrid object - * @param no_select @c EINA_TRUE to make items selectable, - * @c EINA_FALSE otherwise - * - * This will make items in @p obj selectable or not. In the latter - * case, any user interaction on the gengrid items will neither make - * them appear selected nor them call their selection callback - * functions. - * - * @see elm_gengrid_no_select_mode_get() - * - * @ingroup Gengrid - */ -//XXX: elm_gengrid_always_select_mode_set and elm_gengrid_no_select_mode_set API could be merged to elm_genlist_select_mode_set() -EAPI void elm_gengrid_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); - -/** - * Get whether items on a given gengrid widget can be selected or - * not. - * - * @param obj The gengrid object - * @return @c EINA_TRUE, if items are selectable, @c EINA_FALSE - * otherwise - * - * @see elm_gengrid_no_select_mode_set() for more details - * - * @ingroup Gengrid - */ -//XXX: elm_gengrid_always_select_mode_get and elm_gengrid_no_select_mode_get API could be merged to elm_genlist_select_mode_get() -EAPI Eina_Bool elm_gengrid_no_select_mode_get(const Evas_Object *obj); - -/** * Enable or disable bouncing effect for a given gengrid widget * * @param obj The gengrid object @@ -1490,5 +1417,42 @@ EAPI void elm_gengrid_filled_set(Evas_Object *obj, Eina EAPI Eina_Bool elm_gengrid_filled_get(const Evas_Object *obj); /** + * Set the gengrid select mode. + * + * @param obj The gengrid object + * @param mode The select mode + * + * elm_gengrid_select_mode_set() changes item select mode in the gengrid 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_gengrid_select_mode_get() + * + * @ingroup Gengrid + */ +EAPI void +elm_gengrid_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode); + +/** + * Get the gengrid select mode. + * + * @param obj The gengrid object + * @return The select mode + * (If getting mode is failed, it returns ELM_OBJECT_SELECT_MODE_MAX) + * + * @see elm_gengrid_select_mode_set() + * + * @ingroup Gengrid + */ +EAPI Elm_Object_Select_Mode_Type +elm_gengrid_select_mode_get(const Evas_Object *obj); + +/** * @} */ diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 45daa7e..ac35bb9 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -688,7 +688,8 @@ static void _item_highlight(Elm_Gen_Item *it) { const char *selectraise; - if ((it->wd->no_select) || (it->generation < it->wd->generation) || + if ((it->wd->select_mode == ELM_OBJECT_NO_SELECT) || + (it->generation < it->wd->generation) || (it->highlighted) || elm_widget_item_disabled_get(it) || (it->display_only) || (it->item->mode_view)) return; @@ -3503,13 +3504,15 @@ elm_genlist_add(Evas_Object *parent) void _item_select(Elm_Gen_Item *it) { - if ((it->wd->no_select) || (it->generation < it->wd->generation) || (it->mode_set)) return; + if ((it->generation < it->wd->generation) || (it->mode_set) || + (it->wd->select_mode == ELM_OBJECT_NO_SELECT)) + return; if (!it->selected) { it->selected = EINA_TRUE; it->wd->selected = eina_list_append(it->wd->selected, it); } - else if (!it->wd->always_select) return; + else if (it->wd->select_mode == ELM_OBJECT_ALWAYS_SELECT) return; evas_object_ref(WIDGET(it)); it->walking++; @@ -5247,42 +5250,64 @@ elm_genlist_mode_get(const Evas_Object *obj) return wd->mode; } -EAPI void +EINA_DEPRECATED EAPI void elm_genlist_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; - wd->always_select = !!always_select; + if (always_select) + elm_genlist_select_mode_set(obj, ELM_OBJECT_ALWAYS_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + elm_genlist_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED EAPI Eina_Bool elm_genlist_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_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_ALWAYS_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } -EAPI void +EINA_DEPRECATED EAPI void elm_genlist_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_genlist_select_mode_set(obj, ELM_OBJECT_NO_SELECT); + else + { + Elm_Object_Select_Mode_Type oldmode = elm_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + elm_genlist_select_mode_set(obj, ELM_OBJECT_NORMAL_SELECT); + } } -EAPI Eina_Bool +EINA_DEPRECATED EAPI Eina_Bool elm_genlist_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_genlist_select_mode_get(obj); + if (oldmode == ELM_OBJECT_NO_SELECT) + return EINA_TRUE; + else + return EINA_FALSE; } EAPI void @@ -5695,6 +5720,27 @@ elm_genlist_item_flip_get(const Elm_Object_Item *it) return _it->flipped; } +EAPI void +elm_genlist_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 (wd->select_mode != mode) + wd->select_mode = mode; +} + +EAPI Elm_Object_Select_Mode_Type +elm_genlist_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; +} + /* for gengrid as of now */ void _elm_genlist_page_relative_set(Evas_Object *obj, diff --git a/src/lib/elm_genlist.h b/src/lib/elm_genlist.h index 547145b..8772a31 100644 --- a/src/lib/elm_genlist.h +++ b/src/lib/elm_genlist.h @@ -391,7 +391,7 @@ typedef enum /** * @see Elm_Gen_Item_Class */ -typedef Elm_Gen_Item_Class Elm_Genlist_Item_Class; +typedef Elm_Gen_Item_Class Elm_Genlist_Item_Class; /** * @see Elm_Gen_Item_Text_Get_Cb @@ -507,71 +507,6 @@ EAPI void elm_genlist_mode_set(Evas_Object *obj, Elm_Li EAPI Elm_List_Mode elm_genlist_mode_get(const Evas_Object *obj); /** - * Set the always select mode. - * - * @param obj The genlist object - * @param always_select The always select mode (@c EINA_TRUE = on, @c - * EINA_FALSE = off). Default is @c EINA_FALSE. - * - * Items will only call their selection func and callback when first - * becoming selected. Any further clicks will do nothing, unless you - * enable always select with elm_genlist_always_select_mode_set(). - * This means that, even if selected, every click will make the selected - * callbacks be called. - * - * @see elm_genlist_always_select_mode_get() - * - * @ingroup Genlist - */ -//XXX: How about elm_genlist_select_mode_set() ? -EAPI void elm_genlist_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select); - -/** - * Get the always select mode. - * - * @param obj The genlist object - * @return The always select mode - * (@c EINA_TRUE = on, @c EINA_FALSE = off) - * - * @see elm_genlist_always_select_mode_set() - * - * @ingroup Genlist - */ -//XXX: How about elm_genlist_select_mode_get() ? -EAPI Eina_Bool elm_genlist_always_select_mode_get(const Evas_Object *obj); - -/** - * Enable/disable the no select mode. - * - * @param obj The genlist object - * @param no_select The no select mode - * (EINA_TRUE = on, EINA_FALSE = off) - * - * This will turn off the ability to select items entirely and they - * will neither appear selected nor call selected callback functions. - * - * @see elm_genlist_no_select_mode_get() - * - * @ingroup Genlist - */ -//XXX: elm_genlist_always_select_mode_set and elm_genlist_no_select_mode_set API could be merged to elm_genlist_select_mode_set() -EAPI void elm_genlist_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select); - -/** - * Gets whether the no select mode is enabled. - * - * @param obj The genlist object - * @return The no select mode - * (@c EINA_TRUE = on, @c EINA_FALSE = off) - * - * @see elm_genlist_no_select_mode_set() - * - * @ingroup Genlist - */ -//XXX: elm_genlist_always_select_mode_get and elm_genlist_no_select_mode_get API could be merged to elm_genlist_select_mode_get() -EAPI Eina_Bool elm_genlist_no_select_mode_get(const Evas_Object *obj); - -/** * Enable/disable horizontal and vertical bouncing effect. * * @param obj The genlist object @@ -1908,5 +1843,42 @@ EAPI void elm_genlist_tree_effect_enabled_set(Evas_Object *obj, Ei EAPI Eina_Bool elm_genlist_tree_effect_enabled_get(const Evas_Object *obj); /** + * Set the genlist select mode. + * + * @param obj The genlist object + * @param mode The select mode + * + * elm_genlist_select_mode_set() changes item select mode in the genlist 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_genlist_select_mode_get() + * + * @ingroup Genlist + */ +EAPI void +elm_genlist_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode_Type mode); + +/** + * Get the genlist select mode. + * + * @param obj The genlist object + * @return The select mode + * (If getting mode is failed, it returns ELM_OBJECT_SELECT_MODE_MAX) + * + * @see elm_genlist_select_mode_set() + * + * @ingroup Genlist + */ +EAPI Elm_Object_Select_Mode_Type +elm_genlist_select_mode_get(const Evas_Object *obj); + +/** * @} */ -- 2.7.4