Bundles / src / view /
view_list.c
- /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include <app.h>
- #include <efl_extension.h>
- #include "$(appName).h"
- #include "view/view_list.h"
- static void _tree_item_contracted(void *data, Evas_Object *o, void *event_info);
- static void _selection_status_changed_cb(void *data, Evas_Object *obj, void *event_info);
- /**
- * @brief Creates a genlist object.
- * @param[in] parent The genlist's parent.
- * @return The created genlist or NULL on error.
- */
- Evas_Object *view_list_create(Evas_Object *parent)
- {
- Evas_Object *list = elm_genlist_add(parent);
- if (!list) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] list == NULL", __FILE__, __LINE__);
- return NULL;
- }
- evas_object_smart_callback_add(list, "selected", _selection_status_changed_cb, (void*)EINA_TRUE);
- elm_scroller_gravity_set(list, 0.0, 1.0);
- return list;
- }
- /**
- * @brief Adds callback functions to a genlist that are used when an item is extended or contracted.
- * @param[in] list The genlist.
- * @param[in] itc_parent The parent item class (the expanding or contracting item).
- * @param[in] itc_child The sub object of the parent object.
- * @param[in] expand_callback Callback invoked when an item was expanded.
- * @param[in] contract_callback Callback invoked when an item was contracted.
- * @note If the contract callback is not provided a default one will be used. If a callback is provided it has to have the following code:
- * @code Elm_Object_Item *it_parent = (Elm_Object_Item*) event_info;
- elm_genlist_item_subitems_clear(it_parent);
- */
- void view_list_add_tree_callbacks(Evas_Object *list, Elm_Gen_Item_Class *itc_parent, Elm_Gen_Item_Class *itc_child, Evas_Smart_Cb expand_callback, Evas_Smart_Cb contract_callback)
- {
- if (!expand_callback) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] expand_callback == NULL", __FILE__, __LINE__);
- return;
- }
- evas_object_smart_callback_add(list, "expanded", expand_callback, itc_child);
- if (contract_callback)
- evas_object_smart_callback_add(list, "contracted", contract_callback, NULL);
- else
- evas_object_smart_callback_add(list, "contracted", _tree_item_contracted, NULL);
- }
- /**
- * @brief Creates a new item class.
- * @param[in] content_get_cb Callback invoked when a new item is going to be realized by the genlist.
- * @param[in] content_del_cb Callback invoked when a item is going to be deleted. If NULL is used a default callback will be invoked.
- * @return The newly created class or NULL on error.
- */
- Elm_Genlist_Item_Class *view_list_add_itc(Elm_Gen_Item_Content_Get_Cb content_get_cb, Elm_Gen_Item_Del_Cb content_del_cb)
- {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- if (!itc) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] (*itc == NULL", __FILE__, __LINE__);
- return false;
- }
- itc->item_style = "full";
- itc->func.text_get = NULL;
- itc->func.content_get = content_get_cb;
- itc->func.state_get = NULL;
- itc->func.del = content_del_cb;
- return itc;
- }
- /**
- * @brief Creates a new item and adds it to the genlist.
- * @param[in] list The genlist.
- * @param[in] itc The item class to use.
- * @param[in] item_type Item type (NONE, TREE, GROUP).
- * @param[in] parent_item The parent item.
- * @param[in] data The data that will be passed to the content_get of the item class.
- * @param[in] add_first True - The item is going to be prepended. False - The item is going to be appended.
- * @param[in] mode The selection mode used by the newly created item.
- * @param[in] func Callback function invoked when the item is selected.
- * @param[in] func_data Data passed to the func callback function.
- * @return The newly created list item.
- */
- Elm_Object_Item *view_list_add_item(Evas_Object *list, Elm_Genlist_Item_Class *itc,
- Elm_Genlist_Item_Type item_type, Elm_Object_Item *parent_item,
- void *data, bool add_first,
- Elm_Object_Select_Mode mode,
- Evas_Smart_Cb func, const void *func_data)
- {
- Elm_Object_Item *item = NULL;
- if (add_first)
- item = elm_genlist_item_prepend(list, itc, data, parent_item, item_type, func, func_data);
- else
- item = elm_genlist_item_append(list, itc, data, parent_item, item_type, func, func_data);
- if (!item) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] item == NULL", __FILE__, __LINE__);
- return NULL;
- }
- elm_genlist_item_select_mode_set(item, mode);
- return item;
- }
- /**
- * @brief Updates the realized items.
- * @param[in] list The list to update.
- */
- void view_list_update(Evas_Object *list)
- {
- if (!list) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] list == NULL", __FILE__, __LINE__);
- return;
- }
- elm_genlist_realized_items_update(list);
- }
- /**
- * @brief Updates a selected item of the genlist.
- * @param[in] item The item to update.
- */
- void view_list_item_update(Elm_Object_Item *item)
- {
- if (!item) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] item == NULL", __FILE__, __LINE__);
- return;
- }
- elm_genlist_item_update(item);
- }
- /**
- * @brief Deletes an item from the genlist.
- * @param[in] list The genlist.
- * @param[in] item The item to remove.
- */
- void view_list_del_item(Evas_Object *list, Elm_Object_Item *item)
- {
- if (!list) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] list == NULL", __FILE__, __LINE__);
- return;
- }
- if (!item) {
- dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] item == NULL", __FILE__, __LINE__);
- return;
- }
- elm_object_item_del(item);
- }
- /**
- * @brief Default callback function invoked when a genlist's item is going to be deleted.
- * @param[in] data The data added to the item.
- * @param[in] obj The genlist object.
- */
- void view_list_del_item_cb(void *data, Evas_Object *obj)
- {
- if (data)
- free(data);
- }
- /**
- * @brief Internal default callback function invoked when a TREE item was contracted.
- * @param[in] data User data.
- * @param[in] obj The genlist.
- * @param[in] event_info The contracted item.
- */
- static void _tree_item_contracted(void *data, Evas_Object *obj, void *event_info)
- {
- Elm_Object_Item *it_parent = (Elm_Object_Item*) event_info;
- elm_genlist_item_subitems_clear(it_parent);
- }
- /**
- * @brief Internal callback function invoked when a TREE item is selected. It is used to change the 'expanded' state of the item.
- * @param[in] data User data.
- * @param[in] obj The genlist.
- * @param[in] event_info The selected item.
- */
- static void _selection_status_changed_cb(void *data, Evas_Object *obj, void *event_info)
- {
- Elm_Object_Item *item = (Elm_Object_Item *)event_info;
- if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE) {
- elm_genlist_item_selected_set(item, EINA_FALSE);
- elm_genlist_item_expanded_set(item, !elm_genlist_item_expanded_get(item));
- }
- }