summaryrefslogblamecommitdiffstats
path: root/friendfinder/gui.c
blob: 647ef284d743b5c93dcade3d62688c335dc593ad (plain) (tree)
1
2
3
4
5
6
7
8
9




                   


                       
                     

                    

                   
           







                                         
                                        
 

                                                                     


                          










                                                                           



                                                                   


                            



                                                                  
                   



                                                                      
                       



                                                                      

                                            



                                                                           
































































































                                                              



                                 

 







                                                        



                                                                 





















                                                       



                        
























































                                                                                 


























                                                                  
                             






                                 
                                                        










                                                                             
                                                       





                                                        
                                                        


                                                         
  
                                 
                                                 
                                                       
                                                        
                                 
                                                                  
                             
  

                                                       
                                                        






                                                                              
                                                        



                                                                            



               
                                                
















                                                                             
                                                        
                                                         
                                              






                                                        
                                              




                                                           


                                                              
                                   
                              
 
                        
        










                                                                       



                                   
                               

                                                    





                                                         

                                            
                                                                              


                                                        





                                                         

                                                
                                                                        



                













                                                                                    

                                                    
                  


                               



                                
                                                

                                                      

                            













                               
 
#include <stdlib.h>
#include <time.h>

#include "Evas.h"
#include "Ecore.h"
#include "Elementary.h"

#include "msg_sender.h"
#include "receiver.h"
#include "gui.h"
#include "handler.h"
#include "sender.h"

int h= 600;
int w = 450;

int first = 0;
int bubble_pos = 100;
time_t now;
const char* msg_text;
char *from, *to, *current_msg, *last_msg;

static 	Evas_Object *win, *bbx, *map;	

static void on_cancel(void *data, Evas_Object *obj, void *event_info)
{
   	/* cleanly exit */
 	elm_exit();
 	elm_shutdown();
	close_threads();
}

static void on_own_position(void *data, Evas_Object *obj, void *event_info)
{
	init_sender_thread(from);
}

static void on_show_users(void *data, Evas_Object *obj, void *event_info)
{
	init_receiver_thread(from);
}

static void on_chat(void *data, Evas_Object *obj, void *event_info)
{
	init_window_parts();
	init_buttons(obj);
	init_toolbar(obj);
}

static void on_map(void *data, Evas_Object *obj, void *event_info)
{
	init_map();
}

static void on_options(void *data, Evas_Object *obj, void *event_info)
{
	init_options();
}

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);
}

static void on_send_message(void *data, Evas_Object *bx3, void *event_info)
{
	printf("on_send_message:  %s\n", msg_text);
	set_txt_msg(msg_text);
	Evas_Object *bb1, *bb2, *bb3;

	if (msg_text != NULL)
	{

		if (first == 0)
		{
			bb1 = elm_bubble_add(bx3);
			evas_object_resize(bb1, w, h/7);
			evas_object_move(bb1, 0, 0);
			evas_object_show(bb1);
			set_bubble_text(bb1, from, msg_text);
	
			first = 1;
			bubble_pos = bubble_pos + h/6;
	
			return;
		}
		if (first == 1)
		{
			bb2 = elm_bubble_add(bx3);
			evas_object_resize(bb2, w, h/6);
			evas_object_move(bb2, 0, bubble_pos);
			evas_object_show(bb2);
			set_bubble_text(bb2, from, msg_text);

			first = 2;
			bubble_pos = bubble_pos + h/6;

			return;
		}	
	//	printf("position: %d\n", bubble_pos);
	
		if (first == 2)
		{
			bb3 = elm_bubble_add(bx3);
			evas_object_resize(bb3, w, h/6);
			evas_object_move(bb3, 0, bubble_pos);
			evas_object_show(bb3);
			set_bubble_text(bb3, from, msg_text);

			first = 0;
			bubble_pos = 100;
	
			return;
		}
	}
}

/* if message has been sent, print it in a bubble */
void show_message(char *current_msg)
{
	Evas_Object *bb1, *bb2, *bb3;

	if (current_msg != NULL)
	{
		if (first == 0)
		{
			bb1 = elm_bubble_add(bbx);
			evas_object_resize(bb1, w, h/7);
			evas_object_move(bb1, 0, 0);
			evas_object_show(bb1);
			set_bubble_text(bb1, to, current_msg);
	
			first = 1;
			bubble_pos = bubble_pos + h/6;
		}
		if (first == 1); 
		{
			bb2 = elm_bubble_add(bbx);
			evas_object_resize(bb2, w, h/6);
			evas_object_move(bb2, 0, bubble_pos);
			evas_object_show(bb2);
			set_bubble_text(bb2, to, current_msg);

			first = 2;
			bubble_pos = bubble_pos + h/6;
		}	
		if (first == 2)
		{
			bb3 = elm_bubble_add(bbx);
			evas_object_resize(bb3, w, h/6);
			evas_object_move(bb3, 0, bubble_pos);
			evas_object_show(bb3);
			set_bubble_text(bb3, to, current_msg);
			
			first = 0;
			bubble_pos = bubble_pos + h/6;
		}	
	}
}

