2 This file is part of Telegram application for tizen
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #include "tg_user_main_view.h"
20 #include "tg_start_messaging_view.h"
21 #include "tg_messaging_view.h"
22 #include "contact_selection_view.h"
23 #include "tg_search_peer_view.h"
24 #include "tg_settings_view.h"
25 #include "tg_db_manager.h"
26 #include "server_requests.h"
27 #include "tg_db_wrapper.h"
28 #include "tg_main_item_deletion_view.h"
29 #include "tg_search_message_view.h"
31 #define IMAGE_SIZE (36*1.4f)
34 static Evas_Object *create_image_object_from_file(const char *icon_name, Evas_Object *parent)
36 Evas_Object *icon = elm_image_add(parent);
37 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
38 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
39 elm_image_file_set(icon, icon_name, NULL);
40 evas_object_show(icon);
44 static char* on_menu_item_name_get_cb(void *data, Evas_Object *obj, const char *part)
46 if (!strcmp(part, "elm.text")) {
50 sprintf(temp_text, "<font=Tizen:style=Normal color=#000000 align=left><font_size=30>%s</font_size></font>", main_view_menu_items[id][0]);
52 return strdup(temp_text);
58 static Evas_Object* on_menu_item_image_get_cb(void *data, Evas_Object *obj, const char *part)
61 if (!strcmp(part, "elm.swallow.icon")) {
62 Evas_Object *img = elm_image_add(obj);
63 elm_image_file_set(img, ui_utils_get_resource(main_view_menu_items[id][1]), NULL);
64 evas_object_size_hint_min_set(img, ELM_SCALE_SIZE(IMAGE_SIZE), ELM_SCALE_SIZE(IMAGE_SIZE));
70 static void launch_contact_picker(appdata_s* ad)
72 app_control_h app_control;
73 int ret = app_control_create(&app_control);
75 app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE);
76 //app_control_set_app_id(app_control, "tizen.messages");
77 //app_control_add_extra_data(app_control, APP_CONTROL_DATA_TO, recipient);
78 app_control_set_mime(app_control, "text/html");
79 char *text = "Invite you to telegram! https://telegram.org/dl";
80 app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, text);
81 if (app_control_send_launch_request(app_control, NULL, NULL) == APP_CONTROL_ERROR_NONE) {
84 app_control_destroy(app_control);
87 static void on_menu_item_selected(void *data, Evas_Object *obj, void *event_info)
89 //int index __attribute__((unused)) = (int)data;
90 appdata_s* ad = evas_object_data_get(obj, "app_data");
92 if (id == 0) { // new group
93 launch_contact_selction_view(ad);
94 } else if (id == 1) { // new sec chat
96 } else if (id == 2) { // contacts
97 launch_start_messaging_view(ad);
98 } else if (id == 3) { // invite friends
99 launch_contact_picker(ad);
100 } else if (id == 4) { // settings
101 launch_settings_screen(ad);
105 elm_panel_hidden_set(ad->panel, EINA_TRUE);
108 static void on_menu_list_clicked_cb(void *data, Evas_Object *obj, void *event_info)
110 Elm_Object_Item *it = event_info;
111 elm_genlist_item_selected_set(it, EINA_FALSE);
114 Evas_Object* create_side_panel_list(appdata_s* ad, Evas_Object *parent)
117 char edj_path[PATH_MAX] = {0, };
118 app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
120 Evas_Object* scroller = elm_scroller_add(ad->nf);
121 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
122 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
124 Evas_Object* layout = elm_layout_add(ad->nf);
125 elm_layout_file_set(layout, edj_path, "user_main_screen_side_panel");
126 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
127 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
128 evas_object_show(layout);
129 elm_object_content_set(scroller, layout);
132 Evas_Object* user_info_layout = elm_layout_add(ad->nf);
133 elm_layout_file_set(user_info_layout, edj_path, "menu_user_layout");
134 evas_object_size_hint_weight_set(user_info_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
135 evas_object_size_hint_align_set(user_info_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
136 evas_object_show(user_info_layout);
137 elm_object_part_content_set(layout, "main_box", user_info_layout);
139 Evas_Object *profile_pic = NULL;
140 /*********** user info ********************/
141 if (ad->current_user_data->photo_path && strlen(ad->current_user_data->photo_path) > 0 && strstr(ad->current_user_data->photo_path, "_null_") == NULL) {
142 profile_pic = create_image_object_from_file(ad->current_user_data->photo_path, ad->nf);
144 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), ad->nf);
147 Evas_Object *user_pic_layout = elm_layout_add(ad->nf);
148 elm_layout_file_set(user_pic_layout, edj_path, "main_circle_layout");
149 evas_object_size_hint_weight_set(user_pic_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
150 evas_object_size_hint_align_set(user_pic_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
151 evas_object_show(user_pic_layout);
152 elm_object_part_content_set(user_pic_layout, "content", profile_pic);
154 elm_object_part_content_set(user_info_layout, "user_photo_box", user_pic_layout);
156 evas_object_data_set(ad->nf, "main_user_profile_pic", profile_pic);
159 char* full_name = NULL;
161 if (ad->current_user_data.first_name && ad->current_user_data.last_name) {
162 full_name =(char*)malloc(strlen(ad->current_user_data.first_name) + strlen("") + strlen(ad->current_user_data.last_name) + 1);
163 strcpy(full_name, ad->current_user_data.first_name);
164 strcat(full_name, "");
165 strcat(full_name, ad->current_user_data.last_name);
166 } else if (ad->current_user_data.first_name) {
167 full_name =(char*)malloc(strlen(ad->current_user_data.first_name) + strlen("") + strlen(ad->current_user_data.last_name) + 1);
168 strcpy(full_name, ad->current_user_data.first_name);
169 strcat(full_name, "");
170 strcat(full_name, ad->current_user_data.last_name);
173 if (ad->current_user_data->print_name) {
174 full_name = replace(ad->current_user_data->print_name, '_', " ");
176 full_name = strdup("");
180 char* phone_no = NULL;
181 if (ad->current_user_data->phone) {
182 phone_no = (char*)malloc(strlen(ad->current_user_data->phone) + strlen("+") + 1);
183 strcpy(phone_no, "+");
184 strcat(phone_no, ad->current_user_data->phone);
186 phone_no = strdup("");
189 char temp_full_name[256];
190 sprintf(temp_full_name, "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", full_name);
193 char temp_phone_no[256];
194 sprintf(temp_phone_no, "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", phone_no);
197 Evas_Object* user_name = elm_label_add(ad->nf);
198 elm_object_text_set(user_name, temp_full_name);
199 elm_label_ellipsis_set(user_name, EINA_TRUE);
200 evas_object_show(user_name);
201 elm_object_part_content_set(user_info_layout, "user_name_box", user_name);
203 Evas_Object* phone_no_lbl = elm_label_add(ad->nf);
204 elm_object_text_set(phone_no_lbl, temp_phone_no);
205 elm_label_ellipsis_set(phone_no_lbl, EINA_TRUE);
206 evas_object_show(phone_no_lbl);
207 elm_object_part_content_set(user_info_layout, "phone_number_box", phone_no_lbl);
214 /*********** user info ********************/
217 Evas_Object* menu_gen_list = elm_genlist_add(parent);
218 elm_list_mode_set(menu_gen_list, ELM_LIST_COMPRESS);
219 elm_genlist_mode_set(menu_gen_list, ELM_LIST_COMPRESS);
220 evas_object_size_hint_weight_set(menu_gen_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221 evas_object_size_hint_align_set(menu_gen_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
223 evas_object_data_set(menu_gen_list, "app_data", ad);
225 static Elm_Genlist_Item_Class itc;
226 itc.item_style = "type1";
227 itc.func.text_get = on_menu_item_name_get_cb;
228 itc.func.content_get = on_menu_item_image_get_cb;
229 itc.func.state_get = NULL;
232 for (int i = 0; i < NUMBER_OF_MENU_ITEMS; i++) {
233 elm_genlist_item_append(menu_gen_list, &itc, (void *)i, NULL, ELM_GENLIST_ITEM_NONE, on_menu_item_selected, (void*)i);
235 evas_object_show(menu_gen_list);
236 elm_object_part_content_set(layout, "options_box", menu_gen_list);
237 evas_object_smart_callback_add(menu_gen_list, "selected", on_menu_list_clicked_cb, ad);
243 void on_side_panel_scroll_clicked(void *data, Evas_Object *obj, void *event_info)
245 Elm_Panel_Scroll_Info *ev = event_info;
246 Evas_Object *bg = data;
247 int col = 127 * ev->rel_x;
248 evas_object_color_set(bg, 0, 0, 0, col);
251 void on_side_list_back_clicked(void *data, Evas_Object *obj, void *event_info)
253 Evas_Object *panel = data;
254 elm_panel_hidden_set(panel, EINA_TRUE);
257 Evas_Object* create_side_panel(Evas_Object *parent)
259 Evas_Object *panel, *bg;
261 panel = elm_panel_add(parent);
262 elm_panel_scrollable_set(panel, EINA_TRUE);
263 elm_panel_hidden_set(panel, EINA_TRUE);
264 elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
266 bg = evas_object_rectangle_add(evas_object_evas_get(parent));
267 evas_object_color_set(bg, 0, 0, 0, 0);
268 elm_object_part_content_set(parent, "elm.swallow.bg", bg);
269 evas_object_show(bg);
271 evas_object_smart_callback_add(panel, "scroll", on_side_panel_scroll_clicked, bg);
272 evas_object_show(panel);
277 void on_side_panel_clicked(void *data, Evas_Object *obj, void *event_info)
279 appdata_s *ad = data;
280 Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
281 if (it == NULL) return;
282 elm_object_item_part_text_set(elm_naviframe_top_item_get(ad->nf), NULL, elm_object_item_part_text_get(it, "default"));
283 elm_list_item_selected_set(it, EINA_FALSE);
287 void create_side_main_view(appdata_s *ad)
289 ad->panel = create_side_panel(ad->layout);
290 elm_object_part_content_set(ad->layout, "elm.swallow.left", ad->panel);
291 Evas_Object *panel_list = create_side_panel_list(ad, ad->panel);
292 evas_object_size_hint_weight_set(panel_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
293 evas_object_size_hint_align_set(panel_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
294 evas_object_smart_callback_add(panel_list, "selected", on_side_panel_clicked, ad);
295 eext_object_event_callback_add(panel_list, EEXT_CALLBACK_BACK, on_side_list_back_clicked, ad->panel);
296 elm_object_content_set(ad->panel, panel_list);
297 evas_object_data_set(ad->panel, "panel_list", panel_list);
301 void on_side_panel_requested(void *data, Evas_Object * obj, void *event_info)
303 appdata_s *ad = data;
308 if (ad->current_app_state == TG_USER_MAIN_VIEW_STATE) {
310 if (ad->panel == NULL) {
311 create_side_main_view(ad);
313 if (!elm_object_disabled_get(ad->panel))
314 elm_panel_toggle(ad->panel);
320 /******************** long press menu *******************************************/
323 char* on_longpress_group_menu_text_get_cb(void *data, Evas_Object *obj, const char *part)
327 return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3"));
329 return strdup(i18n_get_text("IDS_TGRAM_OPT_LEAVE_CHAT"));
333 char* on_longpress_single_menu_text_get_cb(void *data, Evas_Object *obj, const char *part)
337 return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3"));
339 return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE"));
343 /******************** long press menu *******************************************/
344 void on_chat_long_press_option_selected_cb(void *data, Evas_Object *obj, void *event_info)
346 Evas_Object *popup = data;
347 appdata_s *ad = (appdata_s*)evas_object_data_get(popup, "app_data");
348 tg_main_list_item_s *sel_item = (tg_main_list_item_s*)evas_object_data_get(popup, "selected_chat_item");
349 int item_id = (int)evas_object_data_get(popup, "selected_chat_item_index");
351 Elm_Object_Item *it = event_info;
352 elm_genlist_item_selected_set(it, EINA_FALSE);
353 int id = (int)elm_object_item_data_get(it);
356 if (sel_item->peer_type == TGL_PEER_USER || sel_item->peer_type == TGL_PEER_CHAT) {
357 char* tablename = get_table_name_from_number(sel_item->peer_id);
358 delete_all_records(tablename);
361 //change item in list
362 sel_item->last_message = strdup("");
363 sel_item->last_msg_id = -1;
364 sel_item->last_msg_type = -1;
365 sel_item->is_out_msg = -1;
366 sel_item->last_msg_status = -1;
367 sel_item->number_of_unread_msgs = 0;
369 if (sel_item->status_lbl) {
371 elm_object_text_set(sel_item->status_lbl, org_msg);
373 if (sel_item->date_lbl) {
374 Eina_Bool is_today = compare_date_with_current_date(sel_item->last_seen_time);
377 elm_object_text_set(sel_item->date_lbl, "<font=Tizen:style=Normal color=#000000 align=center><font_size=25>Today</font_size></font>");
380 time_t t = sel_item->last_seen_time;
384 (void) localtime_r(&t, <);
386 if (strftime(res, sizeof(res), format, <) == 0) {
387 (void) fprintf(stderr, "strftime(3): cannot format supplied "
388 "date/time into buffer of size %u "
390 sizeof(res), format);
393 char time_str[256] = {0,};
394 snprintf(time_str, sizeof(time_str), "<font=Tizen:style=Normal color=#000000 align=center><font_size=25>%s</font_size></font>", res);
396 elm_object_text_set(sel_item->date_lbl, time_str);
400 if (sel_item->msg_status_lbl) {
401 Evas_Object* temp_lbl = elm_object_part_content_get(sel_item->msg_status_lbl, "swallow.status");
403 evas_object_del(temp_lbl);
405 Evas_Object* num_lbl = elm_label_add(ad->nf);
406 elm_object_style_set(num_lbl, "transparent");
407 elm_object_text_set(num_lbl, "");
408 evas_object_size_hint_weight_set(num_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
409 evas_object_size_hint_align_set(num_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
410 evas_object_show(num_lbl);
411 elm_object_part_content_set(sel_item->msg_status_lbl, "swallow.status", num_lbl);
414 Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
416 elm_genlist_realized_items_update(buddy_list);
423 } else if (id == 1) {
424 if (sel_item->peer_type == TGL_PEER_USER) {
425 char* tablename = get_table_name_from_number(sel_item->peer_id);
426 delete_all_records(tablename);
429 // delete from main list
431 if (sel_item->peer_print_name) {
432 free(sel_item->peer_print_name);
433 sel_item->peer_print_name = NULL;
435 if (sel_item->last_message) {
436 free(sel_item->last_message);
437 sel_item->last_message = NULL;
439 if (sel_item->profile_pic_path) {
440 free(sel_item->profile_pic_path);
441 sel_item->profile_pic_path = NULL;
443 sel_item->date_lbl = NULL;
444 sel_item->msg_status_lbl = NULL;
445 sel_item->main_item_layout = NULL;
446 sel_item->profile_pic = NULL;
447 sel_item->profile_pic_path = NULL;
448 sel_item->status_lbl = NULL;
449 sel_item->user_name_lbl = NULL;
452 ad->main_list = eina_list_remove(ad->main_list, sel_item);
453 refresh_main_list_view(ad, EINA_FALSE);
455 } else if (sel_item->peer_type == TGL_PEER_CHAT) {
457 //send group chat delete request
458 show_loading_popup(ad);
459 send_delete_group_chat_request(ad, ad->service_client, sel_item->peer_id);
467 evas_object_del(popup);
471 static void on_buddy_list_longpress(void *data, Evas_Object *obj, void *event_info)
473 appdata_s *ad = data;
474 Elm_Object_Item *it = event_info;
475 elm_genlist_item_selected_set(it, EINA_FALSE);
477 int item_id = (int)elm_object_item_data_get(it);
478 tg_main_list_item_s *sel_item = eina_list_nth(ad->main_list, item_id);
481 static Elm_Genlist_Item_Class itc;
484 Evas_Object *genlist;
486 Evas_Object *win = ad->win;
488 popup = elm_popup_add(win);
489 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
490 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
491 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
493 evas_object_data_set(popup, "app_data", ad);
494 evas_object_data_set(popup, "selected_chat_item", (void*)sel_item);
495 evas_object_data_set(popup, "selected_chat_item_index", (void*)item_id);
498 genlist = elm_genlist_add(popup);
499 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
500 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
502 itc.item_style = "default";
505 if (sel_item->peer_type == TGL_PEER_USER) {
506 itc.func.text_get = on_longpress_single_menu_text_get_cb;
507 } else if (sel_item->peer_type == TGL_PEER_CHAT) {
508 itc.func.text_get = on_longpress_group_menu_text_get_cb;
513 itc.func.content_get = NULL;
514 itc.func.state_get = NULL;
517 for (i = 0; i < 2; i++) {
518 elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_chat_long_press_option_selected_cb, popup);
520 evas_object_show(genlist);
521 elm_object_content_set(popup, genlist);
522 evas_object_show(popup);
526 void on_main_chat_item_selected(void *data, Evas_Object *obj, void *event_info)
528 Elm_Object_Item *it = event_info;
529 elm_genlist_item_selected_set(it, EINA_FALSE);
531 //int item_id = (int) data;
532 int item_id = (int)elm_object_item_data_get(it);
534 appdata_s* ad = evas_object_data_get(obj, "app_data");
536 tg_main_list_item_s* sel_item = eina_list_nth(ad->main_list, item_id);
538 ad->buddy_in_cahtting_data = NULL;
539 ad->peer_in_cahtting_data = NULL;
543 if (sel_item->peer_type == TGL_PEER_CHAT) {
545 tg_chat_info_s* chat_info = get_chat_info(sel_item->peer_id);
546 if (!chat_info || (chat_info && chat_info->user_list_size <= 0)) {
548 //show_toast(ad, "Loading chat info. Please wait.");
549 show_loading_popup(ad);
550 send_update_chat_request(ad, ad->service_client, sel_item->peer_id);
555 if (sel_item->peer_type == TGL_PEER_USER) {
556 for (int i = 0; i < eina_list_count(ad->buddy_list); i++) {
557 user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
558 user_data_s* user_data = item->use_data;
560 if (user_data->user_id.id == sel_item->peer_id) {
561 ad->buddy_in_cahtting_data = item;
566 if (ad->buddy_in_cahtting_data == NULL) {
567 for (int i = 0; i < eina_list_count(ad->unknown_buddy_list); i++) {
568 user_data_with_pic_s *item = eina_list_nth(ad->unknown_buddy_list, i);
569 user_data_s* user_data = item->use_data;
571 if (user_data->user_id.id == sel_item->peer_id) {
572 ad->buddy_in_cahtting_data = item;
579 for (int i = 0; i < eina_list_count(ad->peer_list); i++) {
580 peer_with_pic_s* pic_item = eina_list_nth(ad->peer_list, i);
581 tg_peer_info_s* item = pic_item->use_data;
583 if (item->peer_id == sel_item->peer_id) {
584 ad->peer_in_cahtting_data = pic_item;
590 if (buddy_id == -1) {
592 for (int i = 0; i < eina_list_count(ad->peer_list); i++) {
593 peer_with_pic_s* pic_item = eina_list_nth(ad->peer_list, i);
594 tg_peer_info_s* item = pic_item->use_data;
596 if (item->peer_id == sel_item->peer_id) {
597 ad->peer_in_cahtting_data = pic_item;
604 if (buddy_id == -1) {
605 show_toast(ad, "unable to get buddy info.");
606 ad->buddy_in_cahtting_data = NULL;
607 ad->peer_in_cahtting_data = NULL;
611 ad->main_item_in_cahtting_data = sel_item;
614 Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
616 evas_object_del(panel_list);
618 evas_object_del(ad->panel);
622 delete_floating_button(ad);
623 launch_messaging_view_cb(ad, buddy_id);
627 void on_buddy_icon_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
629 tg_main_list_item_s *item = data;
630 item->profile_pic = NULL;
633 void on_buddy_date_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
635 tg_main_list_item_s *item = data;
636 item->date_lbl = NULL;
639 void on_buddy_main_item_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
641 tg_main_list_item_s *item = data;
642 item->main_item_layout = NULL;
645 void on_buddy_msg_status_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
647 tg_main_list_item_s *item = data;
648 item->msg_status_lbl = NULL;
652 void on_buddy_user_status_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
654 tg_main_list_item_s *item = data;
655 item->status_lbl = NULL;
658 static Evas_Object *on_chat_item_load_requested(void *data, Evas_Object *obj, const char *part)
661 appdata_s* ad = evas_object_data_get(obj, "app_data");
662 if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
665 tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
670 Eina_Bool is_empty_msg = EINA_FALSE;
672 if (item->main_item_layout) {
673 return item->main_item_layout;
676 char edj_path[PATH_MAX] = {0, };
677 app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
679 if (!strcmp(part, "elm.swallow.icon")) {
680 if (item->profile_pic == NULL) {
681 Evas_Object *profile_pic = NULL;
682 if (item->profile_pic_path && strcmp(item->profile_pic_path, "") != 0) {
683 profile_pic = elm_image_add(obj);
684 evas_object_size_hint_weight_set(profile_pic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
685 evas_object_size_hint_align_set(profile_pic, EVAS_HINT_FILL, EVAS_HINT_FILL);
686 elm_object_focus_set(profile_pic, EINA_FALSE);
688 Eina_Bool is_success = elm_image_file_set(profile_pic, item->profile_pic_path, NULL);
691 if (item->peer_type == TGL_PEER_USER) {
692 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
693 // send download request again To-Do
694 } else if (item->peer_type == TGL_PEER_CHAT) {
695 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
696 // send download request again To-Do
700 evas_object_color_set(profile_pic, 45, 165, 224, 255);
702 evas_object_show(profile_pic);
705 if (item->peer_type == TGL_PEER_USER) {
706 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
707 } else if (item->peer_type == TGL_PEER_CHAT) {
708 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
712 evas_object_color_set(profile_pic, 45, 165, 224, 255);
715 item->profile_pic = profile_pic;
716 evas_object_event_callback_add(item->profile_pic, EVAS_CALLBACK_DEL, on_buddy_icon_deleted, item);
719 Evas_Object* user_pic_layout = elm_layout_add(ad->nf);
720 elm_layout_file_set(user_pic_layout, edj_path, "circle_layout");
721 evas_object_size_hint_weight_set(user_pic_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
722 evas_object_size_hint_align_set(user_pic_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
723 evas_object_size_hint_min_set(user_pic_layout, 98, 98);
724 evas_object_show(user_pic_layout);
725 elm_object_part_content_set(user_pic_layout, "content", item->profile_pic);
727 return user_pic_layout;
728 } else if (!strcmp(part, "elm.swallow.end")) {
729 Evas_Object* item_layout = elm_layout_add(ad->nf);
730 elm_layout_file_set(item_layout, edj_path, "main_list_date");
732 evas_object_size_hint_weight_set(item_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
733 evas_object_size_hint_align_set(item_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
734 evas_object_show(item_layout);
736 Eina_Bool is_today = compare_date_with_current_date(item->last_seen_time);
737 Evas_Object* time_lbl = elm_label_add(ad->nf);
739 //elm_object_text_set(time_lbl, "<font=Tizen:style=Normal color=#000000 align=left><font_size=27>Today</font_size></font>");
740 // get time to display
743 time_t t = item->last_seen_time;
746 char res[28] = {'\0'};
747 (void) localtime_r(&t, <);
749 if (strftime(res, sizeof(res), format, <) == 0) {
750 (void) fprintf(stderr, "strftime(3): cannot format supplied "
751 "date/time into buffer of size %u "
753 sizeof(res), format);
756 char time_str[128] = {0,};
757 sprintf(time_str, "<font=Tizen:style=Regular color=#666666 align=right><font_size=30>%s</font_size></font>", res);
759 elm_object_text_set(time_lbl, time_str);
762 time_t t = item->last_seen_time;
765 char res[28] = {'\0'};
766 (void) localtime_r(&t, <);
768 if (strftime(res, sizeof(res), format, <) == 0) {
769 (void) fprintf(stderr, "strftime(3): cannot format supplied "
770 "date/time into buffer of size %u "
772 sizeof(res), format);
775 char time_str[128] = {0, };
776 sprintf(time_str, "<font=Tizen:style=Regular color=#666666 align=right><font_size=30>%s</font_size></font>", res);
778 elm_object_text_set(time_lbl, time_str);
781 evas_object_size_hint_weight_set(time_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
782 evas_object_size_hint_align_set(time_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
783 evas_object_show(time_lbl);
785 item->date_lbl = time_lbl;
786 evas_object_event_callback_add(item->date_lbl, EVAS_CALLBACK_DEL, on_buddy_date_deleted, item);
788 elm_object_part_content_set(item_layout, "swallow.date", time_lbl);
790 /*************************** date ***************************************/
792 /*************************** sent message status ***************************************/
794 if (item->is_out_msg && !(item->last_msg_service)) {
796 Evas_Object *status_obj;
797 status_obj = elm_icon_add(obj);
798 evas_object_size_hint_weight_set(status_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
799 evas_object_size_hint_align_set(status_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
801 if (item->last_msg_status == TG_MESSAGE_STATE_SENDING) {
802 elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENDING_ICON), NULL);
803 } else if (item->last_msg_status == TG_MESSAGE_STATE_SENT) {
804 elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENT_ICON), NULL);
805 } else if (item->last_msg_status == TG_MESSAGE_STATE_DELIVERED) {
806 elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_DELIVERED_ICON), NULL);
807 } else if (item->last_msg_status == TG_MESSAGE_STATE_RECEIVED) {
809 } else if (item->last_msg_status == TG_MESSAGE_STATE_FAILED) {
810 elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_FAILED_ICON), NULL);
811 } else if (item->last_msg_status == TG_MESSAGE_STATE_READ) {
812 elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_READ_ICON), NULL);
813 } else if (item->last_msg_status == TG_MESSAGE_STATE_UNKNOWN) {
817 Evas_Object *msg_status = elm_layout_add(ad->nf);
818 elm_layout_file_set(msg_status, edj_path, "status_bg_layout");
819 evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
820 evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
821 evas_object_show(msg_status);
822 elm_object_part_content_set(msg_status, "content", status_obj);
824 evas_object_color_set(status_obj, 75, 96, 178, 255);
825 elm_object_part_content_set(item_layout, "swallow.read_unread_status", status_obj);
828 if (item->number_of_unread_msgs > 0) {
829 char unread_msgs[256];
830 sprintf(unread_msgs, "%d", item->number_of_unread_msgs);
832 Evas_Object* msg_status = elm_layout_add(ad->nf);
833 elm_layout_file_set(msg_status, edj_path, "count_bg_layout");
834 evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
835 evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
836 evas_object_show(msg_status);
837 elm_object_part_text_set(msg_status, "content", unread_msgs);
838 elm_object_part_content_set(item_layout, "swallow.unread_count", msg_status);
848 static char* on_chat_text_load_requested(void *data, Evas_Object *obj, const char *part)
851 appdata_s* ad = evas_object_data_get(obj, "app_data");
852 if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
855 tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
860 if (!strcmp(part, "elm.text")) {
861 char* user_name = str_replace(item->buddy_display_name, "_null_", "");
862 char buf[512] = {'\0'};
863 snprintf(buf, 512, "<font=Tizen:style=Large color=#000000 align=left><font_size=40>%s</font_size></font>", user_name);
867 } else if (!strcmp(part, "elm.text.sub")) {
868 char* org_msg = NULL;
869 if (item->last_message) {
870 org_msg = str_replace(item->last_message, "<br/>", " ");
872 org_msg = strdup("");
875 char status_buf[126] = {'\0'};
876 if (item->last_msg_service) {
877 snprintf(status_buf, 125, "<font=Tizen:style=Bold color=#158CB0 align=left><font_size=28>%s</font_size></font>", org_msg);
879 snprintf(status_buf, 125, "<font=Tizen:style=Bold color=#A4A4A4 align=left><font_size=28>%s</font_size></font>", org_msg);
883 return strdup(status_buf);
888 void reload_main_list_view(appdata_s* ad)
890 Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
892 elm_genlist_clear(buddy_list);
895 static Elm_Genlist_Item_Class itc;
896 itc.item_style = "type1";
897 itc.func.text_get = on_chat_text_load_requested;
898 itc.func.content_get = on_chat_item_load_requested;
899 itc.func.state_get = NULL;
902 int size = eina_list_count(ad->main_list);
904 for (i = 0; i < size; i++) {
905 elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_chat_item_selected, (void*) i);
909 elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_chat_item_selected, (void*) i);
911 evas_object_show(buddy_list);
916 void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item)
918 Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
921 static Elm_Genlist_Item_Class itc;
922 itc.item_style = "type1";
923 itc.func.text_get = on_chat_text_load_requested;
924 itc.func.content_get = on_chat_item_load_requested;
925 itc.func.state_get = NULL;
928 int size = eina_list_count(ad->main_list);
930 elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
932 elm_genlist_clear(buddy_list);
934 static Elm_Genlist_Item_Class itc;
935 itc.item_style = "type1";
936 itc.func.text_get = on_chat_text_load_requested;
937 itc.func.content_get = on_chat_item_load_requested;
938 itc.func.state_get = NULL;
943 int size = eina_list_count(ad->main_list);
945 for (i = 0; i < size; i++) {
946 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
950 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
954 elm_genlist_realized_items_update(buddy_list);
957 int size = eina_list_count(ad->main_list);
960 Evas_Object* layout = evas_object_data_get(ad->nf, "no_chat_image");
962 elm_object_signal_emit(layout, "no_chat_hide", "no_chat_text");
966 static Elm_Genlist_Item_Class itc;
967 Evas_Object *buddy_list = elm_genlist_add(ad->nf);
968 elm_genlist_mode_set(buddy_list, ELM_LIST_COMPRESS);
969 evas_object_size_hint_weight_set(buddy_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
970 evas_object_size_hint_align_set(buddy_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
971 evas_object_data_set(buddy_list, "app_data", ad);
973 itc.item_style = "type1";
974 itc.func.text_get = on_chat_text_load_requested;
975 itc.func.content_get = on_chat_item_load_requested;
976 itc.func.state_get = NULL;
979 int size = eina_list_count(ad->main_list);
981 for (i = 0; i < size; i++) {
982 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
986 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
988 evas_object_show(buddy_list);
989 evas_object_data_set(ad->nf, "buddy_list", buddy_list);
994 static void on_user_list_search_clicked(void *data, Evas_Object *obj, void *event_info)
996 appdata_s* ad = data;
999 Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
1001 evas_object_del(panel_list);
1003 evas_object_del(ad->panel);
1007 delete_floating_button(ad);
1008 launch_start_peer_search_view(ad);
1011 static void on_search_icon_pressed(void *data, Evas_Object *obj, void *event_info)
1013 elm_image_file_set(data, ui_utils_get_resource(TG_SEARCH_PRESSED_ICON), NULL);
1016 static void on_search_icon_unpressed(void *data, Evas_Object *obj, void *event_info)
1018 elm_image_file_set(data, ui_utils_get_resource(TG_SEARCH_ICON), NULL);
1021 static void _more_popup_rotate(void *data, Evas_Object *obj, void *event_info)
1025 appdata_s *ad = data;
1027 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
1028 pos = elm_win_rotation_get(ad->win);
1033 evas_object_move(ad->menu_popup, 0, w);
1037 evas_object_move(ad->menu_popup, 0, h);
1042 static void _ctxpopup_dismiss_cb(void *data, Evas_Object *obj, void *event_info)
1044 appdata_s *ad = data;
1045 evas_object_del(ad->menu_popup);
1046 ad->menu_popup = NULL;
1049 static void _ctxpopup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
1051 appdata_s *ad = data;
1059 LOGE("window is NULL");
1062 evas_object_smart_callback_del(ad->win, "rotation,changed", _more_popup_rotate);
1063 if (ad->menu_popup) {
1064 evas_object_smart_callback_del(ad->menu_popup, "dismissed", _ctxpopup_dismiss_cb);
1065 evas_object_del(ad->menu_popup);
1066 ad->menu_popup = NULL;
1070 static void ctxpopup_delete_select_cb(void *data, Evas_Object *obj, void *event_info)
1072 appdata_s *ad = data;
1078 _ctxpopup_dismiss_cb(ad, NULL, NULL);
1080 launch_main_item_deletion_view_cb(ad);
1083 static void ctxpopup_search_select_cb(void *data, Evas_Object *obj, void *event_info)
1085 appdata_s *ad = data;
1090 delete_floating_button(ad);
1091 _ctxpopup_dismiss_cb(ad, NULL, NULL);
1093 /* please input here when search menu is clicked */
1094 launch_search_message_view(ad);
1097 static void ctxpopup_contact_select_cb(void *data, Evas_Object *obj, void *event_info)
1099 appdata_s *ad = data;
1105 _ctxpopup_dismiss_cb(ad, NULL, NULL);
1106 on_floating_icon_clicked(data, obj, event_info);
1107 /* please input here when contact menu is clicked */
1110 static void ctxpopup_settings_select_cb(void *data, Evas_Object *obj, void *event_info)
1112 appdata_s *ad = data;
1118 _ctxpopup_dismiss_cb(ad, NULL, NULL);
1119 delete_floating_button(ad);
1120 launch_settings_screen(ad);
1123 static void _create_more_popup(void *data, Evas_Object *obj, void *event_info)
1125 Elm_Object_Item *it;
1126 Evas_Object *ctxpopup;
1127 appdata_s *ad = data;
1134 if (ad->current_app_state != TG_USER_MAIN_VIEW_STATE) {
1138 ctxpopup = elm_ctxpopup_add(ad->nf);
1139 elm_object_style_set(ctxpopup, "more/default");
1140 elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
1141 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK, eext_ctxpopup_back_cb, NULL);
1142 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE, eext_ctxpopup_back_cb, NULL);
1143 evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, _ctxpopup_del_cb, ad);
1145 evas_object_smart_callback_add(ctxpopup, "dismissed", _ctxpopup_dismiss_cb, ad);
1146 evas_object_smart_callback_add(ad->win, "rotation,changed", _more_popup_rotate, ad);
1148 it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_DELETE"), NULL, ctxpopup_delete_select_cb, ad);
1149 it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_SEARCH"), NULL, ctxpopup_search_select_cb, ad);
1150 it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_CONTACTS"), NULL, ctxpopup_contact_select_cb, ad);
1151 it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_SETTINGS"), NULL, ctxpopup_settings_select_cb, ad);
1152 //elm_object_item_domain_text_translatable_set(it, SETTING_PACKAGE, EINA_TRUE);
1153 elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
1155 if (ad->menu_popup) {
1156 evas_object_del(ad->menu_popup);
1159 ad->menu_popup = ctxpopup;
1161 _more_popup_rotate(ad, NULL, NULL);
1163 evas_object_show(ctxpopup);
1167 void launch_user_main_view_cb(appdata_s* ad)
1174 Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
1176 evas_object_del(panel_list);
1178 evas_object_del(ad->panel);
1182 ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
1183 ad->is_tg_initilized = EINA_TRUE;
1184 char edj_path[PATH_MAX] = {0, };
1185 app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
1186 send_request_for_server_connection_status(ad, ad->service_client);
1187 send_request_for_delete_notifications(ad, ad->service_client);
1189 Evas_Object* layout = elm_layout_add(ad->nf);
1190 elm_layout_file_set(layout, edj_path, "user_main_screen_new");
1191 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1192 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1193 evas_object_show(layout);
1195 Evas_Object *buddy_list = NULL;
1197 if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
1198 elm_object_part_text_set(layout, "no_chat_text", i18n_get_text("IDS_TGRAM_NPBODY_NO_CHATS"));
1199 elm_object_part_text_set(layout, "explain_text", i18n_get_text("IDS_TGRAM_BODY_TO_START_A_NEW_CONVERSATION_TAP_THE_CREATE_NEW_GROUP_BUTTON_IN_THE_BOTTOM_RIGHT_OR_PRESS_THE_MENU_KEY_FOR_MORE_OPTIONS"));
1200 elm_object_signal_emit(layout, "no_chat_show", "no_chat_text");
1202 evas_object_data_set(ad->nf, "no_chat_image", layout);
1205 static Elm_Genlist_Item_Class itc;
1206 buddy_list = elm_genlist_add(ad->nf);
1207 elm_genlist_mode_set(buddy_list, ELM_LIST_COMPRESS);
1208 evas_object_size_hint_weight_set(buddy_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1209 evas_object_size_hint_align_set(buddy_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
1210 evas_object_data_set(buddy_list, "app_data", ad);
1211 elm_genlist_homogeneous_set(buddy_list, EINA_TRUE);
1213 itc.item_style = "type1";
1214 itc.func.text_get = on_chat_text_load_requested;
1215 itc.func.content_get = on_chat_item_load_requested;
1216 itc.func.state_get = NULL;
1217 itc.func.del = NULL;
1219 int size = eina_list_count(ad->main_list);
1221 for (i = 0; i < size; i++) {
1222 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
1226 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
1228 evas_object_show(buddy_list);
1229 evas_object_data_set(ad->nf, "buddy_list", buddy_list);
1231 evas_object_smart_callback_add(buddy_list, "longpressed", on_buddy_list_longpress, ad);
1232 evas_object_smart_callback_add(buddy_list, "selected", on_main_chat_item_selected, ad);
1233 elm_object_part_content_set(layout, "main_box", buddy_list);
1236 create_floating_button(ad);
1238 Evas_Object* search_layout = elm_layout_add(ad->nf);
1239 elm_layout_file_set(search_layout, edj_path, "title_search_layout");
1240 evas_object_size_hint_weight_set(search_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1241 evas_object_size_hint_align_set(search_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1242 evas_object_show(search_layout);
1244 Evas_Object *search_btn = elm_button_add(layout);
1245 elm_object_style_set(search_btn, "transparent");
1246 evas_object_size_hint_align_set(search_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
1247 evas_object_size_hint_weight_set(search_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1250 Evas_Object *search_icon = elm_image_add(layout);
1251 elm_image_file_set(search_icon, ui_utils_get_resource(TG_SEARCH_ICON), NULL);
1252 evas_object_show(search_icon);
1254 elm_object_content_set(search_btn, search_icon);
1256 elm_object_part_content_set(search_layout, "search_box", search_btn);
1257 evas_object_smart_callback_add(search_btn, "clicked", on_user_list_search_clicked, ad);
1258 evas_object_smart_callback_add(search_btn, "pressed", on_search_icon_pressed, search_icon);
1259 evas_object_smart_callback_add(search_btn, "unpressed", on_search_icon_unpressed, search_icon);
1262 ad->main_item = elm_naviframe_item_push(ad->nf, i18n_get_text("IDS_TGRAM_HEADER_TELEGRAM"), NULL, NULL, layout, NULL);
1265 Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "<font=Tizen:style=Bold color=#ffffff align=center><font_size=48>Telegram</font_size></font>", NULL, NULL, scroller, NULL);
1266 elm_object_item_part_content_set(navi_item, "title_right_btn", search_layout);
1267 /* left panel toggle button */
1268 Evas_Object *panel_btn = create_button(ad->nf, "naviframe/drawers", NULL);
1269 evas_object_smart_callback_add(panel_btn, "clicked", on_side_panel_requested, ad);
1270 elm_object_item_part_content_set(navi_item, "title_left_btn", panel_btn);
1273 // eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, on_messaging_menu_button_clicked, ad);
1275 eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, _create_more_popup, ad);