/* * 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://www.tizenopensource.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 #include "email-composer.h" #include "email-composer-recipient.h" #include "email-composer-callback.h" #include "email-composer-attachment.h" #include "email-composer-util.h" #include "email-composer-predictive-search.h" static void _composer_mbe_register_mbe_entry_callback(Evas_Object *parent, EmailComposerUGD *ugd); static void _composer_mbe_register_mbe_callback(Evas_Object *parent, EmailComposerUGD *ugd); static Evas_Object *_composer_mbe_create_mbe(Evas_Object *parent, COMPOSER_RECIPIENT_TYPE_E recp_type, EmailComposerUGD *ugd); static Evas_Object *_composer_mbe_create_recp_scroll(Evas_Object *parent); static Evas_Object *_composer_mbe_create_recp_layout(Evas_Object *parent); static Evas_Object *_composer_mbe_create_recipient_layout(Evas_Object *parent, COMPOSER_RECIPIENT_TYPE_E recp_type, EmailComposerUGD *ugd); static void _composer_mbe_register_mbe_entry_callback(Evas_Object *parent, EmailComposerUGD *ugd) { debug_log(""); evas_object_smart_callback_add(parent, "changed", _composer_mbe_changed_cb, ugd); evas_object_smart_callback_add(parent, "preedit,changed", _composer_mbe_changed_cb, ugd); evas_object_smart_callback_add(parent, "longpressed", _composer_mbe_longpressed_cb, ugd); } static void _composer_mbe_register_mbe_callback(Evas_Object *parent, EmailComposerUGD *ugd) { debug_log(""); elm_multibuttonentry_item_filter_append(parent, _composer_mbe_verified_item_cb, ugd); evas_object_smart_callback_add(parent, "item,added", _composer_mbe_added_cb, ugd); evas_object_smart_callback_add(parent, "item,deleted", _composer_mbe_deleted_cb, ugd); evas_object_smart_callback_add(parent, "item,clicked", _composer_mbe_selected_cb, ugd); evas_object_smart_callback_add(parent, "focused", _composer_mbe_focused_cb, ugd); evas_object_smart_callback_add(parent, "unfocused", _composer_mbe_unfocused_cb, ugd); } static Evas_Object *_composer_mbe_create_mbe(Evas_Object *parent, COMPOSER_RECIPIENT_TYPE_E recp_type, EmailComposerUGD *ugd) { debug_log(""); Evas_Object *mbe; Evas_Object *entry; char recp_string[MAX_STR_LEN] = { 0, }; mbe = elm_multibuttonentry_add(parent); evas_object_size_hint_weight_set(mbe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(mbe, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(mbe); entry = elm_multibuttonentry_entry_get(mbe); elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_EMAIL); elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32 color=#000000'"); /* add filter for removing markups*/ // elm_entry_text_filter_append(entry, _composer_entry_filter_remove_markup, ugd); if (recp_type == COMPOSER_RECIPIENT_TYPE_TO) { snprintf(recp_string, sizeof(recp_string), "%s%s", dgettext("sys_string", "IDS_COM_BODY_TO"), ":"); } else if (recp_type == COMPOSER_RECIPIENT_TYPE_CC) { snprintf(recp_string, sizeof(recp_string), "%s%s", _("IDS_EMAIL_BODY_CC"), ":"); } else if (recp_type == COMPOSER_RECIPIENT_TYPE_BCC) { snprintf(recp_string, sizeof(recp_string), "%s%s", _("IDS_EMAIL_BODY_BCC"), ":"); } else if (recp_type == COMPOSER_RECIPIENT_TYPE_FROM) { snprintf(recp_string, sizeof(recp_string), "%s%s", _("IDS_EMAIL_BODY_FROM"), ":"); } elm_object_text_set(mbe, recp_string); // if (recp_type != COMPOSER_RECIPIENT_TYPE_FROM) { // Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(entry); // ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _composer_input_panel_state_changed_cb, ugd); // } _composer_mbe_register_mbe_callback(mbe, ugd); _composer_mbe_register_mbe_entry_callback(entry, ugd); return mbe; } static Evas_Object *_composer_mbe_create_recp_scroll(Evas_Object *parent) { debug_log(""); Evas_Object *scroller; scroller = elm_scroller_add(parent); evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE); elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); evas_object_show(scroller); elm_object_focus_allow_set(scroller, EINA_FALSE); elm_scroller_content_min_limit(scroller, 0, 1); evas_object_size_hint_max_set(scroller, 9999, 150); return scroller; } static Evas_Object *_composer_mbe_create_recp_layout(Evas_Object *parent) { debug_log(""); Evas_Object *layout; layout = elm_layout_add(parent); elm_layout_file_set(layout, COMPOSER_EDJ_NAME, "layout.recipient"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(layout); return layout; } static Evas_Object *_composer_mbe_create_recipient_layout(Evas_Object *parent, COMPOSER_RECIPIENT_TYPE_E recp_type, EmailComposerUGD *ugd) { debug_log(""); Evas_Object *ly; Evas_Object *sc; Evas_Object *mbe; ly = _composer_mbe_create_recp_layout(parent); sc = _composer_mbe_create_recp_scroll(ly); mbe = _composer_mbe_create_mbe(ly, recp_type, ugd); if (recp_type == COMPOSER_RECIPIENT_TYPE_TO) { debug_log("to field"); ugd->to_ly = ly; ugd->to_mbe = mbe; ugd->to_mbe_entry = elm_multibuttonentry_entry_get(mbe); } else if (recp_type == COMPOSER_RECIPIENT_TYPE_CC) { debug_log("cc field"); ugd->cc_ly = ly; ugd->cc_mbe = mbe; ugd->cc_mbe_entry = elm_multibuttonentry_entry_get(mbe); } else if (recp_type == COMPOSER_RECIPIENT_TYPE_BCC) { debug_log("bcc field"); ugd->bcc_ly = ly; ugd->bcc_mbe = mbe; ugd->bcc_mbe_entry = elm_multibuttonentry_entry_get(mbe); } elm_object_content_set(sc, mbe); elm_object_part_content_set(ly, "recipient.swallow", sc); return ly; } void email_composer_create_to_field(EmailComposerUGD *ugd) { debug_log(""); Evas_Object *to_layout; to_layout = _composer_mbe_create_recipient_layout(ugd->c_layout, COMPOSER_RECIPIENT_TYPE_TO, ugd); elm_object_part_content_set(ugd->c_layout, "to_field", to_layout); } void email_composer_create_cc_field(EmailComposerUGD *ugd) { debug_log(""); ugd->b_cc_bcc = true; Evas_Object *cc_layout; cc_layout = _composer_mbe_create_recipient_layout(ugd->c_layout, COMPOSER_RECIPIENT_TYPE_CC, ugd); elm_object_part_content_set(ugd->c_layout, "cc_field", cc_layout); ugd->cc_added = true; #ifdef _ALWAYS_CC_MYSELF if (ugd->account_info->account->options.add_my_address_to_bcc == EMAIL_ADD_MY_ADDRESS_OPTION_ALWAYS_ADD_TO_CC && ugd->composer_type != RUN_COMPOSER_EDIT) { EmailRecpInfo *ri = (EmailRecpInfo *) calloc(1, sizeof(EmailRecpInfo)); ri->selected_email_idx = 0; ri->display_name = ugd->account_info->account->user_display_name; snprintf(ri->email_list[0].email_addr, MAX_RECIPIENT_ADDRESS_LEN, "%s", ugd->account_info->account->user_email_address); ri->email_cnt = 1; ri->is_contact_info = false; ri->is_always_bcc = true; ri->is_from_addr = false; debug_log("display_name : %s", ri->display_name); debug_log("email_addr : %s", ri->email_list[0].email_addr); elm_multibuttonentry_item_append(ugd->cc_mbe, ri->display_name, NULL, (void *)ri); } #endif } void email_composer_delete_cc_field(EmailComposerUGD *ugd) { debug_log(""); ugd->b_cc_bcc = true; if (ugd->cc_added) { if (ugd->cc_ly) { evas_object_del(ugd->cc_ly); ugd->cc_ly = NULL; } if (ugd->cc_mbe) { evas_object_del(ugd->cc_mbe); ugd->cc_mbe = NULL; ugd->cc_mbe_entry = NULL; } ugd->cc_recipients_cnt = 0; } ugd->cc_added = false; } void email_composer_create_bcc_field(EmailComposerUGD *ugd) { debug_log(""); ugd->b_cc_bcc = true; Evas_Object *bcc_layout; bcc_layout = _composer_mbe_create_recipient_layout(ugd->c_layout, COMPOSER_RECIPIENT_TYPE_BCC, ugd); elm_object_part_content_set(ugd->c_layout, "bcc_field", bcc_layout); ugd->bcc_added = true; #ifdef _ALWAYS_CC_MYSELF if (ugd->account_info->account->options.add_my_address_to_bcc == EMAIL_ADD_MY_ADDRESS_OPTION_ALWAYS_ADD_TO_BCC && ugd->composer_type != RUN_COMPOSER_EDIT) { EmailRecpInfo *ri = (EmailRecpInfo *) calloc(1, sizeof(EmailRecpInfo)); ri->selected_email_idx = 0; ri->display_name = ugd->account_info->account->user_display_name; snprintf(ri->email_list[0].email_addr, MAX_RECIPIENT_ADDRESS_LEN, "%s", ugd->account_info->account->user_email_address); ri->email_cnt = 1; ri->is_contact_info = false; ri->is_always_bcc = true; ri->is_from_addr = false; debug_log("display_name : %s", ri->display_name); debug_log("email_addr : %s", ri->email_list[0].email_addr); elm_multibuttonentry_item_append(ugd->bcc_mbe, ri->display_name, NULL, (void *)ri); } #endif } void email_composer_delete_bcc_field(EmailComposerUGD *ugd) { debug_log(""); ugd->b_cc_bcc = true; if (ugd->bcc_added) { if (ugd->bcc_ly) { evas_object_del(ugd->bcc_ly); ugd->bcc_ly = NULL; } if (ugd->bcc_mbe) { evas_object_del(ugd->bcc_mbe); ugd->bcc_mbe = NULL; ugd->bcc_mbe_entry = NULL; } ugd->bcc_recipients_cnt = 0; } ugd->bcc_added = false; } void email_composer_create_from_field(EmailComposerUGD *ugd) { debug_log(""); Evas_Object *ly; Evas_Object *mbe; ly = _composer_mbe_create_recp_layout(ugd->c_layout); mbe = _composer_mbe_create_mbe(ly, COMPOSER_RECIPIENT_TYPE_FROM, ugd); ugd->from_ly = ly; ugd->from_mbe = mbe; ugd->from_mbe_entry = elm_multibuttonentry_entry_get(mbe); elm_entry_editable_set(ugd->from_mbe_entry, FALSE); elm_object_part_content_set(ly, "recipient.swallow", mbe); /* temporarily enable for unfocusing multibutton entry */ //_composer_register_mbe_callback(ugd->from_mbe, ugd); } void email_composer_delete_from_field(EmailComposerUGD *ugd) { debug_log(""); if (ugd->from_ly) { evas_object_del(ugd->from_ly); ugd->from_ly = NULL; } if (ugd->from_mbe) { evas_object_del(ugd->from_mbe); ugd->from_mbe = NULL; ugd->from_mbe_entry = NULL; } }