diff options
Diffstat (limited to 'lib/list/ct-list-edit-view.c')
-rwxr-xr-x | lib/list/ct-list-edit-view.c | 656 |
1 files changed, 656 insertions, 0 deletions
diff --git a/lib/list/ct-list-edit-view.c b/lib/list/ct-list-edit-view.c new file mode 100755 index 0000000..12de228 --- /dev/null +++ b/lib/list/ct-list-edit-view.c @@ -0,0 +1,656 @@ +/* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.0 (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 <ui-gadget-module.h> +#include <app.h> +#include <fcntl.h> + +#include "phone.h" +#include "ct-list.h" +#include "ct-list-utils.h" +#include "ct-list-view-ug.h" +#include "ct-list-contact-view.h" + +#define TIMER_DURATION 0.2 + + +static Eina_List* list_edit_update_person_check_list(Eina_List *check_list, int person_id, Eina_Bool checked) +{ + if (EINA_TRUE == checked) { + if (!eina_list_data_find(check_list, (void *)person_id)) + check_list = eina_list_append(check_list, (void *)person_id); + } + else { + if (eina_list_data_find(check_list, (void *)person_id)) + check_list = eina_list_remove(check_list, (void *)person_id); + } + return check_list; +} + +static inline void list_edit_items_checked_set(ct_list_data *clist_d, Eina_Bool checked) +{ + Eina_List *l; + ct_person_list *person_info = NULL; + + EINA_LIST_FOREACH(clist_d->list, l, person_info) { + if (NULL == person_info) { + ERR("elm_object_item_data_get() return NULL"); + continue; + } + person_info->checked = checked; + clist_d->list_check = list_edit_update_person_check_list(clist_d->list_check, person_info->id, checked); + } +} + +static inline void list_edit_all_items_checked_set(Eina_List *list, + Eina_Bool checked) +{ + Eina_List *l; + ct_person_list *person_info; + + EINA_LIST_FOREACH(list, l, person_info) { + if (NULL == person_info) { + ERR("elm_object_item_data_get() return NULL"); + continue; + } + person_info->checked = checked; + } +} + +void ct_list_edit_mode_end(ct_list_data *clist_d) +{ + Evas_Object *en; + char buf[PH_TEXT_MAX_LEN+1]; + + clist_d->list_mode = CT_LIST_MODE_DEFAULT; + ct_list_clear_pdata(clist_d); + + if (clist_d->select_all_layout) { + elm_box_unpack(clist_d->box, clist_d->select_all_layout); + evas_object_del(clist_d->select_all_layout); + clist_d->select_all_layout = NULL; + } + clist_d->cnt_checked = 0; + list_edit_all_items_checked_set(clist_d->list, EINA_FALSE); + if (clist_d->list_check) { + eina_list_free(clist_d->list_check); + clist_d->list_check = NULL; + } + + if (NULL == clist_d->count_item && clist_d->cnt_list_total && !(clist_d->search_str && *clist_d->search_str)) { + clist_d->count_item = elm_genlist_item_append(clist_d->genlist, &clist_d->itcs[CT_LIST_ITEM_COUNT], (void *)clist_d->cnt_list_total, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_object_item_disabled_set(clist_d->count_item, EINA_TRUE); + } + + if(clist_d->genlist) + elm_object_focus_set(clist_d->genlist, EINA_TRUE); + + if (clist_d->search_str && *clist_d->search_str) + ctui_list_searchbar_cancel_cb(clist_d->searchbar, NULL, NULL); + + elm_genlist_decorate_mode_set(clist_d->genlist, EINA_FALSE); + ctui_list_navi_set(CT_LIST_MODE_DEFAULT, clist_d); + + if(CT_LIST_IN_MULTI_TAB != clist_d->tab_mode && CT_UG_REQUEST_SELECT_PERSON <= clist_d->ug_request) { + snprintf(buf, sizeof(buf), "%s (%d)", clist_d->title, clist_d->cnt_list_total); + elm_object_item_text_set(clist_d->navi_item, buf); + } + + en = elm_object_part_content_get(clist_d->searchbar, "elm.swallow.content"); + elm_entry_entry_set(en, NULL); + + phone_hide_notify(clist_d->base_layout); +} + +static void list_edit_cancel_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_list_data *clist_d = data; + ct_list_edit_mode_end(clist_d); +} + + +static void list_edit_delete_persons(ct_list_data *clist_d); + +static void list_edit_remove_record_cb(int err, void *data) +{ + ct_list_data *clist_d = data; + ph_progress_info *p_info = NULL; + + p_retm_if(NULL == clist_d, "Invalid parameter(clist_d is NULL)"); + p_info = clist_d->p_info; + p_retm_if(NULL == p_info, "Invalid parameter(p_info is NULL)"); + + if (p_info->update_ids) { + free(p_info->update_ids); + p_info->update_ids = NULL; + } + + if (p_info->update_list) { + contacts_list_destroy(p_info->update_list, true); + p_info->update_list = NULL; + } + + if (CONTACTS_ERROR_NONE != err || p_info->alive == false) { + if (p_info->popup) { + evas_object_del(p_info->popup); + p_info->popup = NULL; + } + phone_show_tickernoti(S_(PH_SYS_POP_FAILED)); + free(p_info); + clist_d->p_info = NULL; + clist_d->updating = false; + ct_list_edit_mode_end(clist_d); + return; + } + else if (p_info->cnt == p_info->cnt_checked_total) { + if (p_info->popup) { + evas_object_del(p_info->popup); + p_info->popup = NULL; + } + if (clist_d->base_grp) + phone_show_tickernoti(S_(PH_SYS_POP_REMOVED)); + else + phone_show_tickernoti(S_(PH_SYS_POP_DELETED)); + free(p_info); + clist_d->p_info = NULL; + clist_d->updating = false; + ct_list_edit_mode_end(clist_d); + return; + } + else { + list_edit_delete_persons(clist_d); + } +} + +static void list_edit_remove_group_relation(int group_id, int person_id, contacts_list_h list_result) +{ + contacts_list_h list = NULL; + contacts_filter_h filter = NULL; + contacts_query_h query = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + + p_retm_if(group_id <= 0, "Invalid parameter(group_id is %d)", group_id); + p_retm_if(person_id <= 0, "Invalid parameter(person_id is %d)", person_id); + p_retm_if(NULL == list_result, "Invalid parameter(list is NULL)"); + + do { + if (CONTACTS_ERROR_NONE != (err = contacts_query_create(_contacts_contact_grouprel._uri, &query))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_filter_create(_contacts_contact_grouprel._uri, &filter))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_contact_grouprel.group_id, CONTACTS_MATCH_EQUAL, group_id))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_contact_grouprel.person_id, CONTACTS_MATCH_EQUAL, person_id))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break; + if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &list))) break; + + while (CONTACTS_ERROR_NONE == err) { + contacts_record_h record = NULL; + int temp = 0; + int contact_id = 0; + contacts_record_h record_group_relation = NULL; + phone_cts_get_int_from_list(list, _contacts_contact_grouprel.contact_id, &contact_id); + err = contacts_db_get_record(_contacts_contact._uri, contact_id, &record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err); + + while (CONTACTS_ERROR_NONE == (contacts_record_get_child_record_at_p(record, _contacts_contact.group_relation, temp++, &record_group_relation))) { + int group_relation_group_id = 0; + contacts_record_get_int(record_group_relation, _contacts_group_relation.group_id, &group_relation_group_id); + if (group_id == group_relation_group_id) { + err = contacts_record_remove_child_record(record, _contacts_contact.group_relation, record_group_relation); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + contacts_list_add(list_result, record); + break; + } + } + err = contacts_list_next(list); + } + contacts_filter_destroy(filter); + contacts_query_destroy(query); + contacts_list_destroy(list, true); + return; + }while (0); + ERR("update_group_relation Failed(%d)", err); + contacts_filter_destroy(filter); + contacts_query_destroy(query); + contacts_list_destroy(list, true); + return; +} + +static void list_edit_delete_persons(ct_list_data *clist_d) +{ + const int LIST_BULK_LENGTH = 50; + int count = 0; + int *ids = NULL; + double value = 0.0; + char percent_total[PH_TEXT_MAX_LEN+1] = {0, }; + char percent[PH_TEXT_MAX_LEN+1] = {0, }; + ph_progress_info *p_info = NULL; + ct_person_list *person_info = NULL; + Eina_List *l = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_list_h list = NULL; + + p_retm_if(NULL == clist_d, "parameter(clist_d) is NULL"); + p_info = clist_d->p_info; + p_retm_if(NULL == p_info, "parameter(p_info) is NULL"); + + if (p_info->update_ids) { + free(p_info->update_ids); + p_info->update_ids = NULL; + } + + if (clist_d->base_grp) { + err = contacts_list_create(&list); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_create() Failed(%d)", err); + } + else { + if (p_info->cnt_checked_total - p_info->cnt < LIST_BULK_LENGTH) + ids = calloc(1, sizeof(int) * (p_info->cnt_checked_total - p_info->cnt)); + else + ids = calloc(1, sizeof(int) * LIST_BULK_LENGTH); + p_retm_if(NULL == ids, "calloc() return NULL"); + } + + if(p_info->cnt == 0 && p_info->cnt_checked_total > 0) { + EINA_LIST_FOREACH(clist_d->list, l, person_info) { + if (NULL == person_info) continue; + if (person_info->checked){ + clist_d->list_delete_records = eina_list_append(clist_d->list_delete_records, (void*)person_info->id); + } + } + } + + void *person_id; + l = NULL; + EINA_LIST_FOREACH(clist_d->list_delete_records, l, person_id) { + if (clist_d->base_grp > 0) + list_edit_remove_group_relation(clist_d->base_grp, (int)person_id, list); + else{ + if(ids) + ids[count] = (int)person_id; + } + + clist_d->list_delete_records = eina_list_remove_list(clist_d->list_delete_records, l); + count++; + p_info->cnt++; + + if(LIST_BULK_LENGTH == count || p_info->cnt == p_info->cnt_checked_total) + break; + } + + if (clist_d->base_grp) { + p_info->update_list = list; + err = contacts_db_update_records_async(list, list_edit_remove_record_cb, clist_d); + p_retm_if(err != CONTACTS_ERROR_NONE, "contacts_db_update_records_async() fail(%d)",err); + } + else { + p_info->update_ids = ids; + err = contacts_db_delete_records_async(_contacts_person._uri, ids, count, list_edit_remove_record_cb, clist_d); + p_retm_if(err != CONTACTS_ERROR_NONE, "contacts_db_delete_records_async() fail(%d)",err); + } + + value = (double)p_info->cnt / (double)p_info->cnt_checked_total; + elm_progressbar_value_set(p_info->progressbar, value); + snprintf(percent, sizeof(percent), "%d%%", (int)(100.0 * (double)p_info->cnt/(double)p_info->cnt_checked_total)); + snprintf(percent_total, sizeof(percent_total), "%d/%d", p_info->cnt, p_info->cnt_checked_total); + edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext1", percent); + edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext2", percent_total); + + PH_DBG("list_edit_delete_persons %d", count); +} + +static Eina_Bool __list_edit_delete_start_timer_cb(void *data) +{ + ct_list_data *clist_d = data; + list_edit_delete_persons(clist_d); + + return ECORE_CALLBACK_CANCEL; +} + +static void list_edit_del_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_list_data *clist_d = data; + ph_progress_info *p_info; + + p_info = calloc(1, sizeof(ph_progress_info)); + p_retm_if(NULL == p_info, "calloc return NULL"); + + clist_d->updating = true; + + clist_d->p_info = p_info; + p_info->cnt_checked_total = clist_d->cnt_checked; + p_info->alive = true; + p_info->result = TRUE; + p_info->popup = phone_progressbar_popup(clist_d->win, p_info, T_(CT_GET_TEXT_BASIC, CTTEXT_DELETING_CONTACTS)); + p_info->timer = ecore_timer_add(0.5, __list_edit_delete_start_timer_cb, clist_d ); +} + +static void list_edit_check_done(void *data, Evas_Object *obj, void *event_info) +{ + int cnt_checked; + int person_count = 0; + int number_count = 0; + int email_count = 0; + int *result_list_number = NULL; + int *result_list_email = NULL; + int *result_list_person = NULL; + Eina_List *l; + ct_person_list *person_info; + ct_list_data *clist_d = data; + + // called by setting - import contacts (list - vcard contacts) + if (CT_GET_LIST_VCARD == clist_d->list_op) { + clist_d->select_result_cb(clist_d->select_result_cb_data, NULL, 0); + phone_hide_notify(clist_d->base_layout); + return; + } + cnt_checked = ctui_list_checked_cnt_get(clist_d->list); + + PH_DBG("clist_d->ug_request %d count %d", clist_d->ug_request, cnt_checked); + if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request) + result_list_number = calloc(cnt_checked, sizeof(int)); + else if (CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request) + result_list_email = calloc(cnt_checked, sizeof(int)); + else if (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request) { + result_list_number = calloc(cnt_checked, sizeof(int)); + result_list_email = calloc(cnt_checked, sizeof(int)); + } + else + result_list_person = calloc(cnt_checked, sizeof(int)); + + EINA_LIST_FOREACH(clist_d->list, l, person_info) { + if (NULL == person_info || !person_info->checked) continue; + if (1 == person_info->id_ret_type) + result_list_number[number_count++] = person_info->id_ret; + else if (2 == person_info->id_ret_type){ + if(result_list_email) + result_list_email[email_count++] = person_info->id_ret; + } + else{ + if(result_list_person) + result_list_person[person_count++] = person_info->id; + } + } + + // setting - import,export / group-view - message,email,chaton,calendar + if (clist_d->select_result_cb) { // called by setting view - check person_info + if (CT_UG_REQUEST_CHECK_FOR_NUMBER != clist_d->ug_request) + ctui_list_edit_navi_pop(clist_d, NULL, NULL); + elm_naviframe_item_pop(clist_d->navi); + } + if (clist_d->contact_add_cb) { // called by group,favorite view - check person_info + if (0 < cnt_checked) { + clist_d->contact_add_cb(clist_d->win, clist_d->navi, cnt_checked); + phone_hide_notify(clist_d->base_layout); + } + else + elm_naviframe_item_pop_to(evas_object_data_get(clist_d->navi, "navi_it_pop")); + if(result_list_person) + free(result_list_person); + if(result_list_number) + free(result_list_number); + if(result_list_email) + free(result_list_email); + return; + } + + if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request) + phone_list_ug_return_ids(clist_d->ug, result_list_number, cnt_checked, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST); + else if (CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request) + phone_list_ug_return_ids(clist_d->ug, result_list_email, cnt_checked, CT_UG_BUNDLE_RESULT_EMAIL_ID_LIST); + else if (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request) + phone_list_ug_return_number_email_ids(clist_d->ug, result_list_number, number_count, result_list_email, email_count); + else + phone_list_ug_return_ids(clist_d->ug, result_list_person, cnt_checked, CT_UG_BUNDLE_RESULT_PERSON_ID_LIST); + + if(result_list_person) + free(result_list_person); + if(result_list_number) + free(result_list_number); + if(result_list_email) + free(result_list_email); + + ug_destroy_me(clist_d->ug); +} + +static void list_gadd_view_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_smart_callback_del(obj, "clicked", list_gadd_view_cancel_btn_cb); + phone_hide_notify(data); + elm_naviframe_item_pop_to(evas_object_data_get(data, "navi_it_pop")); +} + +void ct_list_edit_make_edit_navi(ct_list_data *clist_d) +{ + PH_FN_CALL; + Evas_Object *delete_button = NULL;// used for delete button or remove button + Evas_Object *done_button = NULL; + Evas_Object *l_btn; + + phone_navi_item_clear(clist_d->navi_item); + + if (CT_UG_REQUEST_CHECK == clist_d->ug_request || + CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request || + CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request || + CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request) { + done_button = elm_button_add(clist_d->navi); + elm_object_text_set(done_button, S_(CT_SYS_SK_DONE)); + evas_object_smart_callback_add(done_button, "clicked", list_edit_check_done, clist_d); + elm_object_item_part_content_set(clist_d->navi_item, "toolbar_button1", done_button); + evas_object_data_set(clist_d->navi, "done_button", done_button); + if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request) + evas_object_smart_callback_add(clist_d->navi, "transition,finished", ctui_list_edit_navi_pop, clist_d); + + if (clist_d->navi_item != elm_naviframe_bottom_item_get(clist_d->navi)) { // group view, setting view : CHECK MODE + if (clist_d->select_result_cb || clist_d->ug) { + elm_object_style_set(done_button, "naviframe/toolbar/default"); + l_btn = elm_button_add(clist_d->navi); + elm_object_style_set(l_btn, "naviframe/back_btn/default"); + evas_object_smart_callback_add(l_btn, "clicked", phone_view_back_btn_cb, clist_d->navi); + elm_object_item_part_content_set(clist_d->navi_item, "prev_btn", l_btn); + } + else { + l_btn = elm_button_add(clist_d->navi); + elm_object_text_set(l_btn, S_(PH_SYS_SK_CANCEL)); + evas_object_smart_callback_add(l_btn, "clicked", list_gadd_view_cancel_btn_cb, clist_d->navi); + elm_object_item_part_content_set(clist_d->navi_item, "toolbar_button2", l_btn); + elm_object_style_set(done_button, "naviframe/toolbar/left"); + elm_object_style_set(l_btn, "naviframe/toolbar/right"); + } + } + else { // check UG + l_btn = phone_create_toolbar_btn(clist_d->navi, S_(PH_SYS_SK_CANCEL), phone_ug_destroy_me_cb, clist_d->ug); + elm_object_item_part_content_set(clist_d->navi_item, "toolbar_button2", l_btn); + elm_object_style_set(done_button, "naviframe/toolbar/left"); + elm_object_style_set(l_btn, "naviframe/toolbar/right"); + } + } + else if (!clist_d->ug) { + // group detail : all or not assign, do not dispaly del button + if (clist_d->navi_item == elm_naviframe_bottom_item_get(clist_d->navi) || clist_d->base_grp) { + delete_button = elm_button_add(clist_d->navi); + if(CT_LIST_MULTI_REMOVE_MEMBER == clist_d->view_id) + elm_object_text_set(delete_button, S_(PH_SYS_BODY_REMOVE)); + else + elm_object_text_set(delete_button, S_(PH_SYS_SK_DELETE)); + evas_object_smart_callback_add(delete_button, "clicked", list_edit_del_cb, clist_d); + elm_object_item_part_content_set(clist_d->navi_item, "toolbar_button1", delete_button); + elm_object_style_set(delete_button, "naviframe/toolbar/left"); + evas_object_data_set(clist_d->navi, "delete_button", delete_button); + } + Evas_Object *cancel_btn = elm_button_add(clist_d->navi); + elm_object_text_set(cancel_btn, S_(PH_SYS_SK_CANCEL)); + evas_object_smart_callback_add(cancel_btn, "clicked", list_edit_cancel_cb, clist_d); + elm_object_item_part_content_set(clist_d->navi_item, "toolbar_button2", cancel_btn); + elm_object_style_set(cancel_btn, "naviframe/toolbar/right"); + } +} + +static void list_edit_select_all(void *data, Eina_Bool checked) +{ + ct_list_data *clist_d = data; + + list_edit_items_checked_set(clist_d, checked); + elm_genlist_realized_items_update(clist_d->genlist); + + if (checked) + clist_d->cnt_checked = clist_d->cnt_list_total; + else + clist_d->cnt_checked = 0; + + ctui_list_update_selection_info(clist_d); +} + + +void ct_list_item_checked_set(Elm_Object_Item *item, ct_list_data *clist_d) +{ + ct_person_list *person_info = elm_object_item_data_get(item); + p_retm_if(NULL == person_info, "elm_object_item_data_get() returns NULL"); + + if (person_info->checked) { + if (clist_d->cnt_max_check) { + if (clist_d->cnt_max_check <= clist_d->cnt_checked) { + phone_show_popup(clist_d->navi, T_(CT_GET_TEXT_ERR, CTTEXT_EXCEED_LIMIT), 2.0); + person_info->checked = EINA_FALSE; + return; + } + } + clist_d->cnt_checked++; + } + else + clist_d->cnt_checked--; + elm_genlist_item_update(item); + clist_d->list_check = list_edit_update_person_check_list(clist_d->list_check, person_info->id, person_info->checked); +} + +static void list_edit_item_check_cb(void *data, Evas_Object *obj, + void *event_info) +{ + Elm_Object_Item *item; + ct_person_list *person_info; + ct_list_data *clist_d = data; + + person_info = evas_object_data_get(obj, "person_info"); + p_retm_if(NULL == person_info, "evas_object_data_get() return NULL"); + + item = person_info->item; + p_retm_if(NULL == item, "person_info->item is NULL"); + + if (person_info->checked) { + person_info->checked = !person_info->checked; + ct_list_item_checked_set(item, clist_d); + ctui_list_update_selection_info(clist_d); + return; + } + + elm_genlist_item_update(item); + + if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request) + ct_list_ug_handle_check_for_number(item, clist_d); + else if (CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request) + ct_list_ug_handle_check_for_email(item, clist_d); + else if (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request) + ct_list_ug_handle_check_for_number_or_email(item, clist_d); + else { + person_info->checked = !person_info->checked; + ct_list_item_checked_set(item, clist_d); + ctui_list_update_selection_info(clist_d); + } + +} + +Evas_Object* ct_list_edit_add_check(Evas_Object *parent, Eina_Bool *checked, + ct_list_data *clist_d) +{ + Evas_Object *check = elm_check_add(parent); + elm_check_state_set(check, *checked); + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", list_edit_item_check_cb, clist_d); + return check; +} + +API void ctui_list_edit_mode_start(ct_list_data *clist_d) +{ + PH_FN_CALL; + + //Sweep Off in Edit mode + ctui_list_set_unsweep(clist_d); + + clist_d->list_mode = CT_LIST_MODE_EDIT; + + + // Append 'Select All' layout + if ((CT_UG_REQUEST_CHECK_FOR_NUMBER != clist_d->ug_request) && + (CT_UG_REQUEST_CHECK_FOR_EMAIL != clist_d->ug_request) && + (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL != clist_d->ug_request) && + (CT_LIST_MULTI_ADD_MEMBER != clist_d->view_id)) + if (((!clist_d->ug_request || clist_d->select_result_cb) || (clist_d->base_grp > 0 && clist_d->contact_add_cb)) && + (0 == clist_d->cnt_max_check || clist_d->cnt_list_total <= clist_d->cnt_max_check)) { + clist_d->select_all_layout = phone_create_select_all(clist_d->box, S_(PH_SYS_BODY_SELECT_ALL), list_edit_select_all, clist_d); + elm_box_pack_start(clist_d->box, clist_d->select_all_layout); + } + + if (clist_d->count_item) { + elm_object_item_del(clist_d->count_item); + clist_d->count_item = NULL; + } + elm_genlist_decorate_mode_set(clist_d->genlist, EINA_TRUE); + + if (CT_LIST_IN_MULTI_TAB != clist_d->tab_mode && !clist_d->title + && CT_UG_REQUEST_SELECT_PERSON <= clist_d->ug_request) { + elm_object_item_text_set(clist_d->navi_item, T_(CT_GET_TEXT_BASIC, CTTEXT_SELECT_CONTACTS)); + } + if (0 < clist_d->cnt_list_total) + phone_show_notify(clist_d->base_layout, T_(CT_GET_TEXT_BASIC, CTTEXT_SELECT_CONTACTS)); + + ctui_list_navi_set(CT_LIST_MODE_EDIT, clist_d); + + if(clist_d->genlist) + elm_object_focus_set(clist_d->genlist, EINA_TRUE); +} + +void ct_list_edit_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_list_data *clist_d = data; + p_retm_if(NULL == clist_d->navi_item, "parameter(navi_item) is NULL"); + + if (clist_d->popup){ + evas_object_del(clist_d->popup); + clist_d->popup = NULL; + } + + ctui_list_edit_mode_start(clist_d); +} + +API void ctui_list_set_selectall(ct_list_data *clist_d) +{ + PH_DBG("ctui_list_set_selectall view_id %d", clist_d->view_id); + if(NULL!=clist_d->select_all_layout + || CT_LIST_MODE_DEFAULT== clist_d->list_mode + || CT_LIST_MULTI_ADD_MEMBER == clist_d->view_id ) + return; + // Append 'Select All' layout + if((CT_UG_REQUEST_CHECK_FOR_NUMBER != clist_d->ug_request) && + (CT_UG_REQUEST_CHECK_FOR_EMAIL != clist_d->ug_request) && + (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL != clist_d->ug_request)) + if (((!clist_d->ug_request || clist_d->select_result_cb) || (clist_d->base_grp > 0 && clist_d->contact_add_cb)) && + (0 == clist_d->cnt_max_check || clist_d->cnt_list_total <= clist_d->cnt_max_check)) { + clist_d->select_all_layout = phone_create_select_all(clist_d->box, S_(PH_SYS_BODY_SELECT_ALL), list_edit_select_all, clist_d); + elm_box_pack_start(clist_d->box, clist_d->select_all_layout); + } + +} + |