summaryrefslogtreecommitdiff
path: root/lib/list/ct-list-edit-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/list/ct-list-edit-view.c')
-rwxr-xr-xlib/list/ct-list-edit-view.c656
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);
+ }
+
+}
+