efl/legacy/elementary/src/lib/elm_list_legacy.h

589 lines
20 KiB
C

/**
* Add a new list widget to the given parent Elementary
* (container) object.
*
* @param parent The parent object.
* @return a new list widget handle or @c NULL, on errors.
*
* This function inserts a new list widget on the canvas.
*
* @ingroup List
*/
EAPI Evas_Object *elm_list_add(Evas_Object *parent);
/**
* Starts the list.
*
* @param obj The list object
*
* @note Call before running show() on the list object.
* @warning If not called, it won't display the list properly.
*
* @code
* li = elm_list_add(win);
* elm_list_item_append(li, "First", NULL, NULL, NULL, NULL);
* elm_list_item_append(li, "Second", NULL, NULL, NULL, NULL);
* elm_list_go(li);
* evas_object_show(li);
* @endcode
*
* @ingroup List
*/
EAPI void elm_list_go(Evas_Object *obj);
/**
* Enable or disable multiple items selection on the list object.
*
* @param obj The list object
* @param multi @c EINA_TRUE to enable multi selection or @c EINA_FALSE to
* disable it.
*
* Disabled by default. If disabled, the user can select a single item of
* the list each time. Selected items are highlighted on list.
* If enabled, many items can be selected.
*
* If a selected item is selected again, it will be unselected.
*
* @see elm_list_multi_select_get()
*
* @ingroup List
*/
EAPI void elm_list_multi_select_set(Evas_Object *obj, Eina_Bool multi);
/**
* Get a value whether multiple items selection is enabled or not.
*
* @see elm_list_multi_select_set() for details.
*
* @param obj The list object.
* @return @c EINA_TRUE means multiple items selection is enabled.
* @c EINA_FALSE indicates it's disabled. If @p obj is @c NULL,
* @c EINA_FALSE is returned.
*
* @ingroup List
*/
EAPI Eina_Bool elm_list_multi_select_get(const Evas_Object *obj);
/**
* Set the list multi select mode.
*
* @param obj The list 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_list_multi_select_set()
* @see elm_list_multi_select_mode_get()
*
* @ingroup List
* @since 1.8
*/
EAPI void elm_list_multi_select_mode_set(Evas_Object *obj, Elm_Object_Multi_Select_Mode mode);
/**
* Get the list multi select mode.
*
* @param obj The list object
* @return The multi select mode
* (If getting mode is failed, it returns ELM_OBJECT_MULTI_SELECT_MODE_MAX)
*
* @see elm_list_multi_select_set()
* @see elm_list_multi_select_mode_set()
*
* @ingroup List
* @since 1.8
*/
EAPI Elm_Object_Multi_Select_Mode elm_list_multi_select_mode_get(const Evas_Object *obj);
/**
* Set which mode to use for the list object.
*
* @param obj The list object
* @param mode One of #Elm_List_Mode: #ELM_LIST_COMPRESS,
* #ELM_LIST_SCROLL, #ELM_LIST_LIMIT or #ELM_LIST_EXPAND.
*
* Set list's resize behavior, transverse axis scroll and
* items cropping. See each mode's description for more details.
*
* @note Default value is #ELM_LIST_SCROLL.
*
* Only one mode at a time can be set. If a previous one was set, it
* will be changed by the new mode after this call. Bitmasks won't
* work here as well.
*
* @warning This function's behavior will clash with those of
* elm_scroller_content_min_limit(), so use either one of them, but
* not both.
*
* @see elm_list_mode_get()
*
* @ingroup List
*/
EAPI void elm_list_mode_set(Evas_Object *obj, Elm_List_Mode mode);
/**
* Get the mode the list is at.
*
* @param obj The list object
* @return One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, #ELM_LIST_LIMIT, #ELM_LIST_EXPAND or #ELM_LIST_LAST on errors.
*
* @note see elm_list_mode_set() for more information.
*
* @ingroup List
*/
EAPI Elm_List_Mode elm_list_mode_get(const Evas_Object *obj);
/**
* Enable or disable horizontal mode on the list object.
*
* @param obj The list object.
* @param horizontal @c EINA_TRUE to enable horizontal or @c EINA_FALSE to
* disable it, i.e., to enable vertical mode.
*
* @note Vertical mode is set by default.
*
* On horizontal mode items are displayed on list from left to right,
* instead of from top to bottom. Also, the list will scroll horizontally.
* Each item will presents left icon on top and right icon, or end, at
* the bottom.
*
* @see elm_list_horizontal_get()
*
* @ingroup List
*/
EAPI void elm_list_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
/**
* Get a value whether horizontal mode is enabled or not.
*
* @param obj The list object.
* @return @c EINA_TRUE means horizontal mode selection is enabled.
* @c EINA_FALSE indicates it's disabled. If @p obj is @c NULL,
* @c EINA_FALSE is returned.
*
* @see elm_list_horizontal_set() for details.
*
* @ingroup List
*/
EAPI Eina_Bool elm_list_horizontal_get(const Evas_Object *obj);
/**
* Set the list select mode.
*
* @param obj The list object
* @param mode The select mode
*
* elm_list_select_mode_set() changes item select mode in the list widget.
* - ELM_OBJECT_SELECT_MODE_DEFAULT : 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_SELECT_MODE_ALWAYS : This means that, even if selected,
* every click will make the selected callbacks be called.
* - 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.
*
* @see elm_list_select_mode_get()
*
* @ingroup List
*/
EAPI void elm_list_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode mode);
/**
* Get the list select mode.
*
* @param obj The list object
* @return The select mode
* (If getting mode is failed, it returns ELM_OBJECT_SELECT_MODE_MAX)
*
* @see elm_list_select_mode_set()
*
* @ingroup List
*/
EAPI Elm_Object_Select_Mode elm_list_select_mode_get(const Evas_Object *obj);
/**
* Append a new item to the list object.
*
* @param obj The list object.
* @param label The label of the list item.
* @param icon The icon object to use for the left side of the item. An
* icon can be any Evas object, but usually it is an icon created
* with elm_icon_add().
* @param end The icon object to use for the right side of the item. An
* icon can be any Evas object.
* @param func The function to call when the item is clicked.
* @param data The data to associate with the item for related callbacks.
*
* @return The created item or @c NULL upon failure.
*
* A new item will be created and appended to the list, i.e., will
* be set as @b last item.
*
* Items created with this method can be deleted with elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
*
* If a function is passed as argument, it will be called every time this item
* is selected, i.e., the user clicks over an unselected item.
* If always select is enabled it will call this function every time
* user clicks over an item (already selected or not).
* If such function isn't needed, just passing
* @c NULL as @p func is enough. The same should be done for @p data.
*
* @note Remember that the label parameter is copied inside the list. So if an
* application dynamically allocated the label, the application should free the
* label after this call.
*
* Simple example (with no function callback or data associated):
* @code
* li = elm_list_add(win);
* ic = elm_icon_add(win);
* elm_image_file_set(ic, "path/to/image", NULL);
* elm_icon_resizable_set(ic, EINA_TRUE, EINA_TRUE);
* elm_list_item_append(li, "label", ic, NULL, NULL, NULL);
* elm_list_go(li);
* evas_object_show(li);
* @endcode
*
* @see elm_list_select_mode_set()
* @see elm_object_item_del()
* @see elm_object_item_del_cb_set()
* @see elm_list_clear()
* @see elm_icon_add()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
/**
* Prepend a new item to the list object.
*
* @param obj The list object.
* @param label The label of the list item.
* @param icon The icon object to use for the left side of the item. An
* icon can be any Evas object, but usually it is an icon created
* with elm_icon_add().
* @param end The icon object to use for the right side of the item. An
* icon can be any Evas object.
* @param func The function to call when the item is clicked.
* @param data The data to associate with the item for related callbacks.
*
* @return The created item or @c NULL upon failure.
*
* A new item will be created and prepended to the list, i.e., will
* be set as @b first item.
*
* Items created with this method can be deleted with elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
*
* If a function is passed as argument, it will be called every time this item
* is selected, i.e., the user clicks over an unselected item.
* If always select is enabled it will call this function every time
* user clicks over an item (already selected or not).
* If such function isn't needed, just passing
* @c NULL as @p func is enough. The same should be done for @p data.
*
* @note Remember that the label parameter is copied inside the list. So if an
* application dynamically allocated the label, the application should free the
* label after this call.
*
* @see elm_list_item_append() for a simple code example.
* @see elm_list_select_mode_set()
* @see elm_object_item_del()
* @see elm_object_item_del_cb_set()
* @see elm_list_clear()
* @see elm_icon_add()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
/**
* Insert a new item into the list object before item @p before.
*
* @param obj The list object.
* @param before The list item to insert before.
* @param label The label of the list item.
* @param icon The icon object to use for the left side of the item. An
* icon can be any Evas object, but usually it is an icon created
* with elm_icon_add().
* @param end The icon object to use for the right side of the item. An
* icon can be any Evas object.
* @param func The function to call when the item is clicked.
* @param data The data to associate with the item for related callbacks.
*
* @return The created item or @c NULL upon failure.
*
* A new item will be created and added to the list. Its position in
* this list will be just before item @p before.
*
* Items created with this method can be deleted with elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
*
* If a function is passed as argument, it will be called every time this item
* is selected, i.e., the user clicks over an unselected item.
* If always select is enabled it will call this function every time
* user clicks over an item (already selected or not).
* If such function isn't needed, just passing
* @c NULL as @p func is enough. The same should be done for @p data.
*
* @note Remember that the label parameter is copied inside the list. So if an
* application dynamically allocated the label, the application should free the
* label after this call.
*
* @see elm_list_item_append() for a simple code example.
* @see elm_list_select_mode_set()
* @see elm_object_item_del()
* @see elm_object_item_del_cb_set()
* @see elm_list_clear()
* @see elm_icon_add()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_item_insert_before(Evas_Object *obj, Elm_Object_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
/**
* Insert a new item into the list object after item @p after.
*
* @param obj The list object.
* @param after The list item to insert after.
* @param label The label of the list item.
* @param icon The icon object to use for the left side of the item. An
* icon can be any Evas object, but usually it is an icon created
* with elm_icon_add().
* @param end The icon object to use for the right side of the item. An
* icon can be any Evas object.
* @param func The function to call when the item is clicked.
* @param data The data to associate with the item for related callbacks.
*
* @return The created item or @c NULL upon failure.
*
* A new item will be created and added to the list. Its position in
* this list will be just after item @p after.
*
* Items created with this method can be deleted with elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
*
* If a function is passed as argument, it will be called every time this item
* is selected, i.e., the user clicks over an unselected item.
* If always select is enabled it will call this function every time
* user clicks over an item (already selected or not).
* If such function isn't needed, just passing
* @c NULL as @p func is enough. The same should be done for @p data.
*
* @note Remember that the label parameter is copied inside the list. So if an
* application dynamically allocated the label, the application should free the
* label after this call.
*
* @see elm_list_item_append() for a simple code example.
* @see elm_list_select_mode_set()
* @see elm_object_item_del()
* @see elm_object_item_del_cb_set()
* @see elm_list_clear()
* @see elm_icon_add()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_item_insert_after(Evas_Object *obj, Elm_Object_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
/**
* Insert a new item into the sorted list object.
*
* @param obj The list object.
* @param label The label of the list item.
* @param icon The icon object to use for the left side of the item. An
* icon can be any Evas object, but usually it is an icon created
* with elm_icon_add().
* @param end The icon object to use for the right side of the item. An
* icon can be any Evas object.
* @param func The function to call when the item is clicked.
* @param data The data to associate with the item for related callbacks.
* @param cmp_func The comparing function to be used to sort list
* items <b>by #Elm_Object_Item item handles</b>. This function will
* receive two items and compare them, returning a non-negative integer
* if the second item should be place after the first, or negative value
* if should be placed before.
*
* @return The created item or @c NULL upon failure.
*
* @note This function inserts values into a list object assuming it was
* sorted and the result will be sorted.
*
* A new item will be created and added to the list. Its position in
* this list will be found comparing the new item with previously inserted
* items using function @p cmp_func.
*
* Items created with this method can be deleted with elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
*
* If a function is passed as argument, it will be called every time this item
* is selected, i.e., the user clicks over an unselected item.
* If always select is enabled it will call this function every time
* user clicks over an item (already selected or not).
* If such function isn't needed, just passing
* @c NULL as @p func is enough. The same should be done for @p data.
*
* @note Remember that the label parameter is copied inside the list. So if an
* application dynamically allocated the label, the application should free the
* label after this call.
*
* @see elm_list_item_append() for a simple code example.
* @see elm_list_select_mode_set()
* @see elm_object_item_del()
* @see elm_object_item_del_cb_set()
* @see elm_list_clear()
* @see elm_icon_add()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_item_sorted_insert(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func);
/**
* Remove all list's items.
*
* @param obj The list object
*
* @see elm_object_item_del()
* @see elm_list_item_append()
*
* @ingroup List
*/
EAPI void elm_list_clear(Evas_Object *obj);
/**
* Get a list of all the list items.
*
* @param obj The list object
* @return An @c Eina_List of list items, #Elm_Object_Item,
* or @c NULL on failure.
*
* @see elm_list_item_append()
* @see elm_object_item_del()
* @see elm_list_clear()
*
* @ingroup List
*/
EAPI const Eina_List *elm_list_items_get(const Evas_Object *obj);
/**
* Get the selected item.
*
* @param obj The list object.
* @return The selected list item.
*
* The selected item can be unselected with function
* elm_list_item_selected_set().
*
* The selected item always will be highlighted on list.
*
* @see elm_list_selected_items_get()
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_selected_item_get(const Evas_Object *obj);
/**
* Return a list of the currently selected list items.
*
* @param obj The list object.
* @return An @c Eina_List of list items, #Elm_Object_Item,
* or @c NULL on failure.
*
* Multiple items can be selected if multi select is enabled. It can be
* done with elm_list_multi_select_set().
*
* @see elm_list_selected_item_get()
* @see elm_list_multi_select_set()
*
* @ingroup List
*/
EAPI const Eina_List *elm_list_selected_items_get(const Evas_Object *obj);
/**
* Get the first item in the list
*
* This returns the first item in the list.
*
* @param obj The list object
* @return The first item, or NULL if none
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_first_item_get(const Evas_Object *obj);
/**
* Get the last item in the list
*
* This returns the last item in the list.
*
* @return The last item, or NULL if none
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_last_item_get(const Evas_Object *obj);
/**
* Get the item that is at the x, y canvas coords.
*
* @param obj The list object.
* @param x The input x coordinate
* @param y The input y coordinate
* @param posret The position relative to the item returned here
* @return The item at the coordinates or NULL if none
*
* This returns the item at the given coordinates (which are canvas
* relative, not object-relative). If an item is at that coordinate,
* that item handle is returned, and if @p posret is not NULL, the
* integer pointed to is set to a value of -1, 0 or 1, depending if
* the coordinate is on the upper portion of that item (-1), on the
* middle section (0) or on the lower part (1). If NULL is returned as
* an item (no item found there), then posret may indicate -1 or 1
* based if the coordinate is above or below all items respectively in
* the list.
*
*
* @ingroup List
*/
EAPI Elm_Object_Item *elm_list_at_xy_item_get(const Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *posret);
/**
* Set focus upon items selection mode
*
* @param obj The genlist object
* @param enabled The tree effect status
* (EINA_TRUE = enabled, EINA_FALSE = disabled)
*
* When enabled, every selection of an item inside the genlist will automatically set focus to
* its first focusable widget from the left. This is true of course if the selection was made by
* clicking an unfocusable area in an item or selecting it with a key movement. Clicking on a
* focusable widget inside an item will couse this particular item to get focus as usual.
*
* @ingroup List
*/
EAPI void elm_list_focus_on_selection_set(Evas_Object *obj, Eina_Bool enabled);
/**
* Get whether focus upon item's selection mode is enabled.
*
* @param obj The genlist object
* @return The tree effect status
* (EINA_TRUE = enabled, EINA_FALSE = disabled)
*
* @ingroup List
*/
EAPI Eina_Bool elm_list_focus_on_selection_get(const Evas_Object *obj);