Senin, 08 Desember 2014

GTK Programming : GtkCheckButton


Hmm, sudah lumayan lama, saya tidak menulis tutorial tentang GTK. Akhir-akhir ini saya agak malas coding, sih. Tugas kuliah numpuk, ditambah praktikum, lengkap sudah :v

Apa yang akan kita pelajari hari ini?
Widget di GTK lumayan banyak, bagian mana dulu yang harus didahulukan? Kalau menurut saya bagian dasar dulu, seperti button, checkbox, label, gambar, dll. Setelah mempelajari bagian dasar, kita akan mencoba bagian yang lebih kompleks, seperti tree view dan list view. Untuk sekarang, kita akan mempelajari salah satu widget yang tergolong sederhana, yaitu GtkCheckButton.

Let's start
Dalam tutorial ini, kita akan mempelajari bagaimana membuat check button dan mempelajari cara memeriksa keadaan check button(dicentang atau tidak).


GtkWidget *window, *button1, *button2, *button3, *box;

void button1_click(GtkButton *button, gpointer userdata)
{
    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button1)) == TRUE) g_print("button1 checked\n");
    else g_print("button1 unchecked\n");
}

int main(int argc, char *argv[])
{
   
    gtk_init(&argc, &argv);
    //buat window
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Hello world");
    //buat horizontal box
    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
    //pasang hbox pada window
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat button
    button1 = gtk_check_button_new();
    button2 = gtk_check_button_new_with_label("Check button 2");
    button3 = gtk_check_button_new_with_mnemonic("Check button 3 with _mnemonic");
    //pasang event
    g_signal_connect (button1, "clicked", G_CALLBACK (button1_click), NULL);
    //pasang
    gtk_box_pack_start(GTK_BOX(box),button1,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),button2,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),button3,TRUE,TRUE,10);
    gtk_widget_show_all(window);
    //start
    gtk_main();
    return 0;
}


Kode di atas akan menampilkan sebuah window dengan 3 jenis check button. Check button pertama(button1) adalah check button tanpa label, check button kedua(button2) adalah check button dengan label dan check button ketiga(button3) adalah check button dilengkapi label mnemonic. Label mnemonic adalah label yang bisa digunakan untuk mengakses widget dengan menekan ALT+kode, yang mana kode merupakan huruf di depan garis bawah yang ada pada label mnemonic..



Penjelasan

Seperti biasa, saya tidak akan menjelaskan fungsi seperti gtk_main() gtk_init() dan lainnya, karena ini sudah dibahas pada tutorial sebelumnya. Disini saya hanya akan membahas bagaimana menggunakan fungsi yang berkaitan dengan GtkCheckButton saja.

1. GtkWidget* gtk_check_button_new(void)
Fungsi ini digunakan untuk membuat check button tanpa label.

2. GtkWidget* gtk_check_button_new_with_label(const gchar* label)
Fungsi ini digunakan untuk membuat check button dengan label.

3. GtkWidget* gtk_check_button_new_with_mnemonic(const gchar* label)
Fungsi ini digunakan untuk membuat check button dengan label disertai mnemonic. Kode huruf yang digunakan mnemonic harus ditambah underscore di belakangnya.

4. gboolean gtk_toggle_button_get_active (GtkToggleButton *toggle_button)
Fungsi ini digunakan untuk memeriksa status apakah check button dicentang atau tidak. Jika nilai return adalah TRUE, artinya check button sedang dicentang, begitu pula sebaliknya.

5. void gtk_toggle_button_set_active (GtkToggleButton *toggle_button, gboolean is_active)
Fungsi ini digunakan untuk memberi centang atau menghilangkan centang check button. Keadaan centang ditentukan oleh parameter is_active. Kode ini sengaja tidak saya sertakan implementasinya, harapannya anda bisa melakukan eksperimen sendiri untuk membuktikan cara kerjanya.

Oiya, saya juga ingin sedikit menambahkan. Fungsi gtk_toggle_button_get_active() dan gtk_toggle_button_set_active() bukan hanya digunakan untuk check button, anda juga bisa menggunakanya untuk GtkToggleButton dan GtkRadioButton. Untuk implementasi  GtkToggleButton dan GtkRadioButton akan dibahas pada tutorial selanjutnya.

Hasil

Begitulah hasilnya gan :)
Selamat mencoba :)
Load disqus comments

0 comments