summaryrefslogtreecommitdiff
path: root/lib/details/ct-input-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/details/ct-input-view.c')
-rwxr-xr-xlib/details/ct-input-view.c3245
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, &current_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, &note_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.#####");
+}