diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 434f65f669..9207326e2e 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/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/legacy/elementary/NEWS b/legacy/elementary/NEWS index fece1e7900..2eac9927d0 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_general.h b/legacy/elementary/src/lib/elm_general.h index 9f5e140945..7876af40a1 100644 --- a/legacy/elementary/src/lib/elm_general.h +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index 883d4fb9f3..3587374162 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_gengrid_legacy.h b/legacy/elementary/src/lib/elm_gengrid_legacy.h index 0f09c70d34..773372e97b 100644 --- a/legacy/elementary/src/lib/elm_gengrid_legacy.h +++ b/legacy/elementary/src/lib/elm_gengrid_legacy.h @@ -68,6 +68,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/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index cdb27be35e..6111994423 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_genlist_legacy.h b/legacy/elementary/src/lib/elm_genlist_legacy.h index d1a02fc780..ddaa7995fd 100644 --- a/legacy/elementary/src/lib/elm_genlist_legacy.h +++ b/legacy/elementary/src/lib/elm_genlist_legacy.h @@ -58,6 +58,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. * @@ -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/legacy/elementary/src/lib/elm_widget_gengrid.h b/legacy/elementary/src/lib/elm_widget_gengrid.h index 5460193f69..7ad6fed5ed 100644 --- a/legacy/elementary/src/lib/elm_widget_gengrid.h +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_widget_genlist.h b/legacy/elementary/src/lib/elm_widget_genlist.h index 20ba4c2086..db8711907a 100644 --- a/legacy/elementary/src/lib/elm_widget_genlist.h +++ b/legacy/elementary/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