Jumat, 20 Februari 2015

GTK Programming : Input Text dengan GtkEntry


GtkEntry juga merupakan jenis widget esensial alam pembuatan software. Widget ini sangat erat kaitannya dengan keyboard. Fungsi widget ini yaitu untuk menerima karakter yang telah diketik oleh user. GtkEntry hanya untuk menerima input dalam satu baris teks saja. Teks yang ditampilkan secara multiline harus dibuat dengan widget GtkTextView.

Banyak sekali fungsi API yang dapat kita gunakan untuk memanipulasi GtkEntry. Namun, karena masih dalam tahap awal, tutorial ini hanya menjelaskan fungsi dasarnya saja.

Let's Start
Pertama-tama, kita akan mengetahui bagaimana membuat widget GtkEntry. Setelah itu, beberapa API juga akan kita gunakan untuk mengolah teks dari dalam GtkEntry.

Sebelum membuat widget, perlu Anda ketahui bahwa GtkEntry sangat erat kaitannya dengan GtkEntryBuffer. Widget ini bersifat invisible, tidak untuk ditampilkan dan hanya berperan sebagai pelengkap. GtkEntryBuffer merupakan widget tersembunyi yang membantu GtkEntry menyimpan teks di dalamnya.

Fungsi gtk_entry_new() akan membuat GtkEntry sekaligus membuat serta menghubungkannya dengan GtkEntryBuffer. Jika mau, kita juga bisa membuat objek GtkEntryBuffer sendiri dengan gtk_entry_buffer_new(), lalu membuat GtkEntry dan menghubungkan GtkEntryBuffer dengan fungsi gtk_entry_new_with_buffer(). Untuk membantu Anda lebih mudah memahaminya, tutorial ini hanya mencangkup fungsi gtk_entry_new()  saja.

Berikut prototype fungsinya:
GtkWidget *gtk_entry_new (void);

Setelah dibuat dan ditampilkan, sekarang widget dapat menerima input teks dari keyboard. Jika diperlukan, Teksdalam widget dapat diubah dengan fungsi gtk_entry_set_text(). Kemudian Anda juga bisa mengekstrak teks dari widget tersebut dengan memanggil fungsi gtk_entry_get_text(),
void gtk_entry_set_text (GtkEntry *entry, const gchar *text);

Fungsi di atas membutuhkan 2 argumen untuk bekerja. Dai parameterpertama, yaitu entry, adalah widget GtkEntry yang akan diubah teksnya. Lalu yang kedua, text, adalah text yang ingin ditampilkan pada widget.
const gchar *gtk_entry_get_text (GtkEntry *entry);

Fungsi untuk mengekstrak teks berbentuk seperti di atas. Satu buah parameter merupakan GtkEntry yang ingin diketahui teksnya. Dari hasil pemanggilan fungsi, kita akan memperoleh sebuah pointer ke teks yang ditampilkan oleh widget.

Fungsi lain yang mungkin harus kita ketahui adalah gtk_entry_get_text_length(), untuk mengetahui jumlah huruf dalam teks dan gtk_entry_set_max_length(), untuk membatasi jumlah huruf dalam GtkEntry.
guint16 gtk_entry_get_text_length (GtkEntry *entry);

Parameter entry adalah GtkEntry yang ingin diketahui panjang hurufnya. Setelah memanggil fungsi, kita mendapatkan return berupa panjang huruf.
void gtk_entry_set_max_length (GtkEntry *entry, gint max);

Parameter pertama, yaitu entry adalah GtkEntry yang ingin diatur, lalu parameter max berupa panjang huruf maksimum.

Source Code
Kode berikut akan menampilkan window berisi sebuah GtkEntry dan GtkButton. Button ini untuk membuktikan cara kerja fungsi-fungsi yang dijelaskan di atas.


#include<gtk/gtk.h>

GtkWidget *window, *box, *entry, *button;

void button_clicked(GtkButton *button, gpointer user_data)
{
    const gchar *teks = gtk_entry_get_text(GTK_ENTRY(entry));
    guint16 panjang = gtk_entry_get_text_length(GTK_ENTRY(entry));
    g_print("Teks: %s\nPanjang: %d\n",teks, panjang);
    return;
}

int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);
    //window baru
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Hello world");
    //buat gtkbox horisontal lalu pasang ke window
    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat GtkEntry, set text, set max length
    entry = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(entry),"Hello");
    gtk_entry_set_max_length(GTK_ENTRY(entry),10);
    //buat button, connect signal
    button = gtk_button_new_with_label("Tampil");
    g_signal_connect(button, "clicked", G_CALLBACK(button_clicked), 0);
    //pasang entry dan button ke box
    gtk_box_pack_start(GTK_BOX(box),entry,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),button,TRUE,TRUE,10);
    //tampilkan widget
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}


Hasil

Load disqus comments

0 comments