seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=ae03d3cef36abd27ff530e350e39ae401f4f389e
commit ae03d3cef36abd27ff530e350e39ae401f4f389e Author: Daniel Juyung Seo <seojuyu...@gmail.com> Date: Sun Nov 3 23:58:57 2013 +0900 Genlist/Gengrid: Added multi select mode for genlist/gengrid. elm_genlist_multi_select_mode_set/get() elm_gengrid_multi_select_mode_set/get() --- ChangeLog | 10 ++++------ NEWS | 2 +- src/lib/elm_general.h | 8 +++++++- src/lib/elm_gengrid.c | 21 ++++++++++++++++++++- src/lib/elm_gengrid_legacy.h | 39 +++++++++++++++++++++++++++++++++++---- src/lib/elm_genlist.c | 21 ++++++++++++++++++++- src/lib/elm_genlist_legacy.h | 39 +++++++++++++++++++++++++++++++++++---- src/lib/elm_widget_gengrid.h | 1 + src/lib/elm_widget_genlist.h | 1 + 9 files changed, 124 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 434f65f..9207326 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1736,12 +1736,10 @@ * slider: Added elm_slider_step_get(), elm_slider_step_set(). -2013-10-02 Ryuan Choi (ryuan) - - * genlist , gengrid: Add ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL. - It disallow multiple selection when clicked without control pressed although - multiple selection is enabled. - 2013-10-03 Abhinandan Aryadipta (aryarockstar) * Popup - Added elm_popup_move() api. + +2013-10-03 Daniel Juyung Seo (SeoZ) + + * Genlist/Gengrid: Added multi select mode. diff --git a/NEWS b/NEWS index fece1e7..2eac992 100644 --- a/NEWS +++ b/NEWS @@ -101,8 +101,8 @@ Additions: * Add support for "clicked" callback on Return/space/KP_Enter key press for image. * Add "virtualkeypad,size,changed" callback on virtualkeypad min size change for conformant. * Add elm_slider_step_get(), elm_slider_step_set() for slider. - * Add ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL select mode for genlist/gengrid. * Add support elm_popup_move() for popup. + * Add multi select mode for genlist/gengrid. Improvements: diff --git a/src/lib/elm_general.h b/src/lib/elm_general.h index 9f5e140..7876af4 100644 --- a/src/lib/elm_general.h +++ b/src/lib/elm_general.h @@ -126,10 +126,16 @@ typedef enum ELM_OBJECT_SELECT_MODE_ALWAYS, /**< always select mode */ ELM_OBJECT_SELECT_MODE_NONE, /**< no select mode */ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY, /**< no select mode with no finger size rule*/ - ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL, /**< disallow mutiple selection when clicked without control key pressed */ ELM_OBJECT_SELECT_MODE_MAX } Elm_Object_Select_Mode; +typedef enum +{ + ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT = 0, /**< default multiple select mode */ + ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL, /**< disallow mutiple selection when clicked without control key pressed */ + ELM_OBJECT_MULTI_SELECT_MODE_MAX +} Elm_Object_Multi_Select_Mode; + typedef Eina_Bool (*Elm_Event_Cb)(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); /**< Function prototype definition for callbacks on input events happening on Elementary widgets. @a data will receive the user data pointer passed to elm_object_event_callback_add(). @a src will be a pointer to the widget on which the input event took place. @a type will get the type of this event and @a event_info, the struct with details on this event. */ extern EAPI double _elm_startup_time; diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 883d4fb..3587374 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -597,7 +597,7 @@ _item_mouse_up_cb(void *data, } if (elm_widget_item_disabled_get(it) || (dragged)) return; if (sd->multi && - ((sd->select_mode != ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL) || + ((sd->multi_select_mode != ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL) || (evas_key_modifier_is_set(ev->modifiers, "Control")))) { if (!it->selected) @@ -3029,6 +3029,25 @@ _multi_select_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) *ret = sd->multi; } +EAPI void +elm_gengrid_multi_select_mode_set(Evas_Object *obj, + Elm_Object_Multi_Select_Mode mode) +{ + ELM_GENGRID_CHECK(obj); + ELM_GENGRID_DATA_GET(obj, sd); + + sd->multi_select_mode = mode; +} + +EAPI Elm_Object_Multi_Select_Mode +elm_gengrid_multi_select_mode_get(const Evas_Object *obj) +{ + ELM_GENGRID_CHECK(obj) ELM_OBJECT_MULTI_SELECT_MODE_MAX; + ELM_GENGRID_DATA_GET(obj, sd); + + return sd->multi_select_mode; +} + EAPI Elm_Object_Item * elm_gengrid_selected_item_get(const Evas_Object *obj) { diff --git a/src/lib/elm_gengrid_legacy.h b/src/lib/elm_gengrid_legacy.h index 0f09c70..773372e 100644 --- a/src/lib/elm_gengrid_legacy.h +++ b/src/lib/elm_gengrid_legacy.h @@ -69,6 +69,41 @@ EAPI void elm_gengrid_multi_select_set(Evas_Object *obj EAPI Eina_Bool elm_gengrid_multi_select_get(const Evas_Object *obj); /** + * Set the gengrid multi select mode. + * + * @param obj The gengrid object + * @param mode The multi select mode + * + * - ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever each + * item is clicked. + * - ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only one item will be selected + * although multi-selection is enabled, if clicked without pressing control + * key. This mode is only available with multi-selection. + * + * @see elm_gengrid_multi_select_set() + * @see elm_gengrid_multi_select_mode_get() + * + * @ingroup Gengrid + * @since 1.8 + */ +EAPI void elm_gengrid_multi_select_mode_set(Evas_Object *obj, Elm_Object_Multi_Select_Mode mode); + +/** + * Get the gengrid multi select mode. + * + * @param obj The gengrid object + * @return The multi select mode + * (If getting mode if failed, it returns ELM_OBJECT_MULTI_SELECT_MODE_MAX) + * + * @see elm_gengrid_multi_select_set() + * @see elm_gengrid_multi_select_mode_set() + * + * @ingroup Gengrid + * @since 1.8 + */ +EAPI Elm_Object_Multi_Select_Mode elm_gengrid_multi_select_mode_get(const Evas_Object *obj); + +/** * Set the direction in which a given gengrid widget will expand while * placing its items. * @@ -799,12 +834,8 @@ EAPI Eina_Bool elm_gengrid_filled_get(const Evas_Object *obj * - ELM_OBJECT_SELECT_MODE_NONE : This will turn off the ability to select items * entirely and they will neither appear selected nor call selected * callback functions. - * - ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL : Only one item will be selected - * although multi-selection is enabled, if clicked without pressing control - * key. This mode is only available with multi-selection. * * @see elm_gengrid_select_mode_get() - * @see elm_gengrid_multi_select_set() * * @ingroup Gengrid */ diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index cdb27be..6111994 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -4221,7 +4221,7 @@ _item_mouse_up_cb(void *data, if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; if (sd->multi && - ((sd->select_mode != ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL) || + ((sd->multi_select_mode != ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL) || (evas_key_modifier_is_set(ev->modifiers, "Control")))) { if (!it->selected) @@ -5806,6 +5806,25 @@ _multi_select_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) *ret = sd->multi; } +EAPI void +elm_genlist_multi_select_mode_set(Evas_Object *obj, + Elm_Object_Multi_Select_Mode mode) +{ + ELM_GENLIST_CHECK(obj); + ELM_GENLIST_DATA_GET(obj, sd); + + sd->multi_select_mode = mode; +} + +EAPI Elm_Object_Multi_Select_Mode +elm_genlist_multi_select_mode_get(const Evas_Object *obj) +{ + ELM_GENLIST_CHECK(obj) ELM_OBJECT_MULTI_SELECT_MODE_MAX; + ELM_GENLIST_DATA_GET(obj, sd); + + return sd->multi_select_mode; +} + EAPI Elm_Object_Item * elm_genlist_selected_item_get(const Evas_Object *obj) { diff --git a/src/lib/elm_genlist_legacy.h b/src/lib/elm_genlist_legacy.h index d1a02fc..ddaa799 100644 --- a/src/lib/elm_genlist_legacy.h +++ b/src/lib/elm_genlist_legacy.h @@ -59,6 +59,41 @@ EAPI void elm_genlist_multi_select_set(Evas_Object *obj EAPI Eina_Bool elm_genlist_multi_select_get(const Evas_Object *obj); /** + * Set the genlist multi select mode. + * + * @param obj The genlist object + * @param mode The multi select mode + * + * - ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever each + * item is clicked. + * - ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only one item will be selected + * although multi-selection is enabled, if clicked without pressing control + * key. This mode is only available with multi-selection. + * + * @see elm_genlist_multi_select_set() + * @see elm_genlist_multi_select_mode_get() + * + * @ingroup Genlist + * @since 1.8 + */ +EAPI void elm_genlist_multi_select_mode_set(Evas_Object *obj, Elm_Object_Multi_Select_Mode mode); + +/** + * Get the genlist multi select mode. + * + * @param obj The genlist object + * @return The multi select mode + * (If getting mode if failed, it returns ELM_OBJECT_MULTI_SELECT_MODE_MAX) + * + * @see elm_genlist_multi_select_set() + * @see elm_genlist_multi_select_mode_set() + * + * @ingroup Genlist + * @since 1.8 + */ +EAPI Elm_Object_Multi_Select_Mode elm_genlist_multi_select_mode_get(const Evas_Object *obj); + +/** * This sets the horizontal stretching mode. * * @param obj The genlist object @@ -575,12 +610,8 @@ EAPI Eina_Bool elm_genlist_tree_effect_enabled_get(const Evas_Object *o * - ELM_OBJECT_SELECT_MODE_NONE : This will turn off the ability to select items * entirely and they will neither appear selected nor call selected * callback functions. - * - ELM_OBJECT_MULTIPLE_SELECT_MODE_WITH_CONTROL : Only one item will be selected - * although multi-selection is enabled, if clicked without pressing control - * key. This mode is only available with multi-selection. * * @see elm_genlist_select_mode_get() - * @see elm_genlist_multi_select_set() * * @ingroup Genlist */ diff --git a/src/lib/elm_widget_gengrid.h b/src/lib/elm_widget_gengrid.h index 5460193..7ad6fed 100644 --- a/src/lib/elm_widget_gengrid.h +++ b/src/lib/elm_widget_gengrid.h @@ -49,6 +49,7 @@ struct _Elm_Gengrid_Smart_Data unsigned int item_count; Evas_Coord pan_x, pan_y; Elm_Object_Select_Mode select_mode; + Elm_Object_Multi_Select_Mode multi_select_mode; /**< select mode for multiple selection */ Ecore_Cb calc_cb; Ecore_Cb clear_cb; diff --git a/src/lib/elm_widget_genlist.h b/src/lib/elm_widget_genlist.h index 20ba4c2..db87119 100644 --- a/src/lib/elm_widget_genlist.h +++ b/src/lib/elm_widget_genlist.h @@ -54,6 +54,7 @@ struct _Elm_Genlist_Smart_Data unsigned int item_count; Evas_Coord pan_x, pan_y; Elm_Object_Select_Mode select_mode; + Elm_Object_Multi_Select_Mode multi_select_mode; /**< select mode for multiple selection */ Eina_Inlist *blocks; /* an inlist of all * blocks. a block --