Senin, 14 April 2014

GTK Programming : Menampilkan Message Box dengan widget GtkMessageDialog



Jumpa lagi guys... :)
Pada tutorial - tutorial sebelumnya, kita sudah mempelajari banyak teknik pemrograman dasar GTK, bukan?
Karena terlalu bersemangat kita jadi lupa membahas widget yang cukup sederhana, tapi sangat sering digunakan. Widget yang saya maksud adalah GtkMessageDialog. Widget ini sangat berguna  saat kita ingin menampilkan pesan tanpa membuat window. Jika di Windows, ini lebih sering kita jumpai dengan sebutan MessageBox.

Let's Start
Kode yang saya sertakan di bawah ini akan menampilkan sebuah GtkMessageDialog ketika widget 'button' diklik. Proses penampilan GtkMessageDialog ada pada blok fungsi ButtonClick. Setelah muncul dan user mengeklik salah satu tombol pada GtkMessageDialog, kita membaca hasilnya lalu mencetaknya pada layar konsol.
#include<gtk/gtk.h>

GtkWidget *window, *button, *dialog;

void ButtonCallback(GtkButton *button, gpointer user_data)
{
gint hasil;
dialog = gtk_message_dialog_new (GTK_WINDOW(window), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "Ini adalah Message Dialog");
hasil = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
switch(hasil)
    {
      case GTK_RESPONSE_YES: g_print("Anda mengeklik YES\n");break;
      case GTK_RESPONSE_NO: g_print("Anda mengeklik NO\n");break;
      case GTK_RESPONSE_DELETE_EVENT: g_print("Anda menutup message dialog\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 button
    button = gtk_button_new_with_label("Tampilkan Message Dialog!");
    //hubungkan sinyal
    g_signal_connect(button, "clicked", G_CALLBACK(ButtonCallback), NULL);
    //pasang
    gtk_container_add(GTK_CONTAINER(window), button);
    //tampilkan
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

Saya rasa saya anda telah memahami semua kode yang ada dalam blok main(), karena saya sudah menjelaskan semuanya pada tutorial-tutorial sebelumnya. Jadi, di sini saya hanya akan menjelaskan fungsi inti untuk memunculkan GtkMessageDialog dan mengolah response-nya saja. Semua fungsi ini ada pada blok fungsi ButtonCallback().

Cara kerja MessageDialog sama persis seperti MessageBox di Windows. Setelah kotak pesan selesai ditampilkan, kita akan menerima GTK_RESPONSE, seperti halnya MessageBox. Response ini merupakan informasi yang dapat kita lihat untuk mengetahui tombol mana yang diklik oleh user.

Pada baris kode diatas, proses pembuatan MessageDialog kita lakukan dengan kode berikut.
dialog = gtk_message_dialog_new (GTK_WINDOW(window), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "Ini adalah Message Dialog");

Adapun fungsi prototype gtk_message_dialog_new secara deatil adalah sebagai berikut.
GtkWidget *gtk_message_dialog_new(GtkWindow *parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar *message_format,...);

parent: window(GtkWindow) yang memiliki message dialog ini
flags: cara menampilkan message dialog. Gunakan GTK_DIALOG_MODAL agar message dialog selalu berada di depan parent, atau gunakan GTK_DIALOG_DESTROY_WITH_PARENT agar message dialog dapat dimunculkan bebas dan hilang otomatis saat parent dihapus. 
type: jenis message dialog yag ditampilkan. Parameter ini dapat berupa GTK_MESSAGE_INFO, GTK_MESSAGE_WARNING, GTK_MESSAGE_QUESTION, GTK_MESSAGE_ERROR atau GTK_MESSAGE_OTHER.
Buttons: tombol(GtkButton) yang akan ditampilkan pada message dialog. Parameter ini dapat berupa GTK_BUTTONS_NONE, GTK_BUTTONS_OK, GTK_BUTTONS_CLOSE, GTK_BUTTONS_CANCEL, GTK_BUTTONS_YES_NO atau GTK_BUTTONS_OK_CANCEL
message_format, ... : pesan yang ditampilkan pada message dialog.

Message dialog yang telah dibuat dapat dimunculkan dengan fungsi gtk_dialog_run() diikuti parameter GtkMessageDiaog yang telah kita buat sebelumnya.
hasil = gtk_dialog_run(GTK_DIALOG(dialog));

Fungsi diatas akan menampilkan message dialog dan mengembalikan response dalam bentuk integer saat message dialog ditutup. Nama response berikut adalah jenis response yang dihasilkan berdasarkan tombol yang diklik oleh user : GTK_RESPONSE_DELETE_EVENT, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, GTK_RESPONSE_CLOSE, GTK_RESPONSE_YES, GTK_RESPONSE_NO, GTK_RESPONSE_APPLY atau GTK_RESPONSE_HELP. Anda nanti bisa mencobanya satu persatu untuk melihat perbedaannya.

Setelah selesai, kita harus menghapus widget dari memori, yaitu dengan fungsi gtk_widget_destroy().
gtk_widget_destroy(dialog);
Sebenarnya tidak dihapus tidak masalah, asalkan pembuatan widget GtkMessageDialog cukup dilakukan sekali saja waktu inisialisasi program. Tapi, berhubung kode disini pembuatannya dilakukan saat widget button diklik, kita harus menghapusnya sesegera mungkin setelah selesai dipakai.

Hasil
Dan, seperti inilah hasil yang akan anda dapatkan :)


Selamat mencoba :)
Load disqus comments

0 comments