luni, 5 ianuarie 2009

[IOM] GTK continuare

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:

Niciun comentariu: