Senin, 06 Oktober 2008

"Hello, World !" Ala GTK

"Hello, World !" Ala GTK

Di dalam penjelasan ini nantinya akan dijelaskan beberapa fungsi dasar yang sering digunakan di dalam pembuatan peogram dengan pustaka GTK dan dijelaskan pula secara singkat beberapa fungsi khusus yang sering digunakan untuk mengontrol event yang diterima dari user, yang biasanya membutuhkan fungsi balikan (callback function).

Untuk header file yang digunakan cukup disertakan header file “gtk.h”, yang harus selalu ada di dalam program yang ingin kita kompilasikan dengan pustaka GTK. Di sistem Linux biasanya header tersebut disimpan di dalam folder “gtk” sehingga untuk pemanggilan file header tersebut dapat ditulis “gtk/gtk.h”, atau lebih lengkapnya dengan bentuk berikut.

#include

Pada bagian awal fungsi utama (main function) di dalam file program ini terdapat deklarasi berikut.

int main( int argc, char *argv[] )

{

GtkWidget *window;

GtkWidget *button;

“GtkWidget” adalah tipe data khusus yang paling sering digunakan bila kita ingin membuat obyek user interface (komponen GUI) atau di dalam dunia GTK disebut widget. Sesuai dengan nama peubah deklarasi di atas, “window” peubah akan digunakan untuk menampung data-data khusus (nilai properti) yang mana sesuai dengan jenis tipe widget Window (jendela program, dimana widget lain akan ditampilkan di atasnya). Untuk peubah-peubah di atas harus dideklarasikan dengan tipe pointer (tanda asterik *).

Statement selanjutnya adalah pemanggilan fungsi khusus yang akan menginisialisasikan sistem GTK (untuk program yang kita jalankan) dengan nilai parameter program dari fungsi utama, yaitu peubah “argc” dan “argv”. Untuk mengisi nilai parameter “argc” dan “argv” adalah pilihan opsional bisa dikosongkan (tidak perlu menambahkan parameter ketika program dijalankan melalui terminal) atau pun tidak. Berikut fungsi tersebut.

gtk_init(&argc, &argv);

Fungsi selanjutnya yang dipanggil adalah fungsi “gtk_window_new” yang akan membentuk obyek baru “window”, yang mana nilai propertinya berasal dari widget Window, dan untuk parameter yang digunakan adalah GTK_WINDOW_TOPLEVEL, yang mana window yang baru terbentuk akan segera ditampilkan ke user pada posisi teratas dari window program lain, dan misalkan program yang kita buat lebih dari satu window (namun semuanya dibuat dengan parameter GTK_WINDOW_TOPLEVEL) maka window yang satu dengan window lainnya akan muncul pada posisi yang berbeda, sehingga tidak mungkin terjadi penumpukan window (window yang satu tertutup oleh window yang lain. Berikut bentuk statementnya.

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

Setelah pembentukan obyek “window” dari widget Window maka sekarang adalah pengaturan event yang mungkin terjadi, berikut statementnya.

gtk_signal_connect (GTK_OBJECT (window), "delete_event",

GTK_SIGNAL_FUNC (delete_event), NULL);

gtk_signal_connect (GTK_OBJECT (window), "destroy",

GTK_SIGNAL_FUNC (destroy), NULL);

“gtk_signal_connect” adalah fungsi yang akan mengatur respon dari event muncul, dimana fungsi balikan (Callback function) akan dipanggil jika jenis tipe event yang di-set muncul atau teraktifasi oleh user. Untuk tipe event yang dimaksud adalah parameter yang diapit oleh sepasang tanda kutip dua, yaitu “delete_event” dan “destroy”, sedangkan untuk fungsi balikannya adalah parameter di dalam makro GTK_SIGNAL_FUNC, yaitu fungsi “destroy” dan fungsi “delete_event” (boleh sama dengan nama event). Untuk banyak parameter fungsi balikan tersebut yang berbeda (fungsi “delete_event” ada 3 parameter sedangkan fungsi “destroy” hanya ada 2 buah), disebabkan oleh tipe atau jenis event yang akan dikontrol, dimana jenis event dapat berasal dari pustaka GTK atau GDK, untuk perbedaannya tidak akan dijelaskan di dalam tutorial ini, silahkan mengacu pada link atau bahan referensi yang di letakan pada bagian akhir tutorial ini.

Untuk makro GTK_OBJECT dan GTK_SIGNAL_FUNC digunakan untuk melakukan operasi pengubahan tipe atau sering disebut typecast dan sekaligus akan melakukan pengecekan apakah parameter yang dimasukkan boleh untuk di-typecast.

Beralih ke fungsi balikan atau callback, yang pertama adalah “delete_event” dimana terdapat statement berikut.....

Selanjutnya adalah pengubahan nilai properti obyek user interface “window”, dengan bantuan fungsi “gtk_container_set_border_width”, yang mana sesuai namanya berguna untuk mengatur border atau batas jarak antara widget lain yang akan dibentuk di dalam window dengan pinggiran window.

gtk_container_set_border_width (GTK_CONTAINER (window), 10);

Statement berikutnya adalah pembentukan obyek user interface “button” yang berasal dari widget Button, yang mana dapat dilihat sebagai berikut.

button = gtk_button_new_with_label ("Hello World");



UNDER CONSTRUCTION

/* Program helloworld.c */

#include

void hello( GtkWidget *widget, gpointer data )

{

g_print ("Hello World\n");

}

gint delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )

{

g_print ("delete event occurred\n");

return(TRUE);

}

void destroy( GtkWidget *widget, gpointer data )

{

gtk_main_quit();

}

int main( int argc, char *argv[] )

{

GtkWidget *window;

GtkWidget *button;


gtk_init(&argc, &argv);


window = gtk_window_new (GTK_WINDOW_TOPLEVEL);


gtk_signal_connect (GTK_OBJECT (window), "delete_event",

GTK_SIGNAL_FUNC (delete_event), NULL);


gtk_signal_connect (GTK_OBJECT (window), "destroy",

GTK_SIGNAL_FUNC (destroy), NULL);


gtk_container_set_border_width (GTK_CONTAINER (window), 10);



button = gtk_button_new_with_label ("Hello World");


gtk_signal_connect (GTK_OBJECT (button), "clicked",

GTK_SIGNAL_FUNC (hello), NULL);


gtk_signal_connect_object (GTK_OBJECT (button), "clicked",

GTK_SIGNAL_FUNC (gtk_widget_destroy),

GTK_OBJECT (window));


gtk_container_add (GTK_CONTAINER (window), button);


gtk_widget_show (button);

gtk_widget_show (window);


gtk_main ();


return(0);

}


0 komentar:

by TemplatesForYouTFY
SoSuechtig, Burajiru