/* returns the current system time */
char* get_current_time()
{
	time_t now;
	time(&now);
	char *text = ctime(&now);
	return text;
}

void print_users(struct position *pos)
{
	Evas_Object *ic;
	
	elm_icon_add(map);
	elm_icon_file_set(ic, "data/sl_bt_0.png", NULL);
	evas_object_show(ic);
}

/* sets the username, time-text and the text in the bubble */
void set_bubble_text(Evas_Object *bb, char *username, char *text)
{
	Evas_Object *cn;

	/* sets the username */
	elm_entry_entry_set(bb, username);

	/* get time string and set it */
	elm_bubble_info_set(bb, get_current_time());

	/* 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);

	/* create overlay bubble with message string */
	Evas_Object *inner_bb;
	inner_bb = elm_bubble_add(bb);
	elm_bubble_info_set(inner_bb, text);
	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 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);
	//elm_box_pack_end(bx, bx2);
   	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);
   	//if (text) elm_entry_entry_set(en, text);
   	//else elm_entry_entry_set(en, "");
   	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, "clock");
   	elm_toolbar_item_add(tb, ic, "Map", on_map, NULL);
   	evas_object_show(ic);
   
	evas_object_show(ic);
   
   	elm_box_pack_end(bx, tb);
   	evas_object_show(tb);
}

void init_options()
{
	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, 0.2);
   	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);
   	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);
   	elm_box_pack_end(bx, bx2);
	evas_object_show(bx2);
/*
	bt = elm_button_add(win);
   	elm_button_label_set(bt, "Find friends");
   	evas_object_size_hint_weight_set(bt, 1.0, 0.2);
   	evas_object_size_hint_align_set(bt, -1.0, -1.0);
  	elm_box_pack_end(bx, bt);
   	evas_object_smart_callback_add(bt, "clicked", NULL, NULL);
   	evas_object_show(bt);
*/
 	bt2 = elm_button_add(win);
   	elm_button_label_set(bt2, "Send own position");
   	evas_object_size_hint_weight_set(bt2, 1.0, 0.2);
   	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_own_position, NULL);
   	evas_object_show(bt2); 

	bt3 = elm_button_add(win);
   	elm_button_label_set(bt3, "Show other users");
   	evas_object_size_hint_weight_set(bt3, 1.0, 0.2);
   	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_show_users, NULL);
   	evas_object_show(bt3); 
}

void init_map()
{
	Evas_Object *bg, *bx, *bx2, *bx3, *bt;	
	
	/* 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*1.3, h*0.5);
   	elm_box_pack_end(bx, bx2);
	evas_object_show(bx2);

	bx3 = elm_box_add(win);
   	elm_box_horizontal_set(bx2, 1);
   	evas_object_size_hint_weight_set(bx3, 1.0, 0.0);
   	evas_object_size_hint_align_set(bx3, -1.0, 0.0);
	evas_object_resize(bx3, w*0.9, h*0.1);
   	elm_box_pack_end(bx, bx3);
	evas_object_show(bx3);
	
	map = e_smart_map_add(win, "data/maps/fr_map.eet");
	e_smart_map_set_pos(map, 47.996578,7.840171);
	evas_object_size_hint_min_set(map, w-2*8, h-10*8-60);
	evas_object_size_hint_max_set(map, w-2*8, h-10*8-120);
//	evas_object_resize(map, w, h*0.7);
	elm_box_pack_end(bx2, map);
//	evas_object_show(map);

	Evas_Object *ic;
	
	elm_icon_add(map);
	elm_icon_file_set(ic, "data/sl_bt_0.png", NULL);
//	evas_object_show(ic);

	bt = elm_button_add(win);
   	elm_button_label_set(bt, "Exit");
   	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(bx3, bt);
   	evas_object_smart_callback_add(bt, "clicked", on_cancel, NULL);
   	evas_object_show(bt);  
}

void init_buttons(Evas_Object *box)
{
	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(box, 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, "Cancel");
   	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(box, 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, "Main");
   	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);

   	init_msg_thread(from, to);
	/* get going and draw/respond to the user */
   	elm_run();
   
	/* standard shutdown */
   	elm_exit();
}

int main (int argc, char **argv)
{
	if (argv[1] == NULL  || argv[2] == NULL)
	{
		printf("no nick and no receiver set");
		from = NULL;
		to = NULL;
	}
	else
	{
		from = argv[1];
		to = argv[2];
	}

	elm_init(argc, argv);

	elm_main();

	elm_shutdown();

	return 0;
}