diff options
Diffstat (limited to 'lib/details/ct-input-view.c')
-rwxr-xr-x | lib/details/ct-input-view.c | 3245 |
1 files changed, 3245 insertions, 0 deletions
diff --git a/lib/details/ct-input-view.c b/lib/details/ct-input-view.c new file mode 100755 index 0000000..2e88641 --- /dev/null +++ b/lib/details/ct-input-view.c @@ -0,0 +1,3245 @@ +/* +* 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 <errno.h> +#include <Ecore_X.h> +#include "phone.h" +#include "ct-detail.h" +#include "ct-detail-utils.h" +#include "ct-detail-view.h" +#include "ct-list.h" +#include "ct-input-utils.h" +#include "ct-input-view.h" + +#include "ct-input-num-email.h" +#include "ct-input-change-name.h" +#include "ct-group.h" +#include "ct-group-assign-view.h" + +static void input_fill_layout(ct_input_data *cinput_d); +static void input_update_address(ct_input_data *cinput_d); +static Evas_Object* input_new_layout_address(ct_input_data *cinput_d); +static Evas_Object* input_new_layout_website(ct_input_data *cinput_d); +static Evas_Object* input_new_layout_messenger(ct_input_data *cinput_d); +static Evas_Object* input_new_layout_relationship(ct_input_data *cinput_d); +static Evas_Object* input_new_layout_event(ct_input_data *cinput_d); +static void __input_basic_info_expand_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +enum input_items { + INPUT_IMAGE = 0, + INPUT_BASIC_INFO, + INPUT_NUMBER, + INPUT_EMAIL, + INPUT_ADDRESS, + + INPUT_MESSENGER, + INPUT_URL, + INPUT_RELATIONSHIP, + INPUT_EVENT, + INPUT_NOTE, + + INPUT_GROUP, + INPUT_RINGTONE, + INPUT_VIBRATION, + INPUT_ADDRBOOK, + + INPUT_MORE_INFO, + INPUT_ITEMS_MAX, +}; + +enum input_more_fiels { + INPUT_MORE_JOB_TITLE, + INPUT_MORE_DEPARTMENT, + INPUT_MORE_MESSENGER, + INPUT_MORE_URL, + INPUT_MORE_RELATIONSHIP, + INPUT_MORE_EVENT, + INPUT_MORE_NOTE, +}; + +#define CT_INPUT_ADDRESS_MAX_CHAR 1000 +#define CT_INPUT_MOREINFO_PORTRAIT_Y 1066 +#define CT_INPUT_MOREINFO_LANDSCAPE_Y 506 + +static Elm_Genlist_Item_Class input_ringtone_itc, input_vibration_itc; + +static void input_layout_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout = (Evas_Object *) data; + elm_object_signal_emit(layout, "elm,state,unselected", "elm"); +} + +static void input_layout_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev = (Evas_Event_Mouse_Move *)event_info; + Evas_Object *layout = (Evas_Object *) data; + if (ev && ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + elm_object_signal_emit(layout, "elm,state,unselected", "elm"); +} + +static void input_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout = (Evas_Object *) data; + elm_object_signal_emit(layout, "elm,state,selected", "elm"); +} + +static void input_layout_selectable_set(Evas_Object *layout) +{ + p_retm_if(NULL == layout, "parameter(layout) is NULL"); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, input_layout_mouse_up_cb, layout); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, input_layout_mouse_down_cb, layout); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_MOVE, input_layout_mouse_move_cb, layout); +} + +static void input_contacts_changed(const char *view_uri, void *user_data) +{ + int contact_id; + int current_version; + int id_ab, type; + bool changed = false; + + contacts_list_h list = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + + ct_input_data *cinput_d = user_data; + ct_detail_data *cdetail_d = cinput_d->cdetail_d; + + p_retm_if(NULL == cdetail_d, "ct_detail_data is NULL"); + p_retm_if(NULL == cinput_d->contact, "Contact is NULL"); + + if (cinput_d->saved) + return; + + err = contacts_record_get_int(cinput_d->contact, _contacts_contact.address_book_id, &id_ab); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + err = contacts_db_get_changes_by_version(_contacts_contact_updated_info._uri, cinput_d->base_ab, cinput_d->view_create_ver, &list, ¤t_version); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_changes_by_version() Failed(%d)", err); + + while (CONTACTS_ERROR_NONE == err) { + err = phone_cts_get_int_from_list(list, _contacts_contact_updated_info.contact_id, &contact_id); + if (CONTACTS_ERROR_NONE != err) { + ERR("phone_cts_get_int_from_list() Failed(%d)", err); + err = contacts_list_next(list); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_next() Failed(%d)", err); + continue; + } + + if (contact_id == cinput_d->contact_id) { + changed = true; + err = phone_cts_get_int_from_list(list, _contacts_contact_updated_info.type, &type); + break; + } + err = contacts_list_next(list); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_next() Failed(%d)", err); + } + err = contacts_list_destroy(list, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destrot() Failed(%d)", err); + + p_ret_if(!changed); + + if (CONTACTS_CHANGE_UPDATED == type || (CONTACTS_CHANGE_DELETED == type && !cdetail_d->has_detail)) + elm_naviframe_item_pop(cdetail_d->navi); +} + +static void input_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d = data; + ct_detail_data *cdetail_d = cinput_d->cdetail_d; + + p_retm_if(NULL == cinput_d, "cinput_d is NULL"); + p_retm_if(NULL == cdetail_d, "cdetail_d is NULL"); + + if (cinput_d->contact_id) { + err = contacts_db_remove_changed_cb(_contacts_contact._uri, input_contacts_changed, cinput_d); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_remove_changed_cb() Failed(%d)", err); + } + if (cinput_d->win_prop_change) + ecore_event_handler_del(cinput_d->win_prop_change); + err = contacts_record_destroy(cinput_d->contact, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + + evas_object_data_del(cdetail_d->navi, KEY_INPUT_DATA); + + if (cdetail_d->has_detail) { + cdetail_d->has_input = false; + } + else { + if (cdetail_d->child_ug) + ug_destroy(cdetail_d->child_ug); + + if (cdetail_d->popup) + evas_object_del(cdetail_d->popup); + + free(cdetail_d->base_ab_name); + free(cdetail_d); + } + + if (cinput_d->crop_ug) + ug_destroy(cinput_d->crop_ug); + + if (cinput_d->src_ug) + ug_destroy(cinput_d->src_ug); + + free(cinput_d->name_old); + free(cinput_d->base_ab_name); + free(cinput_d); +} + +static void input_nick_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *input; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + ct_input_data *cinput_d = data; + + record = ct_input_get_record_nickname(cinput_d->contact); + p_retm_if(NULL == record, "ct_input_get_record_nickname() return NULL"); + + input = ctui_entry_markup_to_utf8(elm_entry_entry_get(obj)); + + err = contacts_record_set_str(record, _contacts_nickname.name, input); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + free(input); +} + +static void input_website_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *input; + ct_input_data *cinput_d; + Evas_Object *entry = obj; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = data; + + p_retm_if(NULL == record, "parameter(record) is NULL"); + + cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + input = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == input, "ctui_entry_markup_to_utf8() return NULL"); + + err = contacts_record_set_str(record, _contacts_url.url, input); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + free(input); +} + +static void input_note_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *input; + ct_input_data *cinput_d; + Evas_Object *entry = obj; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = data; + + p_retm_if(NULL == record, "parameter(record) is NULL"); + + cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + input = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == input, "ctui_entry_markup_to_utf8() return NULL"); + + err = contacts_record_set_str(record, _contacts_note.note, input); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + free(input); +} + +static inline char* input_get_contact_image_path(contacts_record_h record) +{ + contacts_record_h record_image; + char *img_path = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + + record_image = ctui_get_record_image(record); + err = contacts_record_get_str_p(record_image, _contacts_image.path, &img_path); + p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "contacts_record_get_str_p() failed(%d)", err); + + return img_path; +} + +static void input_set_name_value(Evas_Object *entry, int field, ct_input_data *cinput_d) +{ + char *name; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + record = ct_input_get_record_name(cinput_d->contact); + p_retm_if(NULL == record, "ct_input_get_record_name() return NULL"); + + name = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == name, "ctui_entry_markup_to_utf8() return NULL"); + + err = contacts_record_set_str(record, field, name); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + free(name); +} + +static void __input_firstname_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_name_value(obj, _contacts_name.first, data); +} + +static void input_lastname_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_name_value(obj, _contacts_name.last, data); +} + +static void input_middle_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_name_value(obj, _contacts_name.addition, data); +} + +static void input_suffix_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_name_value(obj, _contacts_name.suffix, data); +} + +static void input_set_company_value(Evas_Object *entry, int field, ct_input_data *cinput_d) +{ + char *str; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + record = ct_input_get_record_company(cinput_d->contact); + p_retm_if(NULL == record, "ct_input_get_record_company() return NULL"); + + str = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == str, "ctui_entry_markup_to_utf8() return NULL"); + + err = contacts_record_set_str(record, field, str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() failed(%d)", err); + + free(str); +} + +static void input_job_title_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_company_value(obj, _contacts_company.job_title, data); +} + +static void input_department_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_company_value(obj, _contacts_company.department, data); +} + +static void input_company_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + input_set_company_value(obj, _contacts_company.name, data); +} + +static inline Evas_Object* __input_editfield_entry_set(Evas_Object *ef, const char *text) +{ + Evas_Object *en = elm_object_part_content_get(ef, "elm.swallow.content"); + p_retvm_if(NULL == en, NULL, "elm_object_part_content_get() return NULL"); + + if (text && *text) + elm_entry_entry_set(en, text); + return en; +} + +static Evas_Object* __input_fill_layout_basic_info_expand(ct_input_data *cinput_d, const char* guide_text, + Evas_Smart_Cb unfocused_cb, const char* view_uri, int property_id) +{ + char *display = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + Evas_Object *ly_content = NULL; + Evas_Object *editfield = NULL; + Evas_Object *box = cinput_d->box; + + ly_content = ct_input_create_dg_layout(box, "1icon"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + elm_object_signal_emit(ly_content, "elm,state,edit,enabled", ""); + + editfield = ct_input_add_editfield(ly_content, guide_text, unfocused_cb, cinput_d); + ct_input_add_name_field(editfield, cinput_d); + p_retvm_if(NULL == editfield, NULL, "ct_input_add_editfield() return NULL"); + elm_object_part_content_set(ly_content, "elm.icon", editfield); + + if (0 == strcmp(_contacts_nickname._uri,view_uri)) + record = ct_input_get_record_nickname(cinput_d->contact); + else if (0 == strcmp(_contacts_name._uri,view_uri)) + record = ct_input_get_record_name(cinput_d->contact); + else if (0 == strcmp(_contacts_company._uri,view_uri)) + record = ct_input_get_record_company(cinput_d->contact); + + p_retvm_if(NULL == record, NULL, "record is NULL"); + + err = contacts_record_get_str_p(record, property_id, &display); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + __input_editfield_entry_set(editfield, display); + + return ly_content; +} + +static void input_event_del(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + int idx; + contacts_error_e err = CONTACTS_ERROR_NONE; + Eina_List *list = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + p_retm_if(NULL == typed_data, "parameter(typed_data) is NULL"); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.event, typed_data->record); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() failed(%d)", err); + + if (typed_data->ly_content == cinput_d->ly_event_first) { + idx = ct_input_box_idx_get(cinput_d->box, typed_data->ly_content); + list = elm_box_children_get(cinput_d->box); + cinput_d->ly_event_first = eina_list_nth(list, idx + 1); + eina_list_free(list); + } + + err = contacts_record_destroy(typed_data->record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + elm_box_unpack(cinput_d->box, typed_data->ly_content); + evas_object_del(typed_data->ly_content); +} + + +static void input_event_del_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + ct_input_typed_data *typed_data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + input_event_del(cinput_d, typed_data); +} + + +static void input_event_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + int year; + int month; + int day; + struct tm currtime; + ct_input_data *cinput_d = data; + Evas_Object *btn_minus; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_typed_data *typed_data; + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + elm_datetime_value_get(obj, &currtime); + year = currtime.tm_year + 1900; + month = currtime.tm_mon + 1; + day = currtime.tm_mday; + + err = contacts_record_set_int(typed_data->record, _contacts_event.date, year * 10000 + month * 100 + day); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err); + + if (typed_data->ly_content == cinput_d->ly_event_last) { + btn_minus = elm_button_add(typed_data->ly_content); + p_retm_if(NULL == btn_minus, "elm_button_add() return NULL"); + + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(typed_data->ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_event_del_clicked_cb, cinput_d); + + p_retm_if(NULL == input_new_layout_event(cinput_d), "input_new_layout_event() return NULL"); + } +} + +static void input_ringtone_cancel_cb(void *data, Evas_Object *obj, void *event_info) +{ + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d = data; + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + if (cinput_d->popup) { + evas_object_del(cinput_d->popup); + cinput_d->popup = NULL; + } + + err = contacts_record_set_str(cinput_d->contact, _contacts_contact.ringtone_path, NULL); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + ct_input_update_ringtone(cinput_d->contact, cinput_d->ly_ringtone); +} + +static void input_addr_editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + int ret; + char *display; + Evas_Object *entry = obj; + contacts_record_h record = data; + + p_retm_if(NULL == record, "parameter(record) is NULL"); + + display = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == display, "ctui_entry_markup_to_utf8() return NULL"); + + ret = contacts_record_set_str(record, _contacts_address.street, display); + p_warn_if(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Failed(%d)", ret); + + free(display); +} + +static void input_addr_type_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + int type = (int)data; + Evas_Object *btn_type; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d; + ct_input_typed_data *typed_data; + + cinput_d = evas_object_data_get(obj, "cinput_d"); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + if (CONTACTS_ADDRESS_TYPE_CUSTOM == type){ + ct_input_change_name_view(cinput_d->cdetail_d->navi, ct_input_custom_type_rename_cb, typed_data); + evas_object_del(obj); + return; + } + + err = contacts_record_set_int(typed_data->record, _contacts_address.type, type); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err); + + btn_type = elm_object_part_content_get(typed_data->ly_content, "elm.icon.type"); + p_retm_if(NULL == btn_type, "elm_object_part_content_get() return NULL"); + + elm_object_text_set(btn_type, T_(CT_GET_TEXT_POSTAL_TYPE, ct_detail_get_address_type_index(type))); + evas_object_del(obj); +} + +static void input_address_type_mouse_up_cb(void *data, Evas_Object *obj, void *event_info) +{ + int type; + int used; + int rotate; + Evas_Object *popup; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d; + ct_input_typed_data *typed_data = data; + + p_retm_if(NULL == typed_data, "parameter(typed_data) is NULL"); + + cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + popup = elm_ctxpopup_add(cinput_d->cdetail_d->win); + p_retm_if(NULL == popup, "elm_ctxpopup_add() return NULL"); + cinput_d->cdetail_d->popup = popup; + + rotate = (int)evas_object_data_get(cinput_d->cdetail_d->navi, "phone_rotate"); + if (0 == rotate || 180 == rotate) + elm_ctxpopup_direction_priority_set(popup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT); + + evas_object_smart_callback_add(popup, "dismissed", ct_detail_popup_hide_cb, cinput_d->cdetail_d); + + err = contacts_record_get_int(typed_data->record, _contacts_address.type, &type); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + evas_object_data_set(popup, "typed_data", typed_data); + evas_object_data_set(popup, "cinput_d", cinput_d); + + int temp_type = CONTACTS_ADDRESS_TYPE_HOME; + while(temp_type<=CONTACTS_ADDRESS_TYPE_WORK) { + if (type == temp_type) { + temp_type = temp_type<<1; + continue; + } + elm_ctxpopup_item_append(popup, T_(CT_GET_TEXT_POSTAL_TYPE, ct_detail_get_address_type_index(temp_type)), NULL, + input_addr_type_changed_cb, (void *)temp_type); + temp_type = temp_type<<1; + } + if (CONTACTS_ADDRESS_TYPE_OTHER != type) { + elm_ctxpopup_item_append(popup, T_(CT_GET_TEXT_POSTAL_TYPE, ct_detail_get_address_type_index(CONTACTS_ADDRESS_TYPE_OTHER)), NULL, + input_addr_type_changed_cb, (void *)CONTACTS_ADDRESS_TYPE_OTHER); + } + if (CONTACTS_ADDRESS_TYPE_CUSTOM != type) { + elm_ctxpopup_item_append(popup, T_(CT_GET_TEXT_POSTAL_TYPE, ct_detail_get_address_type_index(CONTACTS_ADDRESS_TYPE_CUSTOM)), NULL, + input_addr_type_changed_cb, (void *)CONTACTS_ADDRESS_TYPE_CUSTOM); + } + + phone_move_ctxpopup(popup, obj); + evas_object_show(popup); +} + + +static void input_addr_del_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + int idx; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *layout; + ct_input_data *cinput_d = data; + ct_input_typed_data *typed_data; + + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.address, typed_data->record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + + if (typed_data->ly_content == cinput_d->ly_addr_first) { + Eina_List *list; + idx = ct_input_box_idx_get(cinput_d->box, cinput_d->ly_addr_first); + list = elm_box_children_get(cinput_d->box); + layout = eina_list_nth(list, idx + 1); + eina_list_free(list); + cinput_d->ly_addr_first = layout; + } + + err = contacts_record_destroy(typed_data->record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + elm_box_unpack(cinput_d->box, typed_data->ly_content); + evas_object_del(typed_data->ly_content); + +} + +static void input_addr_add_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *layout; + ct_input_data *cinput_d = data; + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + layout = input_new_layout_address(data); + p_retm_if(NULL == layout, "input_new_layout_address() return"); + + input_update_address(data); +} + +static void input_update_address(ct_input_data *cinput_d) +{ + int idx; + Eina_List *list, *cursor; + Evas_Object *btn; + Evas_Object *ly_content; + ct_input_typed_data *typed_data; + + idx = ct_input_box_idx_get(cinput_d->box, cinput_d->ly_addr_first); + list = elm_box_children_get(cinput_d->box); + EINA_LIST_FOREACH(eina_list_nth_list(list, idx), cursor, ly_content) { + if (NULL == ly_content) continue; + btn = elm_object_part_content_get(ly_content, "elm.icon.edit"); + if (NULL == btn) { + ERR("elm_object_part_content_get() return NULL"); + break; + } + + evas_object_smart_callback_del(btn, "clicked", input_addr_add_clicked_cb); + + if (ly_content == cinput_d->ly_addr_last) { + elm_object_style_set(btn, "icon_plus"); + evas_object_smart_callback_add(btn, "clicked", input_addr_add_clicked_cb, cinput_d); + break; + } + else { + typed_data = evas_object_data_get(ly_content, "typed_data"); + if (NULL == typed_data) { + ERR("evas_object_data_get() return NULL"); + break; + } + elm_object_style_set(btn, "icon_minus"); + if (EINA_TRUE == elm_object_disabled_get(btn)) + elm_object_disabled_set(btn, EINA_FALSE); + evas_object_smart_callback_add(btn, "clicked", input_addr_del_clicked_cb, cinput_d); + } + } + eina_list_free(list); +} + +static void __input_image_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + contacts_record_h record; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d = data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + record = ctui_get_record_image(cinput_d->contact); + p_retm_if(NULL == record, "ctui_get_record_image() return NULL"); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.image, record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + + err = contacts_record_destroy(record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + ct_input_update_image(cinput_d); + + evas_object_del(cinput_d->cdetail_d->popup); + cinput_d->cdetail_d->popup = NULL; +} + + + +static void __input_gallery_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + const char *img_path = NULL; + service_h service; + ct_input_data *cinput_d = data; + + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + int x, y, w, h; + + if(ev == NULL) + return; + + img_path = input_get_contact_image_path(cinput_d->contact); + if (NULL != img_path) { + elm_icon_file_set(obj, img_path, NULL); + } + else + elm_icon_file_set(obj, CTUI_IMG_INPUT_GALLERY, NULL); + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + + ct_input_gallery(cinput_d); +} + +static void __input_gallery_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + const char *img_path = NULL; + + img_path = input_get_contact_image_path(cinput_d->contact); + if (NULL != img_path) { + elm_icon_file_set(obj, img_path, NULL); + } + else + elm_icon_file_set(obj, CTUI_IMG_INPUT_GALLERY_PRESSED, NULL); +} + +static void __input_camera_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + int x, y, w, h; + service_h service; + if(ev == NULL) + return; + + elm_icon_file_set(obj, CTUI_IMG_INPUT_CAMERA, NULL); + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + + ct_input_camera(cinput_d); + +} +static void __input_camera_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + elm_icon_file_set(obj, CTUI_IMG_INPUT_CAMERA_PRESSED, NULL); +} + + +void ct_input_update_image(ct_input_data *cinput_d) +{ + const char *img_path = NULL; + Evas_Object *icon = NULL; + Evas_Object *btn_minus = NULL; + Evas_Object *ly_content = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + ly_content = cinput_d->ly_image; + p_retm_if(NULL == ly_content, "parameter(ly_content) is NULL"); + + icon = elm_object_part_content_unset(ly_content, "elm.icon"); + if (NULL != icon) + evas_object_del(icon); + + icon = elm_icon_add(ly_content); + p_retm_if(NULL == icon, "elm_icon_add() return NULL"); + elm_object_part_content_set(ly_content, "elm.icon", icon); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_NONE, 1, 1); + + evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_DOWN, __input_gallery_mouse_down, cinput_d); + evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_UP, __input_gallery_mouse_up, cinput_d); + + + img_path = input_get_contact_image_path(cinput_d->contact); + if (NULL != img_path) { + elm_icon_file_set(icon, img_path, NULL); + + btn_minus = elm_object_part_content_get(ly_content, "elm.icon4"); + if (NULL == btn_minus) { + btn_minus = elm_button_add(ly_content); + elm_object_part_content_set(ly_content, "elm.icon4", btn_minus); + elm_object_style_set(btn_minus, "minus"); + evas_object_size_hint_aspect_set(btn_minus, EVAS_ASPECT_CONTROL_NONE, 1, 1); + evas_object_size_hint_align_set(btn_minus, 0.5, EVAS_HINT_FILL); + evas_object_smart_callback_add(btn_minus, "clicked", __input_image_delete_button_clicked_cb, cinput_d); + } + } + else { + elm_icon_file_set(icon, CTUI_IMG_INPUT_GALLERY, NULL); + elm_icon_resizable_set(icon, EINA_FALSE, EINA_FALSE); + + btn_minus = elm_object_part_content_unset(ly_content, "elm.icon4"); + if (NULL != btn_minus) + evas_object_del(btn_minus); + } +} + +static Evas_Object* __input_fill_layout_image(ct_input_data *cinput_d) +{ + Evas_Object *ly_content = NULL; + Evas_Object *box = cinput_d->box; + Evas_Object *btn_camera = NULL; + + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + elm_layout_file_set(ly_content, IMAGE_LAYOUT_EDJ, "dialogue/image_layout"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(ly_content); + + btn_camera = elm_icon_add(ly_content); + p_retvm_if(NULL == btn_camera, NULL, "elm_button_add() return NULL"); + elm_icon_file_set(btn_camera, CTUI_IMG_INPUT_CAMERA, NULL); + evas_object_size_hint_aspect_set(btn_camera, EVAS_ASPECT_CONTROL_NONE, 1, 1); + evas_object_size_hint_align_set(btn_camera, 0.5, EVAS_HINT_FILL); + evas_object_propagate_events_set(btn_camera, EINA_FALSE); + evas_object_color_set(btn_camera, 255, 255, 255, 255); + elm_object_part_content_set(ly_content, "elm.icon3", btn_camera); + + evas_object_event_callback_add(btn_camera, EVAS_CALLBACK_MOUSE_DOWN, __input_camera_mouse_down, cinput_d); + evas_object_event_callback_add(btn_camera, EVAS_CALLBACK_MOUSE_UP, __input_camera_mouse_up, cinput_d); + + cinput_d->ly_image = ly_content; + ct_input_update_image(cinput_d); + + return ly_content; +} + +static void __input_basic_info_name_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + char *last_name = NULL; + char *first_name = NULL; + char *name = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + ct_input_data *cinput_d = data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + name = ctui_entry_markup_to_utf8(elm_entry_entry_get(obj)); + p_retm_if(NULL == name, "ctui_entry_markup_to_utf8() return NULL"); + + if (name && cinput_d->name_old && 0 == strcmp(name, cinput_d->name_old)) + return; + + record = ct_input_get_record_name(cinput_d->contact); + p_retm_if(NULL == record, "ct_input_get_record_name() return NULL"); + + first_name = strtok_r(name, " ", &last_name); + + err = contacts_record_set_str(record, _contacts_name.first, first_name); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + err = contacts_record_set_str(record, _contacts_name.last, last_name); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + + free(name); +} + + +static void __input_basic_info_name_focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + char *name = NULL; + ct_input_data *cinput_d = data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + name = ctui_entry_markup_to_utf8(elm_entry_entry_get(obj)); + p_retm_if(NULL == name, "ctui_entry_markup_to_utf8() return NULL"); + + FREEandSTRDUP(cinput_d->name_old, name); + + free(name); +} + +static void __input_basic_info_get_name_str(contacts_record_h record_name, char *buf, int buf_size) +{ + char *first_name = NULL; + char *last_name = NULL; + + p_retm_if(NULL == record_name, "parameter(record_name) is NULL"); + contacts_record_get_str_p(record_name, _contacts_name.first, &first_name); + contacts_record_get_str_p(record_name, _contacts_name.last, &last_name); + + if (first_name && last_name) + snprintf(buf, buf_size, "%s %s", first_name, last_name); + else if (first_name) + snprintf(buf, buf_size, "%s", first_name); + else if (last_name) + snprintf(buf, buf_size, "%s", last_name); +} + +static void __input_basic_info_update(ct_input_data *cinput_d) +{ + char *name = NULL; + char buf[PH_TEXT_MAX_LEN+1] = {0}; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record_name = NULL; + Evas_Object *editfield = NULL; + Evas_Object *entry = NULL; + Evas_Object *ly_content = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + ly_content = cinput_d->ly_basic_info; + record_name = ct_input_get_record_name(cinput_d->contact); + + if (!cinput_d->ly_basic_info_middle_name) { // contracted + editfield = ct_input_add_editfield(ly_content, S_(CT_SYS_BODY_NAME), __input_basic_info_name_unfocused_cb, cinput_d); + p_retm_if(NULL == editfield, "ct_input_add_editfield() return NULL"); + + entry = elm_object_part_content_get(editfield, "elm.swallow.content"); + evas_object_smart_callback_add(entry, "focused", __input_basic_info_name_focused_cb, cinput_d); + elm_entry_input_panel_imdata_set(entry, (void*)"type=name", 9); + elm_object_part_content_set(ly_content, "elm.icon", editfield); + + __input_basic_info_get_name_str(record_name, buf, sizeof(buf)); + if (*buf) + __input_editfield_entry_set(editfield, buf); + } + else { // expanded + /* first name */ + editfield = ct_input_add_editfield(ly_content, T_(CT_GET_TEXT_BASIC, CTTEXT_FIRSTNAME), __input_firstname_unfocused_cb, cinput_d); + p_retm_if(NULL == editfield, "ct_input_add_editfield() return NULL"); + + elm_object_part_content_set(ly_content, "elm.icon", editfield); + + err = contacts_record_get_str_p(record_name, _contacts_name.first, &name); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + + __input_editfield_entry_set(editfield, name); + } +} + +static void __input_basic_info_expand(ct_input_data *cinput_d) +{ + Evas_Object *layout; + + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_MIDDLE), + input_middle_unfocused_cb, _contacts_name._uri, _contacts_name.addition); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info); + cinput_d->ly_basic_info_middle_name = layout; + + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_LASTNAME), + input_lastname_unfocused_cb, _contacts_name._uri, _contacts_name.last); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_middle_name); + cinput_d->ly_basic_info_last_name = layout; + + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_SUFFIX), + input_suffix_unfocused_cb, _contacts_name._uri, _contacts_name.suffix); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_last_name); + cinput_d->ly_basic_info_suffix = layout; + + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_NICKNAME), + input_nick_unfocused_cb, _contacts_nickname._uri, _contacts_nickname.name); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_suffix); + cinput_d->ly_basic_info_nickname = layout; + + if (cinput_d->add_job_title) { + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_JOB_TITLE), + input_job_title_unfocused_cb, _contacts_company._uri, _contacts_company.job_title); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_nickname); + cinput_d->ly_basic_info_job_title = layout; + } + + if (cinput_d->add_department) { + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_DEPARTMENT), + input_department_unfocused_cb, _contacts_company._uri, _contacts_company.department); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + if (cinput_d->ly_basic_info_job_title) + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_job_title); + else + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_nickname); + cinput_d->ly_basic_info_department = layout; + } + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_COMPANY), + input_company_unfocused_cb, _contacts_company._uri, _contacts_company.name); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + + if (cinput_d->ly_basic_info_department) + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_department); + else if (cinput_d->ly_basic_info_job_title) + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_job_title); + else + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_nickname); + cinput_d->ly_basic_info_company = layout; +} + +static inline void __input_basic_info_contract(ct_input_data *cinput_d) +{ + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_middle_name); + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_last_name); + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_suffix); + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_nickname); + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_company); + + evas_object_del(cinput_d->ly_basic_info_middle_name); + evas_object_del(cinput_d->ly_basic_info_last_name); + evas_object_del(cinput_d->ly_basic_info_suffix); + evas_object_del(cinput_d->ly_basic_info_nickname); + evas_object_del(cinput_d->ly_basic_info_company); + + cinput_d->ly_basic_info_middle_name = NULL; + cinput_d->ly_basic_info_last_name = NULL; + cinput_d->ly_basic_info_suffix = NULL; + cinput_d->ly_basic_info_nickname = NULL; + cinput_d->ly_basic_info_company = NULL; + + if (cinput_d->ly_basic_info_job_title) { + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_job_title); + evas_object_del(cinput_d->ly_basic_info_job_title); + cinput_d->ly_basic_info_job_title = NULL; + } + + if (cinput_d->ly_basic_info_department) { + elm_box_unpack(cinput_d->box, cinput_d->ly_basic_info_department); + evas_object_del(cinput_d->ly_basic_info_department); + cinput_d->ly_basic_info_department = NULL; + } +} + +static void __input_basic_info_expand_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + Evas_Object *btn_expand = NULL; + Evas_Object *ly_content = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + ly_content = cinput_d->ly_basic_info; + p_retm_if(NULL == ly_content, "parameter(ly_content) is NULL"); + + btn_expand = elm_object_part_content_get(ly_content, "elm.icon.edit"); + p_retm_if(NULL == btn_expand, "elm_object_part_content_get() return NULL"); + + if (cinput_d->ly_basic_info_last_name) { + __input_basic_info_contract(cinput_d); + elm_object_style_set(btn_expand, "icon_expand_closed"); + } + else { + __input_basic_info_expand(cinput_d); + elm_object_style_set(btn_expand, "icon_expand_opened"); + } + __input_basic_info_update(cinput_d); +} + + +static Evas_Object* __input_fill_layout_basic_info(ct_input_data *cinput_d) +{ + char buf[PH_TEXT_MAX_LEN + 1] = {0, }; + Evas_Object *ly_content = NULL; + Evas_Object *entry = NULL; + Evas_Object *editfield_name = NULL; + Evas_Object *btn_expand = NULL; + Evas_Object *box = cinput_d->box; + contacts_record_h record_name = NULL; + + ly_content = ct_input_create_dg_layout(box, "1icon"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + elm_object_signal_emit(ly_content, "elm,state,edit,enabled", ""); + + editfield_name = ct_input_add_editfield(ly_content, S_(CT_SYS_BODY_NAME), __input_basic_info_name_unfocused_cb, cinput_d); + ct_input_add_name_field(editfield_name, cinput_d); + entry = elm_object_part_content_get(editfield_name, "elm.swallow.content"); + evas_object_smart_callback_add(entry, "focused", __input_basic_info_name_focused_cb, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon", editfield_name); + record_name = ct_input_get_record_name(cinput_d->contact); + elm_entry_input_panel_imdata_set(entry, (void*)"type=name", 9); + __input_basic_info_get_name_str(record_name, buf, sizeof(buf)); + if (*buf) + __input_editfield_entry_set(editfield_name, buf); + + btn_expand = elm_button_add(ly_content); + p_retvm_if(NULL == btn_expand, NULL, "elm_button_add() return NULL"); + elm_object_part_content_set(ly_content, "elm.icon.edit", btn_expand); + elm_object_style_set(btn_expand, "icon_expand_closed"); + evas_object_smart_callback_add(btn_expand, "clicked", __input_basic_info_expand_clicked_cb, cinput_d); + + cinput_d->ly_basic_info = ly_content; + return ly_content; +} + +Evas_Object* ct_input_fill_layout_separator(ct_input_data *cinput_d, const char *theme) +{ + Evas_Object *box = cinput_d->box; + Evas_Object *layout; + + layout = elm_layout_add(box); + elm_layout_theme_set(layout, "layout", "dialogue", theme); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0); + evas_object_show(layout); + + return layout; +} + +static void input_messenger_del(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + int idx; + contacts_error_e err = CONTACTS_ERROR_NONE; + Eina_List *list = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + p_retm_if(NULL == typed_data, "parameter(typed_data) is NULL"); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.messenger, typed_data->record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + + if (typed_data->ly_content == cinput_d->ly_messenger_first) { + idx = ct_input_box_idx_get(cinput_d->box, typed_data->ly_content); + list = elm_box_children_get(cinput_d->box); + cinput_d->ly_messenger_first = eina_list_nth(list, idx + 1); + eina_list_free(list); + } + + err = contacts_record_destroy(typed_data->record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + elm_box_unpack(cinput_d->box, typed_data->ly_content); + evas_object_del(typed_data->ly_content); +} + +static void input_messenger_del_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + int count; + ct_input_data *cinput_d = data; + ct_input_typed_data *typed_data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + input_messenger_del(data, typed_data); + +} + +static void input_messenger_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + Evas_Object *btn_minus; + ct_input_typed_data *typed_data; + const char *tmp; + + tmp = elm_entry_entry_get(obj); + p_retm_if(NULL == tmp || '\0' == tmp[0], "elm_entry_entry_get() return NULL"); + + evas_object_smart_callback_del(obj, "changed", input_messenger_changed_cb); + evas_object_smart_callback_del(obj, "preedit,changed", input_messenger_changed_cb); + p_retm_if(NULL == cinput_d, "parameter(ct_input_data) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + if (typed_data->ly_content == cinput_d->ly_messenger_last) { + btn_minus = elm_button_add(typed_data->ly_content); + p_retm_if(NULL == btn_minus, "elm_button_add() return NULL"); + + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(typed_data->ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_messenger_del_clicked_cb, cinput_d); + + + p_retm_if(NULL == input_new_layout_messenger(cinput_d), "input_new_layout_messenger() return NULL"); + } +} + +static void input_messenger_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *input; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *entry = obj; + ct_input_typed_data *typed_data; + + typed_data = evas_object_data_get(entry, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + input = ctui_entry_markup_to_utf8(elm_entry_entry_get(entry)); + p_retm_if(NULL == input, "ctui_entry_markup_to_utf8() return NULL"); + + err = contacts_record_set_str(typed_data->record, _contacts_messenger.im_id, input); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() failed(%d)", err); + + free(input); +} + +static Evas_Object* input_messenger_get_edit_rename(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + char *val_str; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *entry; + Evas_Object *editfield; + Evas_Object *ly_content = typed_data->ly_content; + + editfield = ct_input_add_editfield(ly_content, T_(CT_GET_TEXT_BASIC, CTTEXT_INSTANT_MESSENGER), + input_messenger_unfocused_cb, cinput_d); + p_retvm_if(NULL == editfield, NULL, "ct_input_add_editfield() return NULL"); + + entry = elm_object_part_content_get(editfield, "elm.swallow.content"); + typed_data->data = entry; + + evas_object_data_set(entry, "typed_data", typed_data); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL); + + err = contacts_record_get_str(typed_data->record, _contacts_messenger.im_id, &val_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() failed(%d)", err); + + if (val_str && *val_str) + ctui_entry_entry_set(entry, val_str); + else { + evas_object_smart_callback_add(entry, "changed", input_messenger_changed_cb, cinput_d); + evas_object_smart_callback_add(entry, "preedit,changed", input_messenger_changed_cb, cinput_d); + } + return editfield; +} + +static Evas_Object* input_fill_layout_messenger(ct_input_data *cinput_d, contacts_record_h record) +{ + int type_int; + char *val_str; + char* messenger_type_str; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *ly_content; + Evas_Object *ef; + Evas_Object *btn_minus; + Evas_Object *btn_type; + Evas_Object *box = cinput_d->box; + ct_input_typed_data *typed_data; + + if (!cinput_d->ly_seperator_more) { + cinput_d->ly_seperator_more = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retvm_if(NULL == cinput_d->ly_seperator_more, EINA_FALSE, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_after(cinput_d->box, cinput_d->ly_seperator_more, cinput_d->ly_addr_last); + } + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "elm_layout_add() return NULL"); + elm_layout_file_set(ly_content, CONTACTS_EDJ, "dialogue/1icon.1type.1edit"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + err = contacts_record_get_int(record, _contacts_messenger.type, &type_int); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() failed(%d)", err); + + btn_type = elm_button_add(ly_content); + if (NULL == btn_type) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + if(CONTACTS_MESSENGER_TYPE_CUSTOM == type_int){ + err = contacts_record_get_str_p(record, _contacts_messenger.label, &messenger_type_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() failed(%d)", err); + + if (NULL == messenger_type_str || '\0' == messenger_type_str[0]) + messenger_type_str = (char *)T_(CT_GET_TEXT_IM_TYPE, CONTACTS_MESSENGER_TYPE_OTHER); + } + else + messenger_type_str = (char *)T_(CT_GET_TEXT_IM_TYPE, type_int); + elm_object_text_set(btn_type, messenger_type_str); + elm_object_text_set(btn_type, T_(CT_GET_TEXT_BASIC, CTTEXT_CUSTOM)); + evas_object_data_set(btn_type, KEY_INPUT_DATA, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon.type", btn_type); + + typed_data = calloc(1, sizeof(ct_input_typed_data)); + p_retvm_if(NULL == typed_data, NULL, "calloc() return NULL"); + typed_data->record = record; + typed_data->ly_content = ly_content; + typed_data->view_uri = _contacts_messenger._uri; + evas_object_data_set(ly_content, "typed_data", typed_data); + + err = contacts_record_get_str_p(record, _contacts_messenger.im_id, &val_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() failed(%d)", err); + + if (val_str && *val_str) { + btn_minus = elm_button_add(ly_content); + if (NULL == btn_minus) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_messenger_del_clicked_cb, cinput_d); + } + + ef = input_messenger_get_edit_rename(cinput_d, typed_data); + if (NULL == ef) { + ERR("input_messenger_get_edit_rename() return NULL"); + evas_object_del(ly_content); + return NULL; + } + ct_input_add_name_field(ef, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon", ef); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_DEL, ct_input_typed_layout_del_cb, typed_data); + + evas_object_smart_callback_add(btn_type, "clicked", ct_input_data_type_clicked_cb, typed_data); + + + if (cinput_d->ly_messenger_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_messenger_last); + else + elm_box_pack_after(box, ly_content, cinput_d->ly_seperator_more); + + return ly_content; +} + +static int input_fill_layout_messengers(ct_input_data *cinput_d) +{ + int i; + unsigned int count = 0; + Evas_Object *layout = NULL; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + err = contacts_record_get_child_record_count(cinput_d->contact, _contacts_contact.messenger, &count); + p_retvm_if(CONTACTS_ERROR_NONE != err, 0, "contacts_record_get_child_record_count() Failed(%d)", err); + + for (i=count-1;i>=0;i--) { + err = contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.messenger, i, &record); + if(err != CONTACTS_ERROR_NONE) { + ERR("contacts_record_get_child_record_at_p() Failed(%d)", err); + continue; + } + + layout = input_fill_layout_messenger(cinput_d, record); + p_retvm_if(NULL == layout, count, "input_fill_layout_messenger() return NULL"); + + if (NULL == cinput_d->ly_messenger_first) + cinput_d->ly_messenger_first = layout; + cinput_d->ly_messenger_last = layout; + } + + return count; +} + +static Evas_Object* input_new_layout_messenger(ct_input_data *cinput_d) +{ + contacts_record_h record = NULL; + Evas_Object *layout; + + record = ct_input_new_record_messenger(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_new_record() return NULL"); + + layout = input_fill_layout_messenger(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_messenger() return NULL"); + + if (NULL == cinput_d->ly_messenger_first) + cinput_d->ly_messenger_first = layout; + cinput_d->ly_messenger_last = layout; + + return layout; +} + +static void input_address_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + Evas_Object *btn_minus; + ct_input_typed_data *typed_data; + const char *tmp; + + tmp = elm_entry_entry_get(obj); + p_retm_if(NULL == tmp || '\0' == tmp[0], "elm_entry_entry_get() return NULL"); + + evas_object_smart_callback_del(obj, "changed", input_address_changed_cb); + evas_object_smart_callback_del(obj, "preedit,changed", input_address_changed_cb); + p_retm_if(NULL == cinput_d, "parameter(ct_input_data) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + if (typed_data->ly_content == cinput_d->ly_addr_last) { + btn_minus = elm_button_add(typed_data->ly_content); + p_retm_if(NULL == btn_minus, "elm_button_add() return NULL"); + + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(typed_data->ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_addr_del_clicked_cb, cinput_d); + p_retm_if(NULL == input_new_layout_address(cinput_d), "input_new_layout_address() return NULL"); + } +} + +static Evas_Object* input_fill_layout_address(ct_input_data *cinput_d, contacts_record_h record) +{ + int type_int; + char *display; + Evas_Object *ly_content; + Evas_Object *ef, *en; + Evas_Object *btn; + Evas_Object *btn_type; + Evas_Object *box = cinput_d->box; + Elm_Entry_Filter_Limit_Size filter; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_typed_data *typed_data; + + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "elm_layout_add() return NULL"); + + elm_layout_file_set(ly_content, CONTACTS_EDJ, "dialogue/1icon.1type.1edit"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + typed_data = calloc(1, sizeof(ct_input_typed_data)); + p_retvm_if(NULL == typed_data, NULL, "calloc() return NULL"); + typed_data->ly_content = ly_content; + typed_data->record = record; + typed_data->view_uri = _contacts_address._uri; + evas_object_data_set(ly_content, "typed_data", typed_data); + + + char address[PH_TEXT_MAX_LEN] = {0, }; + + ef = ctui_create_editfield(ly_content, NULL, S_(CT_SYS_POP_ADDRESS), false); + p_retvm_if(NULL == ef, NULL, "ctui_create_editfield() return NULL"); + ct_input_add_name_field(ef, cinput_d); + + en = elm_object_part_content_get(ef, "elm.swallow.content"); + filter.max_char_count = CT_INPUT_ADDRESS_MAX_CHAR; + elm_entry_input_panel_imdata_set(en, (void*)"type=post", 9); + elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, &filter); + evas_object_smart_callback_add(en, "changed", ct_input_entry_changed_cb, ef); + evas_object_smart_callback_add(en, "unfocused", input_addr_editfield_unfocused_cb, record); + + elm_object_part_content_set(ly_content, "elm.icon", ef); + evas_object_data_set(en, "typed_data", typed_data); + + address[0] = '\0'; + ct_input_get_full_address(record, address, sizeof(address)); + en = __input_editfield_entry_set(ef, address); + if (*address) { + Evas_Object *btn_minus; + btn_minus = elm_button_add(ly_content); + if (NULL == btn_minus) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_addr_del_clicked_cb, cinput_d); + } + else { + evas_object_smart_callback_add(en, "changed", input_address_changed_cb, cinput_d); + evas_object_smart_callback_add(en, "preedit,changed", input_address_changed_cb, cinput_d); + } + + /* type */ + err = contacts_record_get_int(record, _contacts_address.type, &type_int); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() failed(%d)", err); + + btn_type = elm_button_add(ly_content); + if (NULL == btn_type) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + elm_object_text_set(btn_type, T_(CT_GET_TEXT_POSTAL_TYPE, ct_detail_get_address_type_index(type_int))); + + evas_object_data_set(btn_type, KEY_INPUT_DATA, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon.type", btn_type); + + evas_object_smart_callback_add(btn_type, "clicked", input_address_type_mouse_up_cb, typed_data); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_DEL, ct_input_typed_layout_del_cb, typed_data); + + if (cinput_d->ly_addr_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_addr_last); + else + elm_box_pack_end(box, ly_content); + + return ly_content; +} + +static Evas_Object* input_new_layout_address(ct_input_data *cinput_d) +{ + contacts_record_h record = NULL; + Evas_Object *layout; + + record = ct_input_new_record_address(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_new_record_address() return NULL"); + + layout = input_fill_layout_address(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_address() return NULL"); + + if (NULL == cinput_d->ly_addr_first) + cinput_d->ly_addr_first = layout; + cinput_d->ly_addr_last = layout; + + return layout; +} + +static void input_group_add_cb(int grp_id, void *data, bool changed) +{ + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + ct_input_data *cinput_d = data; + + if (grp_id < CONTACTS_ERROR_NONE) + return; + + err = contacts_record_create(_contacts_group_relation._uri, &record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() failed(%d)", err); + + err = contacts_record_set_int(record, _contacts_group_relation.group_id, grp_id); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() failed(%d)", err); + + err = contacts_record_add_child_record(cinput_d->contact, _contacts_contact.group_relation, record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() failed(%d)", err); + + //err = contacts_group_add_contact(grp_id,info->contact_id); + //p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_group_add_contact() Failed(%d)", err); + + ct_input_update_group(cinput_d); +} + + + +static void input_group_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + unsigned int count = 0; + int x, y, w, h; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_list_h list = NULL; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + ct_input_data *cinput_d = data; + + p_retm_if(NULL == ev, "ev is NULL"); + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + elm_object_focus_set(cinput_d->cdetail_d->navi, EINA_FALSE); + + err = phone_cts_get_list(_contacts_group._uri, _contacts_group.address_book_id, cinput_d->base_ab, &list); + p_warn_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)", err); + + err = contacts_list_get_count(list, &count); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err); + + err = contacts_list_destroy(list, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err); + + if (count) + ct_grp_assign_create_view(cinput_d->cdetail_d->navi, cinput_d->contact, cinput_d->base_ab, ct_input_update_group, cinput_d); + else + ctui_create_group_input_view(cinput_d->cdetail_d->win, cinput_d->cdetail_d->navi, NULL, input_group_add_cb, cinput_d); +} + +static char *input_popup_text_get(void *data, Evas_Object *obj, const char *part) +{ + if (0 == strcmp(part, "elm.text")) + return strdup(data); + return NULL; +} + +static void input_ringtone_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *popup; + Elm_Object_Item *item; + Evas_Object *genlist; + Evas_Object *btn; + Evas_Object *box; + char *temp; + int x, y, w, h; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + ct_input_data *cinput_d = data; + + p_retm_if(NULL == ev, "ev is NULL"); + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + elm_object_focus_set(cinput_d->cdetail_d->navi, EINA_FALSE); + + popup = elm_popup_add(cinput_d->cdetail_d->navi); + cinput_d->popup = popup; + elm_object_style_set(popup, "min_menustyle"); + elm_object_part_text_set(popup, "title,text", T_(CT_GET_TEXT_BASIC, CTTEXT_RINGTONE)); + evas_object_smart_callback_add(popup, "block,clicked", ctui_popup_hide_cb, NULL); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + btn = elm_button_add(popup); + elm_object_text_set(btn, S_(PH_SYS_SK_CANCEL)); + elm_object_part_content_set(popup, "button1", btn); + evas_object_smart_callback_add(btn, "clicked", ctui_popup_hide_cb, popup); + + input_ringtone_itc.item_style = "1text"; + input_ringtone_itc.func.text_get = input_popup_text_get; + input_ringtone_itc.func.content_get = NULL; + input_ringtone_itc.func.state_get = NULL; + input_ringtone_itc.func.del = NULL; + + box = elm_box_add(popup); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + genlist = elm_genlist_add(popup); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_item_append(genlist, &input_ringtone_itc, S_(CT_SYS_SK_SET), NULL, ELM_GENLIST_ITEM_NONE, ct_input_myfile_ringtone, data); + + err = contacts_record_get_str_p(cinput_d->contact, _contacts_contact.ringtone_path, &temp); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_contact_record_get_str_p() Failed(%d)", err); + + if (temp && *temp) + elm_genlist_item_append(genlist, &input_ringtone_itc, S_(CT_SYS_SK_RESET), NULL, ELM_GENLIST_ITEM_NONE, input_ringtone_cancel_cb, data); + elm_box_pack_end(box, genlist); + evas_object_show(genlist); + evas_object_size_hint_min_set(box, 600, 200); + elm_object_content_set(popup, box); + evas_object_show(popup); +} + +static void input_vibration_cancel_cb(void *data, Evas_Object *obj, void *event_info) +{ + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d = data; + p_retm_if(NULL == cinput_d, "parameter(cdetail_d) is NULL"); + p_retm_if(NULL == cinput_d->contact, "parameter(contact) is NULL"); + + if (cinput_d->popup) { + evas_object_del(cinput_d->popup); + cinput_d->popup = NULL; + } + + err = contacts_record_set_str(cinput_d->contact, _contacts_contact.vibration, NULL); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str(vibration) Failed(%d)", err); + + ct_input_update_vibration(cinput_d->contact, cinput_d->ly_vibration); +} + +static void input_vibration_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *popup; + Evas_Object *genlist; + Evas_Object *btn; + Evas_Object *box; + char *temp; + int x, y, w, h; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + ct_input_data *cinput_d = data; + + if (ev && ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + elm_object_focus_set(cinput_d->cdetail_d->navi, EINA_FALSE); + + popup = elm_popup_add(cinput_d->cdetail_d->navi); + cinput_d->popup = popup; + elm_object_style_set(popup, "min_menustyle"); + elm_object_part_text_set(popup, "title,text", T_(CT_GET_TEXT_BASIC, CTTEXT_VIBRATION_PATTERN)); + evas_object_smart_callback_add(popup, "block,clicked", ctui_popup_hide_cb, NULL); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + btn = elm_button_add(popup); + elm_object_text_set(btn, S_(PH_SYS_SK_CANCEL)); + elm_object_part_content_set(popup, "button1", btn); + evas_object_smart_callback_add(btn, "clicked", ctui_popup_hide_cb, popup); + + input_vibration_itc.item_style = "1text"; + input_vibration_itc.func.text_get = input_popup_text_get; + input_vibration_itc.func.content_get = NULL; + input_vibration_itc.func.state_get = NULL; + input_vibration_itc.func.del = NULL; + + box = elm_box_add(popup); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + genlist = elm_genlist_add(popup); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_item_append(genlist, &input_vibration_itc, S_(CT_SYS_SK_SET), NULL, ELM_GENLIST_ITEM_NONE, ct_input_myfile_vibration, data); + + err = contacts_record_get_str_p(cinput_d->contact, _contacts_contact.vibration, &temp); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_contact_record_get_str_p() Failed(%d)", err); + + if (temp && *temp) + elm_genlist_item_append(genlist, &input_vibration_itc, S_(CT_SYS_SK_RESET), NULL, ELM_GENLIST_ITEM_NONE, input_vibration_cancel_cb, data); + elm_box_pack_end(box, genlist); + evas_object_show(genlist); + evas_object_size_hint_min_set(box, 600, 200); + elm_object_content_set(popup, box); + evas_object_show(popup); +} + +static void input_del_group_info(ct_input_data *cinput_d) +{ + int i; + unsigned int count; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + err = contacts_record_get_child_record_count(cinput_d->contact, _contacts_contact.group_relation, &count); + p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_count() Failed(%d)", err); + + for (i=count-1;i>=0;i--) { + err = contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.group_relation, i, &record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_at_p() Failed(%d)", err); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.group_relation, record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + + err = contacts_record_destroy(record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + } + + if (cinput_d->ly_group) + ct_input_update_group(cinput_d); +} + +static Evas_Object* input_fill_layout_group(ct_input_data *cinput_d) +{ + char display[PH_TEXT_SHORT_LEN]; + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + + ly_content = ct_input_create_dg_layout(box, "2text.3"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + cinput_d->ly_group = ly_content; + input_layout_selectable_set(ly_content); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_MOUSE_UP, input_group_mouse_up_cb, cinput_d); + + elm_object_part_text_set(ly_content, "elm.text.1", T_(CT_GET_TEXT_BASIC, CTTEXT_GROUP)); + + ct_detail_get_group_names(cinput_d->contact, display, sizeof(display)); + elm_object_part_text_set(ly_content, "elm.text.2", display); + + return ly_content; +} + +static Evas_Object* input_fill_layout_ringtone(ct_input_data *cinput_d) +{ + char *temp; + const char *display; + + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + contacts_error_e err = CONTACTS_ERROR_NONE; + + ly_content = ct_input_create_dg_layout(box, "2text.3"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + cinput_d->ly_ringtone = ly_content; + input_layout_selectable_set(ly_content); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_MOUSE_UP, input_ringtone_mouse_up_cb, cinput_d); + + /* title */ + elm_object_part_text_set(ly_content, "elm.text.1", T_(CT_GET_TEXT_BASIC, CTTEXT_RINGTONE)); + + /* file name */ + err = contacts_record_get_str_p(cinput_d->contact, _contacts_contact.ringtone_path, &temp); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_contact_record_get_str_p() Failed(%d)", err); + + display = ct_detail_get_ringtone_display_name(temp); + elm_object_part_text_set(ly_content, "elm.text.2", display); + + return ly_content; +} + +static Evas_Object* input_fill_layout_vibration(ct_input_data *cinput_d) +{ + char *temp; + const char *display; + + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + contacts_error_e err = CONTACTS_ERROR_NONE; + + ly_content = ct_input_create_dg_layout(box, "2text.3"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + cinput_d->ly_vibration = ly_content; + input_layout_selectable_set(ly_content); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_MOUSE_UP, input_vibration_mouse_up_cb, cinput_d); + + /* title */ + elm_object_part_text_set(ly_content, "elm.text.1", T_(CT_GET_TEXT_BASIC, CTTEXT_VIBRATION_PATTERN)); + + /* file name */ + err = contacts_record_get_str_p(cinput_d->contact, _contacts_contact.vibration, &temp); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_contact_record_get_str_p() Failed(%d)", err); + + display = ct_detail_get_vibration_display_name(temp); + elm_object_part_text_set(ly_content, "elm.text.2", display); + + return ly_content; +} + +static inline void input_refresh_layout(ct_input_data *cinput_d) +{ + cinput_d->idx_append = 0; + elm_box_clear(cinput_d->box); + + cinput_d->ly_basic_info = NULL; + cinput_d->ly_basic_info_last_name = NULL; + cinput_d->ly_basic_info_suffix = NULL; + cinput_d->ly_basic_info_nickname = NULL; + cinput_d->ly_basic_info_job_title = NULL; + cinput_d->ly_basic_info_department = NULL; + cinput_d->ly_basic_info_company = NULL; + cinput_d->ly_number_first = NULL; + cinput_d->ly_number_last = NULL; + cinput_d->ly_number_default = NULL; + cinput_d->ly_number_set_default_separator_before = NULL; + cinput_d->ly_number_set_default = NULL; + cinput_d->ly_number_set_default_separator_after = NULL; + cinput_d->ly_email_first = NULL; + cinput_d->ly_email_last = NULL; + cinput_d->ly_addr_first = NULL; + cinput_d->ly_addr_last = NULL; + cinput_d->ly_seperator_more = NULL; + cinput_d->ly_messenger_first = NULL; + cinput_d->ly_messenger_last = NULL; + cinput_d->ly_url_first = NULL; + cinput_d->ly_url_last = NULL; + cinput_d->ly_relationship_first = NULL; + cinput_d->ly_relationship_last = NULL; + cinput_d->ly_event_first = NULL; + cinput_d->ly_event_last = NULL; + cinput_d->ly_note = NULL; + cinput_d->ly_group = NULL; + cinput_d->ly_ringtone = NULL; + cinput_d->ly_address_book = NULL; + cinput_d->ly_moreinfo = NULL; + + input_fill_layout(cinput_d); +} + +static void input_addrbook_item_sel_cb(void *data, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + char temp[PH_TEXT_SHORT_LEN]; + ct_input_data *cinput_d = data; + ct_ab_popup_data *ab_popup_data; + contacts_record_h record_clone = NULL; + + elm_genlist_item_selected_set(event_info, EINA_FALSE); + + ab_popup_data = elm_object_item_data_get(event_info); + p_retm_if(NULL == ab_popup_data, "evas_object_data_get() return NULL"); + + if (cinput_d->base_ab != ab_popup_data->id) + input_del_group_info(cinput_d); + + cinput_d->base_ab = ab_popup_data->id; + cinput_d->base_ab_mode = ab_popup_data->mode; + + free(cinput_d->base_ab_name); + cinput_d->base_ab_name = NULL; + + temp[0] = '\0'; + ctui_get_addressbook_name(ab_popup_data->id, temp, sizeof(temp)); + if (*temp) + cinput_d->base_ab_name = strdup(temp); + + + + ct_input_remove_empty_fields(cinput_d->contact); + input_refresh_layout(cinput_d); + if (cinput_d->ly_address_book) { + elm_object_part_text_set(cinput_d->ly_address_book, "elm.text.2", cinput_d->base_ab_name); + } + ct_detail_popup_hide_cb(cinput_d->cdetail_d, NULL, NULL); +} + +static void input_addrbook_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + int x, y, w, h; + Evas_Object *popup; + Evas_Object *btn; + ct_input_data *cinput_d = data; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + + p_retm_if(NULL == ev, "ev is NULL"); + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + elm_object_focus_set(cinput_d->cdetail_d->navi, EINA_FALSE); + + popup = ctui_addrbook_popup(cinput_d->cdetail_d->win, input_addrbook_item_sel_cb, cinput_d, CT_AB_POPUP_TYPE_INPUT_VIEW); + p_retm_if(NULL == popup, "ctui_addrbook_popup() return NULL"); + elm_object_part_text_set(popup, "title,text", T_(CT_GET_TEXT_BASE_OP, CTTEXT_SAVE_CONTACT_TO)); + + btn = elm_button_add(popup); + elm_object_text_set(btn, S_(PH_SYS_POP_CLOSE)); + elm_object_part_content_set(popup, "button1", btn); + elm_object_style_set(btn, "popup_button/default"); + evas_object_smart_callback_add(btn, "clicked", ct_detail_popup_hide_cb, cinput_d->cdetail_d); + + cinput_d->cdetail_d->popup = popup; +} + + +static Evas_Object* input_fill_layout_addrbook(ct_input_data *cinput_d) +{ + const char *display; + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + + ly_content = ct_input_create_dg_layout(box, "2text.3"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + cinput_d->ly_address_book = ly_content; + input_layout_selectable_set(ly_content); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_MOUSE_UP, input_addrbook_mouse_up_cb, cinput_d); + + elm_object_part_text_set(ly_content, "elm.text.1", T_(CT_GET_TEXT_BASE_OP, CTTEXT_SAVE_CONTACT_TO)); + + if (0 == cinput_d->base_ab) + display = S_(CT_SYS_BODY_PHONE); + else if (cinput_d->base_ab_name) + display = cinput_d->base_ab_name; + else + display = S_(PH_SYS_BODY_UNKNOWN); + + elm_object_part_text_set(ly_content, "elm.text.2", display); + return ly_content; +} + +static void input_relationship_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *input; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d; + ct_input_typed_data *typed_data = data; + + cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + input = ctui_entry_markup_to_utf8(elm_entry_entry_get(obj)); + if (input && *input) { + err = contacts_record_set_str(typed_data->record, _contacts_relationship.name, input); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_str() Failed(%d)", err); + } + free(input); +} + +static void input_relationship_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + ct_input_data *cinput_d = data; + const char *tmp; + + tmp = elm_entry_entry_get(obj); + p_retm_if(NULL == tmp || '\0' == tmp[0], "elm_entry_entry_get() return NULL"); + + evas_object_smart_callback_del(obj, "changed", input_relationship_changed_cb); + evas_object_smart_callback_del(obj, "preedit,changed", input_relationship_changed_cb); + p_retm_if(NULL == cinput_d, "parameter(ct_input_data) is NULL"); + + p_retm_if(NULL == input_new_layout_relationship(cinput_d), "input_new_layout_relationship() return NULL"); +} + +static Evas_Object* input_relationship_get_edit_rename(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + char *val_str; + Evas_Object *entry; + Evas_Object *editfield; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *ly_content = typed_data->ly_content; + + editfield = ct_input_add_editfield(ly_content, T_(CT_GET_TEXT_BASIC, CTTEXT_RELATIONSHIP), input_relationship_unfocused_cb, typed_data); + p_retvm_if(NULL == editfield, NULL, "ct_input_add_editfield() return NULL"); + + entry = elm_object_part_content_get(editfield, "elm.swallow.content"); + typed_data->data = entry; + + evas_object_data_set(entry, KEY_INPUT_DATA, cinput_d); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL); + + err = contacts_record_get_str_p(typed_data->record, _contacts_relationship.name, &val_str); + if (val_str && *val_str) + ctui_entry_entry_set(entry, val_str); + else { + evas_object_smart_callback_add(entry, "changed", input_relationship_changed_cb, cinput_d); + evas_object_smart_callback_add(entry, "preedit,changed", input_relationship_changed_cb, cinput_d); + } + return editfield; +} + +static void input_relationship_select_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d; + ct_input_typed_data *typed_data = data; + ct_person_list *person_info; + Elm_Object_Item *item = event_info; + + Evas_Object *editfield; + Evas_Object *entry; + Evas_Object *btn; + + p_retm_if(!typed_data, "parameter(cinput_d) is NULL"); + + person_info = elm_object_item_data_get(item); + p_retm_if(NULL == person_info, "elm_object_item_data_get() returns NULL"); + + editfield = elm_object_part_content_get(typed_data->ly_content, "elm.icon"); + entry = elm_object_part_content_get(editfield, "elm.swallow.content"); + + if (entry && person_info->display && *person_info->display) + ctui_entry_entry_set(entry, person_info->display); + + btn = elm_object_part_content_get(typed_data->ly_content, "elm.icon.edit"); + cinput_d = evas_object_data_get(btn, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + elm_naviframe_item_pop(cinput_d->cdetail_d->navi); +} + +static void input_relationship_select_contact(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_typed_data *typed_data = data; + ct_input_data *cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + ct_detail_create_list_view(cinput_d->cdetail_d, input_relationship_select_cb, typed_data, 0); +} + +static Evas_Object* input_fill_layout_relationship(ct_input_data *cinput_d, contacts_record_h record) +{ + int type_int = 0; + char *type_str = NULL; + Evas_Object *ly_content; + Evas_Object *btn_type; + Evas_Object *box = cinput_d->box; + Evas_Object *ef; + Evas_Object *btn; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_typed_data *typed_data; + + if (!cinput_d->ly_seperator_more) { + cinput_d->ly_seperator_more = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retvm_if(NULL == cinput_d->ly_seperator_more, EINA_FALSE, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_after(cinput_d->box, cinput_d->ly_seperator_more, cinput_d->ly_addr_last); + } + + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "elm_layout_add() return NULL"); + elm_layout_file_set(ly_content, CONTACTS_EDJ, "dialogue/1icon.1type.1edit"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + err = contacts_record_get_int(record, _contacts_relationship.type, &type_int); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err); + + btn_type = elm_button_add(ly_content); + if (NULL == btn_type) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + + if (CONTACTS_RELATIONSHIP_TYPE_CUSTOM == type_int) { + err = contacts_record_get_str_p(record, _contacts_relationship.label, &type_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + } + + if (NULL == type_str) + type_str = (char *)T_(CT_GET_TEXT_RELATIONSHIP_TYPE, type_int); + + elm_object_text_set(btn_type, type_str); + evas_object_data_set(btn_type, KEY_INPUT_DATA, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon.type", btn_type); + + typed_data = calloc(1, sizeof(ct_input_typed_data)); + p_retvm_if(NULL == typed_data, NULL, "calloc() return NULL"); + typed_data->record = record; + typed_data->ly_content = ly_content; + typed_data->view_uri = _contacts_relationship._uri; + + evas_object_data_set(ly_content, "typed_data", typed_data); + ef = input_relationship_get_edit_rename(cinput_d, typed_data); + if (NULL == ef) { + ERR("input_website_get_edit_rename() return NULL"); + evas_object_del(ly_content); + free(typed_data); + return NULL; + } + ct_input_add_name_field(ef, cinput_d); + + elm_object_part_content_set(ly_content, "elm.icon", ef); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_DEL, ct_input_typed_layout_del_cb, typed_data); + evas_object_smart_callback_add(btn_type, "clicked", ct_input_data_type_clicked_cb, typed_data); + + btn = elm_button_add(ly_content); + if (NULL == btn) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + elm_object_part_content_set(ly_content, "elm.icon.edit", btn); + evas_object_data_set(btn, KEY_INPUT_DATA, cinput_d); + elm_object_style_set(btn, "icon_plus"); + evas_object_smart_callback_add(btn, "clicked", input_relationship_select_contact, typed_data); + + if (cinput_d->ly_relationship_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_relationship_last); + else if (cinput_d->ly_url_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_url_last); + else if (cinput_d->ly_messenger_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_messenger_last); + else + elm_box_pack_after(box, ly_content, cinput_d->ly_seperator_more); + + if (NULL == cinput_d->ly_relationship_first) + cinput_d->ly_relationship_first = ly_content; + cinput_d->ly_relationship_last = ly_content; + + return ly_content; +} + +static int input_fill_layout_relationship_list(ct_input_data *cinput_d) +{ + int count = 0; + Evas_Object *ly; + contacts_record_h record = NULL; + + while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.relationship, count++, &record)) { + ly = input_fill_layout_relationship(cinput_d, record); + p_retvm_if(NULL == ly, count-1, "input_fill_layout_relationship() return NULL"); + + if (NULL == cinput_d->ly_relationship_first) + cinput_d->ly_relationship_first = ly; + cinput_d->ly_relationship_last = ly; + } + return count-1; +} + +static Evas_Object* input_new_layout_relationship(ct_input_data *cinput_d) +{ + contacts_record_h record = NULL; + Evas_Object *layout; + + record = ct_input_new_record_relationship(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_new_record() return NULL"); + + layout = input_fill_layout_relationship(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_relationship() return NULL"); + + if (NULL == cinput_d->ly_relationship_first) + cinput_d->ly_relationship_first = layout; + cinput_d->ly_relationship_last = layout; + + return layout; +} + +static Evas_Object* input_fill_layout_event(ct_input_data *cinput_d, contacts_record_h record) +{ + int event_date; + int type_int; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *ly_content; + Evas_Object *btn_minus; + Evas_Object *btn_type; + Evas_Object *box = cinput_d->box; + Evas_Object *datetime; + ct_input_typed_data *typed_data; + + if (!cinput_d->ly_seperator_more) { + cinput_d->ly_seperator_more = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retvm_if(NULL == cinput_d->ly_seperator_more, EINA_FALSE, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_after(cinput_d->box, cinput_d->ly_seperator_more, cinput_d->ly_addr_last); + } + + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "elm_layout_add() return NULL"); + elm_layout_file_set(ly_content, CONTACTS_EDJ, "dialogue/1icon.1type.1edit"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + /* datetime */ + datetime = elm_datetime_add(ly_content); + p_retvm_if(NULL == datetime, NULL, "elm_datetime_add() return NULL"); + + elm_datetime_field_visible_set(datetime, ELM_DATETIME_HOUR, EINA_FALSE); + elm_datetime_field_visible_set(datetime, ELM_DATETIME_MINUTE, EINA_FALSE); + elm_datetime_field_visible_set(datetime, ELM_DATETIME_AMPM, EINA_FALSE); + + //elm_object_part_content_set(ly_content, "elm.flip.content", datetime); + elm_object_part_content_set(ly_content, "elm.icon", datetime); + evas_object_data_set(datetime, KEY_INPUT_DATA, cinput_d); + + err = contacts_record_get_int(record, _contacts_event.type, &type_int); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + btn_type = elm_button_add(ly_content); + if (NULL == btn_type) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + elm_object_text_set(btn_type, T_(CT_GET_TEXT_EVENT_TYPE, type_int)); + evas_object_data_set(btn_type, "cinput_d", cinput_d); + elm_object_part_content_set(ly_content, "elm.icon.type", btn_type); + + typed_data = calloc(1, sizeof(ct_input_typed_data)); + p_retvm_if(NULL == typed_data, NULL, "calloc() return NULL"); + typed_data->record = record; + typed_data->ly_content = ly_content; + typed_data->view_uri = _contacts_event._uri; + evas_object_data_set(ly_content, "typed_data", typed_data); + evas_object_data_set(datetime, "typed_data", typed_data); + + err = contacts_record_get_int(record, _contacts_event.date, &event_date); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + if (0 == event_date) { // new record + time_t timer; + struct tm *stime = NULL; + timer = time(NULL); + stime = localtime(&timer); + p_retvm_if(NULL == stime, NULL, "localtime() Failed(%d)", errno); + elm_datetime_value_set(datetime, stime); + } + else { + struct tm stime; + stime.tm_year = event_date/10000 - 1900; + stime.tm_mon = (event_date%10000)/100 - 1; + stime.tm_mday = event_date%100; + elm_datetime_value_set(datetime, &stime); + + btn_minus = elm_button_add(ly_content); + if (NULL == btn_minus) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + free(typed_data); + return NULL; + } + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_event_del_clicked_cb, cinput_d); + } + + evas_object_smart_callback_add(datetime, "changed", input_event_changed_cb, cinput_d); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_DEL, ct_input_typed_layout_del_cb, typed_data); + evas_object_smart_callback_add(btn_type, "clicked", ct_input_data_type_clicked_cb, typed_data); + + if (cinput_d->ly_event_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_event_last); + else if (cinput_d->ly_relationship_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_relationship_last); + else if (cinput_d->ly_url_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_url_last); + else if (cinput_d->ly_messenger_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_messenger_last); + else + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_seperator_more); + + return ly_content; +} + +static int input_fill_layout_event_list(ct_input_data *cinput_d) +{ + int count = 0; + contacts_record_h record = NULL; + Evas_Object *ly; + + while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.event, count++, &record)) { + ly = input_fill_layout_event(cinput_d, record); + p_retvm_if(NULL == ly, count, "input_fill_layout_event() return NULL"); + + if (NULL == cinput_d->ly_event_first) + cinput_d->ly_event_first = ly; + + cinput_d->ly_event_last = ly; + } + return count-1; +} + +static Evas_Object* input_new_layout_event(ct_input_data *cinput_d) +{ + Evas_Object *layout; + contacts_record_h record = NULL; + + record = ct_input_new_record_event(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_new_record_event() return NULL"); + + layout = input_fill_layout_event(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_event() return NULL"); + + if (NULL == cinput_d->ly_event_first) + cinput_d->ly_event_first = layout; + cinput_d->ly_event_last = layout; + + return layout; +} + +static void input_website_del(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + int idx; + contacts_error_e err = CONTACTS_ERROR_NONE; + Eina_List *list = NULL; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + p_retm_if(NULL == typed_data, "parameter(typed_data) is NULL"); + + err = contacts_record_remove_child_record(cinput_d->contact, _contacts_contact.url, typed_data->record); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err); + + if (typed_data->ly_content == cinput_d->ly_url_first) { + idx = ct_input_box_idx_get(cinput_d->box, typed_data->ly_content); + list = elm_box_children_get(cinput_d->box); + cinput_d->ly_url_first = eina_list_nth(list, idx + 1); + eina_list_free(list); + } + + err = contacts_record_destroy(typed_data->record, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + elm_box_unpack(cinput_d->box, typed_data->ly_content); + evas_object_del(typed_data->ly_content); +} + + +static void input_website_del_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + int count; + ct_input_data *cinput_d = data; + ct_input_typed_data *typed_data; + + p_retm_if(NULL == cinput_d, "parameter(cinput_d) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + input_website_del(cinput_d, typed_data); + +} + +static void input_website_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + ct_input_data *cinput_d = data; + Evas_Object *btn_minus; + ct_input_typed_data *typed_data; + const char *tmp; + + tmp = elm_entry_entry_get(obj); + p_retm_if(NULL == tmp || '\0' == tmp[0], "elm_entry_entry_get() return NULL"); + + evas_object_smart_callback_del(obj, "changed", input_website_changed_cb); + p_retm_if(NULL == cinput_d, "parameter(ct_input_data) is NULL"); + + typed_data = evas_object_data_get(obj, "typed_data"); + p_retm_if(NULL == typed_data, "evas_object_data_get() return NULL"); + + if (typed_data->ly_content == cinput_d->ly_url_last) { + btn_minus = elm_button_add(typed_data->ly_content); + p_retm_if(NULL == btn_minus, "elm_button_add() return NULL"); + + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(typed_data->ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_website_del_clicked_cb, cinput_d); + + p_retm_if(NULL == input_new_layout_website(cinput_d), "input_new_layout_website() return NULL"); + } + +} + +static Evas_Object *input_website_get_edit_rename(ct_input_data *cinput_d, ct_input_typed_data *typed_data) +{ + char *val_str; + contacts_error_e err = CONTACTS_ERROR_NONE; + Evas_Object *entry; + Evas_Object *editfield; + Evas_Object *ly_content = typed_data->ly_content; + + editfield = ct_input_add_editfield(ly_content, T_(CT_GET_TEXT_BASIC, CTTEXT_URL), input_website_unfocused_cb, typed_data->record); + p_retvm_if(NULL == editfield, NULL, "ct_input_add_editfield() return NULL"); + + entry = elm_object_part_content_get(editfield, "elm.swallow.content"); + typed_data->data = entry; + + evas_object_data_set(entry, "typed_data", typed_data); + evas_object_data_set(entry, KEY_INPUT_DATA, cinput_d); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_URL); + + err = contacts_record_get_str_p(typed_data->record, _contacts_url.url, &val_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + + if (val_str && *val_str) + ctui_entry_entry_set(entry, val_str); + else + evas_object_smart_callback_add(entry, "changed", input_website_changed_cb, cinput_d); + return editfield; + +} + +static Evas_Object* input_fill_layout_url(ct_input_data *cinput_d, contacts_record_h record) +{ + char *custom_type; + char *val_str; + int type_int; + Evas_Object *ly_content; + Evas_Object *box = cinput_d->box; + Evas_Object *ef; + Evas_Object *btn_type; + Evas_Object *btn_minus; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_typed_data *typed_data; + + if (!cinput_d->ly_seperator_more) { + cinput_d->ly_seperator_more = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retvm_if(NULL == cinput_d->ly_seperator_more, EINA_FALSE, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_after(cinput_d->box, cinput_d->ly_seperator_more, cinput_d->ly_addr_last); + } + + ly_content = elm_layout_add(box); + p_retvm_if(NULL == ly_content, NULL, "elm_layout_add() return NULL"); + elm_layout_file_set(ly_content, CONTACTS_EDJ, "dialogue/1icon.1type.1edit"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + err = contacts_record_get_int(record, _contacts_url.type, &type_int); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + btn_type = elm_button_add(ly_content); + if (NULL == btn_type) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + return NULL; + } + + custom_type = (char *)T_(CT_GET_TEXT_WEBSITE_TYPE, ct_detail_get_website_type_index(type_int)); + if (CONTACTS_URL_TYPE_CUSTOM==type_int) { + err = contacts_record_get_str_p(record, _contacts_url.label, &custom_type); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + + if (NULL == custom_type || '\0' == custom_type[0]) + custom_type = (char *)T_(CT_GET_TEXT_WEBSITE_TYPE, ct_detail_get_website_type_index(CONTACTS_URL_TYPE_OTHER)); + } + elm_object_text_set(btn_type, custom_type); + + evas_object_data_set(btn_type, KEY_INPUT_DATA, cinput_d); + elm_object_part_content_set(ly_content, "elm.icon.type", btn_type); + + typed_data = calloc(1, sizeof(ct_input_typed_data)); + p_retvm_if(NULL == typed_data, NULL, "calloc() return NULL"); + + typed_data->record = record; + typed_data->ly_content = ly_content; + typed_data->view_uri = _contacts_url._uri; + evas_object_data_set(ly_content, "typed_data", typed_data); + + err = contacts_record_get_str_p(record, _contacts_url.url, &val_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + + if (val_str && *val_str) { + btn_minus = elm_button_add(ly_content); + if (NULL == btn_minus) { + ERR("elm_button_add() return NULL"); + evas_object_del(ly_content); + free(typed_data); + return NULL; + } + elm_object_style_set(btn_minus, "minus"); + evas_object_data_set(btn_minus, "typed_data", typed_data); + elm_object_part_content_set(ly_content, "elm.icon.edit", btn_minus); + evas_object_smart_callback_add(btn_minus, "clicked", input_website_del_clicked_cb, cinput_d); + } + + ef = input_website_get_edit_rename(cinput_d, typed_data); + if (NULL == ef) { + ERR("input_website_get_edit_rename() return NULL"); + evas_object_del(ly_content); + free(typed_data); + return NULL; + } + ct_input_add_name_field(ef, cinput_d); + + elm_object_part_content_set(ly_content, "elm.icon", ef); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_DEL, ct_input_typed_layout_del_cb, typed_data); + evas_object_smart_callback_add(btn_type, "clicked", ct_input_data_type_clicked_cb, typed_data); + + if (cinput_d->ly_url_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_url_last); + else { + if (cinput_d->ly_messenger_last) + elm_box_pack_after(box, ly_content, cinput_d->ly_messenger_last); + else + elm_box_pack_after(box, ly_content, cinput_d->ly_seperator_more); + } + + return ly_content; +} + +static Evas_Object* input_new_layout_website(ct_input_data *cinput_d) +{ + contacts_record_h record = NULL; + Evas_Object *layout; + + record = ct_input_new_record_web(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_new_record_web() return NULL"); + + layout = input_fill_layout_url(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_url() return NULL"); + + if (NULL == cinput_d->ly_url_first) + cinput_d->ly_url_first = layout; + cinput_d->ly_url_last = layout; + + return layout; +} + + +static int input_fill_layout_websites(ct_input_data *cinput_d) +{ + int count = 0; + Evas_Object *ly; + contacts_record_h record = NULL; + + ly = NULL; + + while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.url, count++, &record)) { + ly = input_fill_layout_url(cinput_d, record); + p_retvm_if(NULL == ly, count-1, "input_fill_layout_url() return NULL"); + + if (NULL == cinput_d->ly_url_first) + cinput_d->ly_url_first = ly; + cinput_d->ly_url_last = ly; + } + return count-1; +} + +static Evas_Object* input_fill_layout_note(ct_input_data *cinput_d) +{ + char *note_str; + char *note_str_markup; + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + Evas_Object *ef, *en; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + if (!cinput_d->ly_seperator_more) { + cinput_d->ly_seperator_more = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retvm_if(NULL == cinput_d->ly_seperator_more, EINA_FALSE, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_after(cinput_d->box, cinput_d->ly_seperator_more, cinput_d->ly_addr_last); + } + + ly_content = ct_input_create_dg_layout(box, "1icon"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + evas_object_size_hint_align_set(ly_content, EVAS_HINT_FILL, 0.0); + evas_object_show(ly_content); + + record = ct_input_get_record_note(cinput_d->contact); + p_retvm_if(NULL == record, NULL, "ct_input_get_record_note() return NULL"); + + ef = ctui_create_editfield(ly_content, T_(CT_GET_TEXT_BASIC, CTTEXT_NOTE), NULL, true); + p_retvm_if(NULL == ef, NULL, "ctui_create_editfield() return NULL"); + ct_input_add_name_field(ef, cinput_d); + + en = elm_object_part_content_get(ef, "elm.swallow.content"); + evas_object_smart_callback_add(en, "unfocused", input_note_unfocused_cb, record); + evas_object_smart_callback_add(en, "changed", ct_input_entry_changed_cb, ef); + elm_object_part_content_set(ly_content, "elm.icon", ef); + evas_object_data_set(en, KEY_INPUT_DATA, cinput_d); + + err = contacts_record_get_str_p(record, _contacts_note.note, ¬e_str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + + note_str_markup = elm_entry_utf8_to_markup(note_str); + __input_editfield_entry_set(ef, note_str_markup); + free(note_str_markup); + + if (cinput_d->ly_event_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_event_last); + else if (cinput_d->ly_relationship_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_relationship_last); + else if (cinput_d->ly_url_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_url_last); + else if (cinput_d->ly_messenger_last) + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_messenger_last); + else + elm_box_pack_after(cinput_d->box, ly_content, cinput_d->ly_seperator_more); + + cinput_d->ly_note = ly_content; + + return ly_content; +} + + +static Evas_Object* input_fill_layout_addresses(ct_input_data *cinput_d) +{ + int count = 0; + Evas_Object *layout = NULL; + contacts_record_h record = NULL; + + while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(cinput_d->contact, _contacts_contact.address, count++, &record)) { + layout = input_fill_layout_address(cinput_d, record); + p_retvm_if(NULL == layout, NULL, "input_fill_layout_address() return NULL"); + + if (NULL == cinput_d->ly_addr_first) + cinput_d->ly_addr_first = layout; + cinput_d->ly_addr_last = layout; + } + + p_retvm_if(NULL == input_new_layout_address(cinput_d), NULL, "input_new_layout_address() return NULL"); + + return layout; +} + +static void input_genlist_render_flush_post_cb(void *data, Evas *e, void *event_info) +{ + int field; + Evas_Coord w,h; + ct_input_data *cinput_d = data; + + evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, input_genlist_render_flush_post_cb); + field = (int)evas_object_data_get(cinput_d->scroller, "field"); + evas_object_data_del(cinput_d->scroller, "field"); + + switch (field) { + case INPUT_MORE_JOB_TITLE: + case INPUT_MORE_DEPARTMENT: + elm_scroller_region_bring_in(cinput_d->scroller, 0, 0, 0, 0); + break; + default: + elm_scroller_child_size_get(cinput_d->scroller, &w, &h); + elm_scroller_region_bring_in(cinput_d->scroller, 0, h, 0, h); + break; + } + +} + +static void input_update_moreinfo(ct_input_data *cinput_d) +{ + PH_FN_CALL; + p_ret_if(!cinput_d->ly_moreinfo); + + if (cinput_d->ly_event_last && cinput_d->add_department && + cinput_d->add_job_title && cinput_d->ly_messenger_last && cinput_d->ly_note && + cinput_d->ly_url_last) { + + evas_object_del(cinput_d->ly_moreinfo); + } +} + +static void input_moreinfo_cb(void *data, Evas_Object *obj, void *event_info) +{ + int field = (int)data; + ct_input_data *cinput_d; + Evas_Object *layout; + Evas_Object *btn_expand; + + cinput_d = evas_object_data_get(obj, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + ct_detail_popup_hide_cb(cinput_d->cdetail_d, NULL, NULL); + + switch(field) { + case INPUT_MORE_JOB_TITLE: + cinput_d->add_job_title = true; + if (cinput_d->ly_basic_info_last_name) { + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_JOB_TITLE), + input_job_title_unfocused_cb, _contacts_company._uri, _contacts_company.job_title); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_nickname); + cinput_d->ly_basic_info_job_title = layout; + } + else { + btn_expand = elm_object_part_content_get(cinput_d->ly_basic_info, "elm.edit.icon"); + __input_basic_info_expand_clicked_cb(cinput_d, btn_expand, NULL); + } + break; + case INPUT_MORE_DEPARTMENT: + cinput_d->add_department = true; + if (cinput_d->ly_basic_info_last_name) { + layout = __input_fill_layout_basic_info_expand(cinput_d, T_(CT_GET_TEXT_BASIC, CTTEXT_DEPARTMENT), + input_department_unfocused_cb, _contacts_company._uri, _contacts_company.department); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info_expand() return NULL"); + if (cinput_d->ly_basic_info_job_title) + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_job_title); + else + elm_box_pack_after(cinput_d->box, layout, cinput_d->ly_basic_info_nickname); + cinput_d->ly_basic_info_department = layout; + } + else { + btn_expand = elm_object_part_content_get(cinput_d->ly_basic_info, "elm.edit.icon"); + __input_basic_info_expand_clicked_cb(cinput_d, btn_expand, NULL); + } + break; + case INPUT_MORE_MESSENGER: + input_new_layout_messenger(cinput_d); + break; + case INPUT_MORE_URL: + input_new_layout_website(cinput_d); + break; + case INPUT_MORE_RELATIONSHIP: + input_new_layout_relationship(cinput_d); + break; + case INPUT_MORE_EVENT: + input_new_layout_event(cinput_d); + break; + case INPUT_MORE_NOTE: + input_fill_layout_note(cinput_d); + break; + } + + evas_object_data_set(cinput_d->scroller, "field", (void *)field); + evas_event_callback_add(evas_object_evas_get(cinput_d->scroller), + EVAS_CALLBACK_RENDER_FLUSH_POST, input_genlist_render_flush_post_cb, cinput_d); + + input_update_moreinfo(cinput_d); +} + +//static void input_moreinfo_button_cb(void *data, Evas_Object *obj, void *even_info) +static void input_moreinfo_button_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + int rotate; + ct_input_data *cinput_d = data; + ct_detail_data *cdetail_d = cinput_d->cdetail_d; + int x,y,w,h; + Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (ev->output.y < y || y + h < ev->output.y) + return; + + elm_object_tree_focus_allow_set(cdetail_d->navi, EINA_FALSE); + + if (cdetail_d->popup) + ct_detail_popup_hide_cb(cdetail_d, NULL, NULL); + + cdetail_d->popup = elm_ctxpopup_add(cdetail_d->win); + p_retm_if(NULL == cdetail_d->popup, "elm_ctxpopup_add() return NULL"); + + rotate = (int)evas_object_data_get(cinput_d->cdetail_d->navi, "phone_rotate"); + if (0 == rotate || 180 == rotate) + elm_ctxpopup_direction_priority_set(cdetail_d->popup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT); + + + if (cinput_d->keypad_on == true) { + if(rotate == 0 || rotate == 180) + evas_object_move(cdetail_d->popup, x+(w/2), CT_INPUT_MOREINFO_PORTRAIT_Y+(h/2)); + else + evas_object_move(cdetail_d->popup, x+(w/2), CT_INPUT_MOREINFO_LANDSCAPE_Y+(h/2)); + } + else + evas_object_move(cdetail_d->popup, x+(w/2), y+(h/2)); + + evas_object_smart_callback_add(cdetail_d->popup, "dismissed", ct_detail_popup_hide_cb, cdetail_d); + + evas_object_data_set(cdetail_d->popup, KEY_INPUT_DATA, cinput_d); + + if (!cinput_d->add_job_title) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_JOB_TITLE), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_JOB_TITLE); + if (!cinput_d->add_department) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_DEPARTMENT), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_DEPARTMENT); + if (!cinput_d->ly_messenger_last) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_INSTANT_MESSENGER), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_MESSENGER); + if (!cinput_d->ly_url_last) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_URL), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_URL); + if (!cinput_d->ly_relationship_last) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_RELATIONSHIP), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_RELATIONSHIP); + + if (!cinput_d->ly_event_last) // TODO: Fixme + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_EVENT), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_EVENT); + if (!cinput_d->ly_note) + elm_ctxpopup_item_append(cdetail_d->popup, T_(CT_GET_TEXT_BASIC, CTTEXT_NOTE), NULL, + input_moreinfo_cb, (void *)INPUT_MORE_NOTE); + + evas_object_show(cdetail_d->popup); +} + +static Evas_Object* input_fill_layout_moreinfo(ct_input_data *cinput_d) +{ + // TODO: Fixme + /* + Evas_Object *button; + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + + ly_content = ct_input_create_dg_layout(box, "bg/1icon"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + button = elm_button_add(box); + p_retvm_if(NULL == button, NULL, "elm_button_add() return NULL"); + elm_object_text_set(button, T_(CT_GET_TEXT_BASIC, CTTEXT_MORE_INFORMATION)); + elm_object_part_content_set(ly_content, "elm.icon", button); + evas_object_smart_callback_add(button, "clicked", input_moreinfo_button_cb, cinput_d); + + cinput_d->ly_moreinfo = ly_content; + return ly_content; + */ + Evas_Object *box = cinput_d->box; + Evas_Object *ly_content; + + ly_content = ct_input_create_dg_layout(box, "1text"); + p_retvm_if(NULL == ly_content, NULL, "ct_input_create_dg_layout() return NULL"); + + input_layout_selectable_set(ly_content); + evas_object_event_callback_add(ly_content, EVAS_CALLBACK_MOUSE_UP, input_moreinfo_button_cb, cinput_d); + elm_object_part_text_set(ly_content, "elm.text", T_(CT_GET_TEXT_BASIC, CTTEXT_MORE_INFORMATION)); + + cinput_d->ly_moreinfo = ly_content; + return ly_content; +} + +static void input_fill_layout(ct_input_data *cinput_d) +{ + int i; + int cnt; + char *str; + Evas_Object *layout; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record = NULL; + + for (i = cinput_d->idx_append; i < INPUT_ITEMS_MAX; i++) { + switch(i) { + case INPUT_IMAGE: + layout = __input_fill_layout_image(cinput_d); + p_retm_if(NULL == layout, "__input_fill_layout_image() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + break; + case INPUT_BASIC_INFO: + record = ct_input_get_record_company(cinput_d->contact); + if (record) { + if (!cinput_d->add_department) { + err = contacts_record_get_str_p(record, _contacts_company.department, &str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + if (str && *str) + cinput_d->add_department = true; + } + if (!cinput_d->add_job_title) { + err = contacts_record_get_str_p(record, _contacts_company.job_title, &str); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err); + if (str && *str) + cinput_d->add_job_title = true; + } + } + layout = __input_fill_layout_basic_info(cinput_d); + p_retm_if(NULL == layout, "__input_fill_layout_basic_info() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + if (!cinput_d->ly_seperator_basic_info) { + cinput_d->ly_seperator_basic_info = ct_input_fill_layout_separator(cinput_d, "separator/hd18/with_line"); + p_retm_if(NULL == layout, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_end(cinput_d->box, cinput_d->ly_seperator_basic_info); + } + break; + + case INPUT_NUMBER: + ct_input_fill_layout_numbers(cinput_d); + break; + + case INPUT_EMAIL: + ct_input_fill_layout_emails(cinput_d); + break; + + case INPUT_ADDRESS: + input_fill_layout_addresses(cinput_d); + break; + + case INPUT_MESSENGER: + cnt = input_fill_layout_messengers(cinput_d); + if (cnt) { + input_new_layout_messenger(cinput_d); + } + break; + + case INPUT_URL: + cnt = input_fill_layout_websites(cinput_d); + if (cnt) { + input_new_layout_website(cinput_d); + } + break; + case INPUT_RELATIONSHIP: + cnt = input_fill_layout_relationship_list(cinput_d); + if (cnt) + input_new_layout_relationship(cinput_d); + break; + case INPUT_EVENT: + cnt = input_fill_layout_event_list(cinput_d); + if (cnt) + input_new_layout_event(cinput_d); + break; + case INPUT_NOTE: + if(cinput_d->cdetail_d->list_note) + input_fill_layout_note(cinput_d); + break; + case INPUT_GROUP: + layout = ct_input_fill_layout_separator(cinput_d, "separator/hd33/with_line"); + p_retm_if(NULL == layout, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + /* group */ + layout = input_fill_layout_group(cinput_d); + p_retm_if(NULL == layout, "input_fill_layout_group() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + break; + + case INPUT_RINGTONE: + /* ringtone */ + layout = input_fill_layout_ringtone(cinput_d); + p_retm_if(NULL == layout, "input_fill_layout_ringtone() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + break; + + case INPUT_VIBRATION: + /* vibration */ + layout = input_fill_layout_vibration(cinput_d); + p_retm_if(NULL == layout, "input_fill_layout_vibration() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + break; + + case INPUT_ADDRBOOK: + /* address book */ + if (0 == cinput_d->contact_id) { + layout = input_fill_layout_addrbook(cinput_d); + p_retm_if(NULL == layout, "input_fill_layout_addrbook() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + } + break; + + case INPUT_MORE_INFO: + if(cinput_d->add_job_title && cinput_d->add_department && cinput_d->ly_messenger_last + && cinput_d->ly_url_last && cinput_d->ly_relationship_last && cinput_d->ly_event_last + && cinput_d->ly_note) + break; + + + layout = ct_input_fill_layout_separator(cinput_d, "separator/hd16"); + p_retm_if(NULL == layout, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + layout = input_fill_layout_moreinfo(cinput_d); + p_retm_if(NULL == layout, "input_fill_layout_moreinfo() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + layout = ct_input_fill_layout_separator(cinput_d, "separator/hd16"); + p_retm_if(NULL == layout, "ct_input_fill_layout_separator() return NULL"); + elm_box_pack_end(cinput_d->box, layout); + + input_update_moreinfo(cinput_d); + break; + + default: + ERR("Unknown item(%d)", i); + } + } +} + +static void input_cancel_cb(void *data, Evas_Object *obj, void *event_info) +{ + PH_FN_CALL; + ct_input_data *cinput_d = data; + ct_detail_data *cdetail_d = cinput_d->cdetail_d; + + /* evas_object_smart_callback_del() func will be deleted */ + evas_object_smart_callback_del(obj, "clicked", input_cancel_cb); + + elm_naviframe_item_pop(cdetail_d->navi); +} + +static Eina_Bool input_win_prop_change(void *data, int type, void *event) +{ + Evas_Object *l_btn, *r_btn; + Ecore_X_Event_Window_Property *ev = event; + Ecore_X_Virtual_Keyboard_State state = ecore_x_e_virtual_keyboard_state_get(ev->win); + ct_input_data *cinput_d = (ct_input_data *)data; + + p_retvm_if(NULL == cinput_d, ECORE_CALLBACK_PASS_ON, "data is NULL"); + + if (ECORE_X_VIRTUAL_KEYBOARD_STATE_ON == state && + NULL == elm_object_item_part_content_get(cinput_d->navi_item, "title_left_btn")) { + r_btn = phone_create_navi_btn(cinput_d->cdetail_d->navi, "naviframe/prev_btn/default"); + if (cinput_d->cdetail_d->ug && NULL == cinput_d->pre_item) + evas_object_smart_callback_add(r_btn, "clicked", phone_ug_destroy_me_cb, cinput_d->cdetail_d->ug); + else + evas_object_smart_callback_add(r_btn, "clicked", input_cancel_cb, cinput_d); + elm_object_item_part_content_set(cinput_d->navi_item, "title_right_btn",r_btn); + + l_btn = phone_create_navi_btn(cinput_d->cdetail_d->navi, "plus"); + evas_object_smart_callback_add(l_btn, "clicked", ct_input_save_cb, cinput_d); + elm_object_item_part_content_set(cinput_d->navi_item, "title_left_btn", l_btn); + + ct_input_save_button_update(cinput_d); + cinput_d->keypad_on = true; + } + else if (ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF == state && + NULL != elm_object_item_part_content_get(cinput_d->navi_item, "title_left_btn")) { + elm_object_item_part_content_set(cinput_d->navi_item, "title_left_btn", NULL); + elm_object_item_part_content_set(cinput_d->navi_item, "title_right_btn", NULL); + cinput_d->keypad_on = false; + } + return ECORE_CALLBACK_PASS_ON; +} + + +static Evas_Object* input_create_layout(ct_input_data *cinput_d) +{ + char temp[PH_TEXT_MAX_LEN]; + Evas_Object *box; + Evas_Object *scroller; + Evas_Object *layout; + contacts_error_e err = CONTACTS_ERROR_NONE; + contacts_record_h record_addressbook = NULL; + ct_detail_data *cdetail_d = cinput_d->cdetail_d; + + layout = phone_create_base_layout(cdetail_d->navi, false); + p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL"); + evas_object_data_set(layout, KEY_INPUT_DATA, cinput_d); + cinput_d->win_prop_change = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, input_win_prop_change, cinput_d); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + scroller = elm_scroller_add(layout); + p_retvm_if(NULL == scroller, NULL, "elm_scroller_add() return NULL"); + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE); + elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO); + evas_object_show(scroller); + elm_object_part_content_set(layout, "elm.swallow.content", scroller); + cinput_d->scroller = scroller; + + box = elm_box_add(scroller); + p_retvm_if(NULL == box, NULL, "elm_box_add() return NULL"); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0); + elm_object_content_set(scroller, box); + evas_object_show(box); + cinput_d->box = box; + + cdetail_d->has_input = true; + if (!cinput_d->contact) { + err = contacts_record_create(_contacts_contact._uri, &(cinput_d->contact)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d))", err); + + if (cdetail_d->base_grp) { + contacts_record_h record_group_relation = NULL; + err = contacts_record_create(_contacts_group_relation._uri, &(record_group_relation)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err); + + err = contacts_record_set_int(record_group_relation, _contacts_group_relation.group_id, cdetail_d->base_grp); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err); + + err = contacts_record_add_child_record(cinput_d->contact, _contacts_contact.group_relation, record_group_relation); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err); + + err = contacts_record_destroy(record_group_relation, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + } + + if (cinput_d->base_ab < 0) + cinput_d->base_ab = ct_input_get_base_ab(); + + err = contacts_db_get_record(_contacts_address_book._uri, cinput_d->base_ab, &record_addressbook); + if (CONTACTS_ERROR_NONE == err) { + free(cinput_d->base_ab_name); + cinput_d->base_ab_name = NULL; + + temp[0] = '\0'; + ctui_get_addressbook_name(cinput_d->base_ab, temp, sizeof(temp)); + if (*temp) + cinput_d->base_ab_name = strdup(temp); + err = contacts_record_get_int(record_addressbook, _contacts_address_book.mode, &(cinput_d->base_ab_mode)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + err = contacts_record_destroy(record_addressbook, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + + } + else { + cinput_d->base_ab = 0; + cinput_d->base_ab_mode = CONTACTS_ADDRESS_BOOK_MODE_NONE; + cinput_d->base_ab_name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE)); + } + + } + else if (cinput_d->contact_id) { + err = contacts_record_get_int(cinput_d->contact, _contacts_contact.address_book_id, &(cinput_d->base_ab)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + if (cinput_d->base_ab) { + err = contacts_db_get_record(_contacts_address_book._uri, cinput_d->base_ab, &record_addressbook); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err); + + err = contacts_record_get_int(record_addressbook, _contacts_address_book.mode, &(cinput_d->base_ab_mode)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err); + + + free(cinput_d->base_ab_name); + + temp[0] = '\0'; + ctui_get_addressbook_name(cinput_d->base_ab, temp, sizeof(temp)); + if (*temp) + cinput_d->base_ab_name = strdup(temp); + + err = contacts_record_destroy(record_addressbook, true); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err); + } + } + if (cinput_d->base_ab < 0){ + cinput_d->base_ab = ct_input_get_base_ab(); + temp[0] = '\0'; + ctui_get_addressbook_name(cinput_d->base_ab, temp, sizeof(temp)); + if (*temp) + cinput_d->base_ab_name = SAFE_STRDUP(temp); + } + input_fill_layout(cinput_d); + evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, input_view_delete_cb, cinput_d); + + return layout; +} + +void ct_input_language_changed(Evas_Object *navi) +{ + PH_FN_CALL; + ct_input_data *cinput_d; + + cinput_d = evas_object_data_get(navi, KEY_INPUT_DATA); + p_retm_if(NULL == cinput_d, "evas_object_data_get() return NULL"); + + // update title + if (cinput_d->navi_item) { + if (!cinput_d->contact_id) + elm_object_item_text_set(cinput_d->navi_item, S_(CT_SYS_BODY_CREATE)); + else + elm_object_item_text_set(cinput_d->navi_item, S_(PH_SYS_SK_EDIT)); + } + + // update content + ct_input_remove_empty_fields(cinput_d->contact); + input_refresh_layout(cinput_d); +} + +void ct_input_push_navi_content(ct_detail_data *cdetail_d, contacts_record_h contact, int contact_id) +{ + PH_FN_CALL; + int ret; + const char *navi_title; + Evas_Object *content; + Elm_Object_Item *navi_item; + contacts_error_e err = CONTACTS_ERROR_NONE; + ct_input_data *cinput_d; + + cinput_d = calloc(1, sizeof(ct_input_data)); + p_retm_if(NULL == cinput_d, "calloc() return NULL"); + cinput_d->cdetail_d = cdetail_d; + cinput_d->contact = contact; + cinput_d->contact_id = contact_id; + if(cdetail_d->base_ab < 0) + cinput_d->base_ab = 0; + else + cinput_d->base_ab = cdetail_d->base_ab; + cinput_d->base_ab_mode = cdetail_d->base_ab_mode; + cinput_d->base_ab_name = SAFE_STRDUP(cdetail_d->base_ab_name); + cinput_d->pre_item = elm_naviframe_top_item_get(cdetail_d->navi); + cinput_d->save_disable = EINA_FALSE; + evas_object_data_set(cdetail_d->navi, KEY_INPUT_DATA, cinput_d); + + if (cdetail_d->has_detail) { + ct_detail_delete_namecards(cdetail_d); + } + + content = input_create_layout(cinput_d); + p_retm_if(NULL == content, "input_create_layout() Failed"); + cinput_d->layout = content; + + if (cinput_d->contact_id) { + navi_title = S_(PH_SYS_SK_EDIT); + err = contacts_db_get_current_version(&(cinput_d->view_create_ver)); + p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_current_version() Failed(%d)", err); + + ret = contacts_db_add_changed_cb(_contacts_contact._uri, input_contacts_changed, cinput_d); + p_warn_if(CONTACTS_ERROR_NONE != ret, "contacts_db_add_changed_cb() Failed(%d)", ret); + } + else + navi_title = S_(CT_SYS_BODY_CREATE); + + navi_item = elm_naviframe_item_push(cdetail_d->navi, navi_title, NULL, NULL, content, NULL); + cinput_d->navi_item = navi_item; + + cinput_d->save_button = phone_create_toolbar_btn(cinput_d->cdetail_d->navi, S_(CT_SYS_SK_DONE), ct_input_save_cb, cinput_d); + elm_object_item_part_content_set(navi_item, "toolbar_button1", cinput_d->save_button); + + ct_input_save_button_update(cinput_d); + + if (cinput_d->cdetail_d->ug && NULL == cinput_d->pre_item) { + Evas_Object *close_button = elm_button_add(cinput_d->cdetail_d->navi); + evas_object_smart_callback_add(close_button, "clicked", phone_ug_destroy_me_cb, cinput_d->cdetail_d->ug); + elm_object_style_set(close_button, "naviframe/back_btn/default"); + elm_object_item_part_content_set(cinput_d->navi_item, "prev_btn", close_button); + } + else { + Evas_Object *cancel_button = phone_create_toolbar_btn(cinput_d->cdetail_d->navi, S_(PH_SYS_SK_CANCEL), input_cancel_cb, cinput_d); + elm_object_item_part_content_set(cinput_d->navi_item, "toolbar_button2", cancel_button); + elm_object_style_set(cinput_d->save_button, "naviframe/toolbar/left"); + elm_object_style_set(cancel_button, "naviframe/toolbar/right"); + } + + + PH_DBG("##### [TSP_TEST] detail->edit end.#####"); +} |