#include #include #include "Evas.h" #include "Ecore.h" #include "Elementary.h" #include "render/line.h" #include "msg_sender.h" #include "receiver.h" #include "gui.h" #include "handler.h" #include "sender.h" #include "draw_user.h" #include "barcode.h" int h= 600; int w = 450; int first = 0; int bubble_pos = 100; int enable_chat = 0; double current_lat = 47.996578; double current_lon = 7.840171; const char *msg_text, *key, *ip = NULL, *nickname = NULL, *partner_nickname = NULL; char *from = NULL, *to = NULL, *count = "3", *current_msg, *last_msg; int sender_count = 3; time_t now; static Evas_Object *win, *bbx, *map, *img, *bcb; static void on_cancel(void *data, Evas_Object *obj, void *event_info) { elm_exit(); close_threads(); } static void on_own_position(void *data, Evas_Object *obj, void *event_info) { if (nickname != NULL) { init_sender_thread(from); } } static void set_distance(void *data, Evas_Object *obj, void *event_info) { set_dist((int) data); } static void on_ip(void *data, Evas_Object *obj, void *event_info) { ip = elm_entry_entry_get(obj); elm_entry_context_menu_clear(obj); } static void set_ip(void *data, Evas_Object *obj, void *event_info) { sender_set_ip(ip); receiver_set_ip(ip); } static void on_nickname(void *data, Evas_Object *obj, void *event_info) { nickname = elm_entry_entry_get(obj); elm_entry_context_menu_clear(obj); } static void set_nickname(void *data, Evas_Object *obj, void *event_info) { from = nickname; if (from != NULL && to != NULL && strlen(from) > 0 && strlen(to) > 0) { init_msg_thread(from, to); } } static void on_partner_number(void *data, Evas_Object *obj, void *event_info) { sender_count = elm_entry_entry_get(obj); elm_entry_context_menu_clear(obj); } static void set_partner_number(void *data, Evas_Object *obj, void *event_info) { set_sender_count(sender_count); } static void on_show_users(void *data, Evas_Object *obj, void *event_info) { if (nickname != NULL && strlen(nickname) > 0) { init_receiver_thread(from); } } static void on_partner_nickname(void *data, Evas_Object *obj, void *event_info) { partner_nickname = elm_entry_entry_get(obj); elm_entry_context_menu_clear(obj); } static void set_partner_nickname(void *data, Evas_Object *obj, void *event_info) { to = partner_nickname; if (from != NULL && to != NULL && strlen(from) > 0 && strlen(to) > 0) { init_msg_thread(from, to); } } static void create_barcode(void *data, Evas_Object *obj, void *event_info) { if (key != NULL && strlen(key) > 0) { generate_barcode(key); } else return; if (img != NULL) { evas_object_del(img); } img = elm_image_add(win); elm_image_file_set(img, "barcode.png", ""); evas_object_size_hint_weight_set(img, 1.0, 1.0); evas_object_size_hint_align_set(img, -1.0, -1.0); evas_object_resize(img, w*0.5, h*0.5); elm_box_pack_end((Evas_Object*)data, img); evas_object_show(img); } static void on_keyenter(void *data, Evas_Object *obj, void *event_info) { key = elm_entry_entry_get(obj); } static void on_chat(void *data, Evas_Object *obj, void *event_info) { enable_chat = 1; disable_map_bubbles(); init_window_parts(); init_toolbar(obj); } static void on_map(void *data, Evas_Object *obj, void *event_info) { enable_chat = 0; init_map(); enable_map_bubbles(); init_draw_user(win, map); init_toolbar(obj); } static void on_options(void *data, Evas_Object *obj, void *event_info) { enable_chat = 0; disable_map_bubbles(); init_options(); } static void on_barcode(void *data, Evas_Object *obj, void *event_info) { enable_chat = 0; disable_map_bubbles(); init_barcode(); if (img != NULL) { img = elm_image_add(win); elm_image_file_set(img, "barcode.png", ""); evas_object_size_hint_weight_set(img, 1.0, 1.0); evas_object_size_hint_align_set(img, -1.0, -1.0); evas_object_resize(img, w*0.5, h*0.5); elm_box_pack_end(bcb, img); evas_object_show(img); } } static void on_message(void *data, Evas_Object *obj, void *event_info) { msg_text = elm_entry_entry_get(obj); elm_entry_context_menu_clear(obj); } Evas_Object *bb1, *bb2, *bb3; static void on_send_message(void *data, Evas_Object *bx3, void *event_info) { set_txt_msg(msg_text); if (msg_text != NULL) { if (first == 0 && enable_chat == 1) { if(bb1 !=NULL) evas_object_del(bb1); bb1 = elm_bubble_add(bx3); evas_object_size_hint_weight_set(bb1, 0.0, 0.0); evas_object_size_hint_align_set(bb1, -1.0, -1.0); evas_object_resize(bb1, w, h/6); evas_object_move(bb1, 0, bubble_pos); set_bubble_text(bb1, from, msg_text); evas_object_show(bb1); first = 1; bubble_pos = bubble_pos + h/6; return; } if (first == 1 && enable_chat == 1) { if(bb2 !=NULL) evas_object_del(bb2); bb2 = elm_bubble_add(bx3); evas_object_size_hint_weight_set(bb2, 1.0, 1.0); evas_object_size_hint_align_set(bb2, -1.0, -1.0); evas_object_resize(bb2, w, h/6); evas_object_move(bb2, 0, bubble_pos); set_bubble_text(bb2, from, msg_text); evas_object_show(bb2); first = 2; bubble_pos = bubble_pos + h/6; return; } if (first == 2 && enable_chat == 1) { if(bb3 !=NULL) evas_object_del(bb3); bb3 = elm_bubble_add(bx3); evas_object_size_hint_weight_set(bb3, 1.0, 1.0); evas_object_size_hint_align_set(bb3, -1.0, -1.0); evas_object_resize(bb3, w, h/6); evas_object_move(bb3, 0, bubble_pos); set_bubble_text(bb3, from, msg_text); evas_object_show(bb3); first = 0; bubble_pos = 100; return; } } } /* if message has been sent, print it in a bubble */ void show_message(char *current_msg) { if (current_msg != NULL) { if (first == 0 && enable_chat == 1) { if(bb1 !=NULL) evas_object_del(bb1); bb1 = elm_bubble_add(bbx); evas_object_size_hint_weight_set(bb1, 1.0, 1.0); evas_object_size_hint_align_set(bb1, -1.0, -1.0); evas_object_resize(bb1, w, h/6); evas_object_move(bb1, 0, bubble_pos); set_bubble_text(bb1, to, current_msg); evas_object_show(bb1); first = 1; bubble_pos = bubble_pos + h/6; current_msg[0] = '\0'; return; } if (first == 1 && enable_chat == 1) { if(bb2 !=NULL) evas_object_del(bb2); bb2 = elm_bubble_add(bbx); evas_object_size_hint_weight_set(bb2, 1.0, 1.0); evas_object_size_hint_align_set(bb2, -1.0, -1.0); evas_object_resize(bb2, w, h/6); evas_object_move(bb2, 0, bubble_pos); set_bubble_text(bb2, to, current_msg); evas_object_show(bb2); first = 2; bubble_pos = bubble_pos + h/6; current_msg[0] = '\0'; return; } if (first == 2 && enable_chat == 1) { if(bb3 !=NULL) evas_object_del(bb3); bb3 = elm_bubble_add(bbx); evas_object_size_hint_weight_set(bb3, 1.0, 1.0); evas_object_size_hint_align_set(bb3, -1.0, -1.0); evas_object_resize(bb3, w, h/6); evas_object_move(bb3, 0, bubble_pos); set_bubble_text(bb3, to, current_msg); evas_object_show(bb3); first = 0; bubble_pos = 100; current_msg[0] = '\0'; return; } free(bb1); free(bb2); free(bb3); } } char* get_current_time() { time_t now; time(&now); char *text = ctime(&now); return text; } /* sets the username and the text in the bubble */ void set_bubble_text(Evas_Object *bb, char *username, char *text) { Evas_Object *cn; printf("%s \n", text); /* create entry */ cn = elm_entry_add(bb); elm_entry_entry_set(cn, text); elm_entry_line_wrap_set(cn, 0); evas_object_size_hint_weight_set(cn, 1.0, 1.0); elm_bubble_info_set(bb, get_current_time()); /* create overlay bubble with message string */ Evas_Object *inner_bb; inner_bb = elm_bubble_add(bb); elm_bubble_info_set(inner_bb, text); elm_bubble_label_set(bb, username); evas_object_resize(bb, w, h/6); evas_object_move(bb, 0, bubble_pos); elm_bubble_content_set(bb, cn); evas_object_show(bb); } void update_position() { current_lat = get_current_lat(); current_lon = get_current_lon(); printf("current_lat: %f || current_lon: %f \n", current_lat, current_lon); } void init_window_parts() { Evas_Object *bg, *bx, *bx2, *bx3, *sc, *en; /* add a standard bg */ bg = elm_bg_add(win); /* not not allow bg to expand. let's limit dialog size to contents */ elm_win_resize_object_add(win, bg); evas_object_show(bg); /* add a box object - default is vertical. a box holds children in a row, * either horizontally or vertically. nothing more. */ bx = elm_box_add(win); evas_object_resize(bx, w, h*0.85); evas_object_show(bx); /* add horizontal box for buttons */ bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); elm_box_homogenous_set(bx2, 1); elm_frame_content_set(bx, bx2); evas_object_move(bx2, 0, h*0.93); evas_object_resize(bx2, w, h*0.05); evas_object_show(bx2); /* add box for incoming messages */ bx3 = elm_box_add(win); evas_object_resize(bx3, w, h*0.15); evas_object_move(bx3, 0, h*0.78); evas_object_show(bx3); sc = elm_scroller_add(win); evas_object_size_hint_weight_set(sc, 1.0, 1.0); evas_object_size_hint_align_set(sc, -1.0, -1.0); elm_box_pack_end(bx3, sc); en = elm_entry_add(win); evas_object_size_hint_weight_set(en, 1.0, 1.0); evas_object_size_hint_align_set(en, 0.0, 0.0); elm_scroller_content_set(sc, en); evas_object_smart_callback_add(en, "changed", on_message, NULL); evas_object_show(en); evas_object_show(sc); /* init buttons */ bbx = bx2; init_buttons(bx2); /* init toolbar */ init_toolbar(win); } void init_toolbar() { Evas_Object *tb, *ic, *bx; /* add box for toolbar */ bx = elm_box_add(win); evas_object_resize(bx, w, h*0.15); evas_object_move(bx, 0, 0); evas_object_show(bx); tb = elm_toolbar_add(win); evas_object_size_hint_weight_set(tb, 1.0, 0.0); evas_object_size_hint_align_set(tb, -1.0, -1.0); ic = elm_icon_add(win); elm_icon_standard_set(ic, "chat"); elm_toolbar_item_add(tb, ic, "Chat", on_chat, NULL); evas_object_show(ic); ic = elm_icon_add(win); elm_icon_standard_set(ic, "edit"); elm_toolbar_item_add(tb, ic, "Options", on_options, NULL); evas_object_show(ic); ic = elm_icon_add(win); elm_icon_standard_set(ic, "home"); elm_toolbar_item_add(tb, ic, "Map", on_map, NULL); evas_object_show(ic); ic = elm_icon_add(win); elm_icon_standard_set(ic, "file"); elm_toolbar_item_add(tb, ic, "Barcode", on_barcode, NULL); evas_object_show(ic); evas_object_show(ic); elm_box_pack_end(bx, tb); evas_object_show(tb); } void init_barcode() { Evas_Object *bg, *bx1, *bx2, *bx3, *bx4, *lb1, *sc, *en, *bt, *img; bg = elm_bg_add(win); elm_win_resize_object_add(win, bg); evas_object_show(bg); init_toolbar(bg); bx1 = elm_box_add(win); evas_object_size_hint_weight_set(bx1, 1.0, 1.0); evas_object_size_hint_align_set(bx1, -1.0, -1.0); evas_object_resize(bx1, w*0.8, h*0.33); evas_object_move(bx1, w*0.1, h*0.65); evas_object_show(bx1); lb1 = elm_label_add(win); elm_label_label_set(lb1, "Enter key"); elm_box_pack_end(bx1, lb1); evas_object_show(lb1); bx2 = elm_box_add(win); evas_object_size_hint_weight_set(bx2, 1.0, 1.0); evas_object_size_hint_align_set(bx2, -1.0, -1.0); evas_object_resize(bx2, w*0.8, h*0.045); evas_object_move(bx2, w*0.1, h*0.76); evas_object_show(bx2); sc = elm_scroller_add(win); evas_object_size_hint_weight_set(sc, 1.0, 1.0); evas_object_size_hint_align_set(sc, -1.0, -1.0); elm_box_pack_end(bx2, sc); en = elm_entry_add(win); evas_object_size_hint_weight_set(en, 1.0, 1.0); evas_object_size_hint_align_set(en, 0.0, 0.0); elm_scroller_content_set(sc, en); evas_object_smart_callback_add(en, "changed", on_keyenter, NULL); evas_object_show(en); evas_object_show(sc); evas_object_show(en); bx3 = elm_box_add(win); evas_object_size_hint_weight_set(bx3, 1.0, 1.0); evas_object_size_hint_align_set(bx3, -1.0, -1.0); evas_object_resize(bx3, w*0.8, h*0.045); evas_object_move(bx3, w*0.1, h*0.83); evas_object_show(bx3); bx4 = elm_box_add(win); evas_object_size_hint_weight_set(bx4, 1.0, 1.0); evas_object_size_hint_align_set(bx4, -1.0, -1.0); evas_object_resize(bx4, w*0.6, h*0.6); evas_object_move(bx4, w*0.2, h*0.15); evas_object_show(bx4); bcb = bx4; bt = elm_button_add(win); elm_button_label_set(bt, "Generate barcode"); evas_object_size_hint_weight_set(bt, 1.0, 1.0); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_resize(bt, w*0.9, h*0.1); elm_box_pack_end(bx3, bt); evas_object_smart_callback_add(bt, "clicked", create_barcode, bx4); evas_object_show(bt); } void init_options() { Evas_Object *bg, *bx, *bx2, *bx3, *bx4, *bx5, *bt, *bt2, *bt3, *bt4, *bt5 ,*bt6, *bt7; Evas_Object *en1, *sc1, *en2, *sc2, *en3, *sc3, *en4, *sc4, *lb1, *lb2, *lb3, *lb4; /* add a standard bg */ bg = elm_bg_add(win); /* not not allow bg to expand. let's limit dialog size to contents */ elm_win_resize_object_add(win, bg); evas_object_show(bg); /* set toolbar again */ init_toolbar(bg); bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, 1.0, 1.0); evas_object_size_hint_align_set(bx, -1.0, -1.0); evas_object_resize(bx, w*0.8, h*0.33); evas_object_move(bx, w*0.1, h*0.65); evas_object_show(bx); bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); evas_object_size_hint_weight_set(bx2, 1.0, 1.0); evas_object_size_hint_align_set(bx2, -1.0, -1.0); evas_object_resize(bx2, w*0.8, h*0.04); evas_object_move(bx2, w*0.1, h*0.2); evas_object_show(bx2); bx3 = elm_box_add(win); elm_box_horizontal_set(bx3, 1); evas_object_size_hint_weight_set(bx3, 1.0, 1.0); evas_object_size_hint_align_set(bx3, -1.0, -1.0); evas_object_resize(bx3, w*0.8, h*0.04); evas_object_move(bx3, w*0.1, h*0.3); evas_object_show(bx3); bx4 = elm_box_add(win); elm_box_horizontal_set(bx4, 1); evas_object_size_hint_weight_set(bx4, 1.0, 1.0); evas_object_size_hint_align_set(bx4, -1.0, -1.0); evas_object_resize(bx4, w*0.8, h*0.04); evas_object_move(bx4, w*0.1, h*0.4); evas_object_show(bx4); bx5 = elm_box_add(win); elm_box_horizontal_set(bx5, 1); evas_object_size_hint_weight_set(bx5, 1.0, 1.0); evas_object_size_hint_align_set(bx5, -1.0, -1.0); evas_object_resize(bx5, w*0.8, h*0.04); evas_object_move(bx5, w*0.1, h*0.5); evas_object_show(bx5); bt = elm_button_add(win); elm_button_label_set(bt, "Distance = 100 m"); evas_object_size_hint_weight_set(bt, 1.0, 1.0); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_resize(bt, w*0.9, h*0.1); elm_box_pack_end(bx, bt); evas_object_smart_callback_add(bt, "clicked", set_distance, 100); evas_object_show(bt); bt2 = elm_button_add(win); elm_button_label_set(bt2, "Distance = 250 m"); evas_object_size_hint_weight_set(bt2, 1.0, 1.0); evas_object_size_hint_align_set(bt2, -1.0, -1.0); elm_box_pack_end(bx, bt2); evas_object_smart_callback_add(bt2, "clicked", set_distance, 250); evas_object_show(bt2); bt3 = elm_button_add(win); elm_button_label_set(bt3, "Distance = 1000 m"); evas_object_size_hint_weight_set(bt3, 1.0, 1.0); evas_object_size_hint_align_set(bt3, -1.0, -1.0); elm_box_pack_end(bx, bt3); evas_object_smart_callback_add(bt3, "clicked", set_distance, 1000); evas_object_show(bt3); /* enter ip */ sc1 = elm_scroller_add(win); evas_object_size_hint_weight_set(sc1, 1.0, 1.0); evas_object_size_hint_align_set(sc1, -1.0, -1.0); elm_box_pack_end(bx2, sc1); en1 = elm_entry_add(win); elm_entry_entry_set(en1, "127.0.0.1"); evas_object_size_hint_weight_set(en1, 1.0, 1.0); evas_object_size_hint_align_set(en1, 0.0, 0.0); elm_scroller_content_set(sc1, en1); evas_object_smart_callback_add(en1, "changed", on_ip, NULL); evas_object_show(en1); if (ip != NULL) { elm_entry_entry_set(en1, ip); } lb1 = elm_label_add(win); elm_label_label_set(lb1, "Server IP"); elm_box_pack_end(bx2, lb1); evas_object_show(lb1); evas_object_show(sc1); bt4 = elm_button_add(win); elm_button_label_set(bt4, "Set server IP"); evas_object_size_hint_weight_set(bt4, 1.0, 1.0); evas_object_size_hint_align_set(bt4, -1.0, -1.0); elm_box_pack_end(bx2, bt4); evas_object_smart_callback_add(bt4, "clicked", set_ip, NULL); evas_object_show(bt4); /* enter nickname */ sc2 = elm_scroller_add(win); evas_object_size_hint_weight_set(sc2, 1.0, 1.0); evas_object_size_hint_align_set(sc2, -1.0, -1.0); elm_box_pack_end(bx3, sc2); en2 = elm_entry_add(win); evas_object_size_hint_weight_set(en2, 1.0, 1.0); evas_object_size_hint_align_set(en2, 0.0, 0.0); elm_scroller_content_set(sc2, en2); evas_object_smart_callback_add(en2, "changed", on_nickname, NULL); evas_object_show(en2); if (from != NULL) { elm_entry_entry_set(en2, nickname); } lb2 = elm_label_add(win); elm_label_label_set(lb2, "Nickname"); elm_box_pack_end(bx3, lb2); evas_object_show(lb2); evas_object_show(sc2); bt5 = elm_button_add(win); elm_button_label_set(bt5, "Set own nickname"); evas_object_size_hint_weight_set(bt5, 1.0, 1.0); evas_object_size_hint_align_set(bt5, -1.0, -1.0); elm_box_pack_end(bx3, bt5); evas_object_smart_callback_add(bt5, "clicked", set_nickname, NULL); evas_object_show(bt5); /* enter nickname of chat partner */ sc3 = elm_scroller_add(win); evas_object_size_hint_weight_set(sc3, 1.0, 1.0); evas_object_size_hint_align_set(sc3, -1.0, -1.0); elm_box_pack_end(bx4, sc3); en3 = elm_entry_add(win); evas_object_size_hint_weight_set(en3, 1.0, 1.0); evas_object_size_hint_align_set(en3, 0.0, 0.0); elm_scroller_content_set(sc3, en3); evas_object_smart_callback_add(en3, "changed", on_partner_nickname, NULL); evas_object_show(en3); if (to != NULL) { elm_entry_entry_set(en3, to); } lb3 = elm_label_add(win); elm_label_label_set(lb3, "Buddy nickname"); elm_box_pack_end(bx4, lb3); evas_object_show(lb3); evas_object_show(sc3); bt6 = elm_button_add(win); elm_button_label_set(bt6, "Set buddy nickname"); evas_object_size_hint_weight_set(bt6, 1.0, 1.0); evas_object_size_hint_align_set(bt6, -1.0, -1.0); elm_box_pack_end(bx4, bt6); evas_object_smart_callback_add(bt6, "clicked", set_partner_nickname, NULL); evas_object_show(bt6); /* enter number of visible sender */ sc4 = elm_scroller_add(win); evas_object_size_hint_weight_set(sc4, 1.0, 1.0); evas_object_size_hint_align_set(sc4, -1.0, -1.0); elm_box_pack_end(bx5, sc4); en4 = elm_entry_add(win); evas_object_size_hint_weight_set(en4, 1.0, 1.0); evas_object_size_hint_align_set(en4, 0.0, 0.0); elm_scroller_content_set(sc4, en4); evas_object_smart_callback_add(en4, "changed", on_partner_number, NULL); evas_object_show(en4); elm_entry_entry_set(en4, count); lb4 = elm_label_add(win); elm_label_label_set(lb4, "Visible sender"); elm_box_pack_end(bx5, lb4); evas_object_show(lb4); evas_object_show(sc4); bt7 = elm_button_add(win); elm_button_label_set(bt7, "Set visible sender"); evas_object_size_hint_weight_set(bt7, 1.0, 1.0); evas_object_size_hint_align_set(bt7, -1.0, -1.0); elm_box_pack_end(bx5, bt7); evas_object_smart_callback_add(bt7, "clicked", set_partner_number, NULL); evas_object_show(bt7); } void init_map() { Evas_Object *bg, *bx, *bx2, *bt, *bt2, *bt3; /* add a standard bg */ bg = elm_bg_add(win); /* not not allow bg to expand. let's limit dialog size to contents */ elm_win_resize_object_add(win, bg); evas_object_show(bg); /* set toolbar again */ init_toolbar(bg); bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, 1.0, 1.0); evas_object_size_hint_align_set(bx, -1.0, -1.0); evas_object_resize(bx, w, h); evas_object_show(bx); bx2 = elm_box_add(win); evas_object_size_hint_weight_set(bx2, 0.5, 0.2); evas_object_size_hint_align_set(bx2, -1.0, -1.0); evas_object_resize(bx2, w*0.97, h*0.6); elm_box_pack_end(bx, bx2); evas_object_show(bx2); map = e_smart_map_add(win, "data/maps/fr_map.eet"); e_smart_map_set_theme(map, "themes/map.edj", "main"); e_smart_map_set_pos(map, current_lat, current_lon); evas_object_size_hint_min_set(map, w-2, h-10*8-80); evas_object_size_hint_max_set(map, w-2, h-10*8-80); evas_object_resize(map, w, h*0.65); elm_box_pack_end(bx2, map); evas_object_show(map); bt = elm_button_add(win); elm_button_label_set(bt, "Send own position"); evas_object_size_hint_weight_set(bt, 1.0, 1.0); evas_object_size_hint_align_set(bt, -1.0, -1.0); elm_box_pack_end(bx, bt); evas_object_smart_callback_add(bt, "clicked", on_own_position, NULL); evas_object_show(bt); bt2 = elm_button_add(win); elm_button_label_set(bt2, "Show other users"); evas_object_size_hint_weight_set(bt2, 1.0, 1.0); evas_object_size_hint_align_set(bt2, -1.0, -1.0); elm_box_pack_end(bx, bt2); evas_object_smart_callback_add(bt2, "clicked", on_show_users, NULL); evas_object_show(bt2); bt3 = elm_button_add(win); elm_button_label_set(bt3, "Exit"); evas_object_size_hint_weight_set(bt3, 1.0, 1.0); evas_object_size_hint_align_set(bt3, -1.0, -1.0); elm_box_pack_end(bx, bt3); evas_object_smart_callback_add(bt3, "clicked", on_cancel, NULL); evas_object_show(bt3); } void init_buttons(Evas_Object *bx) { Evas_Object *bt1, *bt2; /* add ok button to box - fill and expand */ bt1 = elm_button_add(win); elm_button_label_set(bt1, "Send Message"); evas_object_size_hint_weight_set(bt1, 1.0, 1.0); evas_object_size_hint_align_set(bt1, -1.0, -1.0); elm_box_pack_end(bx, bt1); evas_object_show(bt1); /* and when clicked - run "on_ok" */ evas_object_smart_callback_add(bt1, "clicked", on_send_message, NULL); /* add cancel button to box - fill and expand */ bt2 = elm_button_add(win); elm_button_label_set(bt2, "Exit"); evas_object_size_hint_weight_set(bt2, 1.0, 1.0); evas_object_size_hint_align_set(bt2, -1.0, -1.0); elm_box_pack_end(bx, bt2); evas_object_show(bt2); /* and when clicked - run "on_cancel" */ evas_object_smart_callback_add(bt2, "clicked", on_cancel, NULL); } void elm_main () { /* new window - do the usual and give it a name, title and delete handler */ win = elm_win_add(NULL, "Main", ELM_WIN_BASIC); elm_win_title_set(win, "Friend Finder"); evas_object_smart_callback_add(win, "delete,request", on_cancel, NULL); /* resize window */ evas_object_resize(win, w, h); /* init window parts */ init_window_parts(); /* show the window */ evas_object_show(win); /* get going and draw/respond to the user */ elm_run(); /* standard shutdown */ elm_exit(); } int main (int argc, char **argv) { elm_init(argc, argv); elm_main(); elm_shutdown(); return 0; }