Aici voi prezenta fereastra de conversatie pentru messenger:
Crearea GtkWindow este la fel ca in cazul ferestrei de login
Din nou adaug un box pricipal ce contine toate elementele
main_box=gtk_vbox_new (FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (main_box), 2);
Creare Text Area(aici se vede conversatia)
msg_text_area = gtk_text_new(NULL, NULL);
Setare ca fiind editabila
gtk_text_set_editable(msg_text_area, FALSE);
Dimensiuni:
gtk_widget_set_usize (msg_text_area, 750, 300);
TextBox in care se scriu mesajele:
msg_text_box = gtk_entry_new();
gtk_entry_set_editable(GTK_ENTRY(msg_text_box), TRUE);
gtk_widget_set_usize (msg_text_box, 600, 40);
Crearea tabelului:
table = gtk_table_new(3, 9, FALSE);
gtk_table_set_row_spacing(GTK_TABLE(table),0,30);
gtk_table_set_row_spacing(GTK_TABLE(table),1,30);
gtk_table_set_row_spacing(GTK_TABLE(table),2,30);
gtk_table_set_col_spacing(GTK_TABLE(table),0,10);
gtk_table_set_col_spacing(GTK_TABLE(table),1,10);
gtk_table_set_col_spacing(GTK_TABLE(table),2,10);
gtk_table_set_col_spacing(GTK_TABLE(table),3,10);
gtk_table_set_col_spacing(GTK_TABLE(table),4,10);
gtk_table_set_col_spacing(GTK_TABLE(table),5,10);
gtk_table_set_col_spacing(GTK_TABLE(table),6,10);
gtk_table_set_col_spacing(GTK_TABLE(table),7,10);
gtk_table_set_col_spacing(GTK_TABLE(table),8,10);
gtk_table_set_col_spacing(GTK_TABLE(table),9,10);
Buton de Send cu imagine:
msg_btn_send = gtk_button_new ();
Legaturile la click:
g_signal_connect (G_OBJECT (msg_btn_send), "clicked",
G_CALLBACK (callback_send), (gpointer) "send");
g_signal_connect (G_OBJECT (msg_text_box), "activate",
G_CALLBACK (callback_send), (gpointer) "send");
Adaugarea unui box cu imagine pe buton
box = xpm_label_box ("img/send.jpeg", "Send");
gtk_container_add (GTK_CONTAINER (msg_btn_send), box);
gtk_widget_show (msg_btn_send);
Adaugarea de emoticon (buton cu imagine) la click apare imaginea marita
msg_btn_em1 = gtk_button_new ();
g_signal_connect (G_OBJECT (msg_btn_em1), "clicked",
G_CALLBACK (callback), (gpointer) "img/Cry.png");
box_em1 = xpm_label_box ("img/Cry.png", "");
gtk_container_add (GTK_CONTAINER (msg_btn_em1), box_em1);
gtk_widget_show (msg_btn_em1);
adaug 8 astfel de emoticoane
Imaginea initiala de butonul cu imaginea marita:
imagine= gtk_image_new ();
gtk_image_set_from_file (imagine,"img/Default.png");
box_em9 = gtk_hbox_new (FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (box_em9), 2);
gtk_box_pack_start (GTK_BOX (box_em9),imagine , FALSE, FALSE, 3);
gtk_widget_show (imagine);
Adaugare elemente in tabel:
gtk_table_attach(GTK_TABLE(table), msg_text_area, 0, 9, 0, 1, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_text_box, 0, 8, 2, 3, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_send, 8, 9, 2, 3, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em1, 0, 1, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em2, 1, 2, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em3, 2, 3, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em4, 3, 4, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em5, 4, 5, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em6, 5, 6, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em7, 6, 7, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), msg_btn_em8, 7, 8, 1, 2, 0, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), box_em9, 8, 9, 1, 2, 0, 0, 0, 0);
Adaugarea tabelului la conta
gtk_container_add(GTK_CONTAINER(main_box), table);
Vibilitatea elementelor:
gtk_widget_show (box);
gtk_widget_show (box_em1);
gtk_widget_show (box_em2);
gtk_widget_show (box_em3);
gtk_widget_show (box_em4);
gtk_widget_show (box_em5);
gtk_widget_show (box_em6);
gtk_widget_show (box_em7);
gtk_widget_show (box_em8);
gtk_widget_show (box_em9);
gtk_widget_show(msg_text_area);
gtk_widget_show(msg_text_box);
gtk_widget_show (msg_btn_send);
gtk_widget_show(table);
/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window),10);
Adaug vertical box la fereastra
gtk_widget_show (main_box);
gtk_container_add (GTK_CONTAINER (window), main_box);
Buton cu imagine
static GtkWidget *xpm_label_box( gchar *xpm_filename,
gchar *label_text )
{
GtkWidget *box;
GtkWidget *label;
GtkWidget *image;
Creaza box pentru imagine
box = gtk_hbox_new (FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (box), 2);
image = gtk_image_new_from_file (xpm_filename);
Label pentru buton:
label = gtk_label_new (label_text);
Impacheteaza imaginea si label in box
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3);
gtk_widget_show (image);
gtk_widget_show (label);
return box;
}
static void callback( GtkWidget *widget, gpointer data )
{
strcpy((char*)img,(char*)data);
strtok(img,".");
strcat(img,"M.png");
Aici adauga imaginea marita; aceasta are un M concatenat la sfarsit
gtk_image_set_from_file (imagine,img);
gtk_box_pack_start (GTK_BOX (box_em9),imagine , FALSE, FALSE, 3);
gtk_widget_show (imagine);
}
static void callback_send( GtkWidget *widget,
gpointer data )
{
buf=gtk_entry_get_text(msg_text_box);
memset(buffer,0,100);
if (strcmp(buf,"")!=0){
strcat(buffer,"sender:");
strcat(buffer,buf);
strcat(buffer,"\n");
gtk_text_insert(msg_text_area, NULL, NULL, NULL, buffer, strlen(buffer));
}
gtk_entry_set_text(msg_text_box,"");
}
Se obtine: