Menggunakan Tabel

Satu lagi cara menempatkan widget ke dalam kontainer yaitu dengan tabel. Pertama kita fungsi gtk_table_new() :

GtkWidget *gtk_table_new( guint    rows,
guint columns,
gboolean homogeneous );

Argumen pertama adalah jumlah baris, dan argumen kedua adalah jumlah kolom. Sedangkan argumen ketiga berhubungan dengan ukuran kotak dalam tabel. Jika TRUE ukuran kotak tabel mengikuti ukuran child yang paling besar, jika FALSE ukuran kotak tabel mengikuti child yang paling tinggi dalam baris yang sama dan child yang paling lebar dalam kolom yang sama.

Untuk penempatan child dalam tabel digunakan sistem koordinat dengan sumbu x dari 0 sampai jumlah kolom dan sumbu y dari 0 sampai jumlah baris.

Jika jumlah barisnya 2 dan jumlah kolomnya 2 maka tabelnya akan seperti :

 0          1          2
0+----------+----------+
| | |
1+----------+----------+
| | |
2+----------+----------+

Contoh program, tablepack.c, berikut akan banyak menjelaskan pemakaian tabel untuk menempatkan widget.

#include <gtk/gtk.h>

/* Mencetak pesan ke stdout */
void callback( GtkWidget *widget,
gpointer data )
{
g_print ("Hello again - %s was pressed\n", (char *) data);
}

/* Fungsi callback untuk keluar dari program */
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return FALSE;
}

int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *table;

gtk_init (&argc, &argv);

/* Window baru */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* Judul window */
gtk_window_set_title (GTK_WINDOW (window), "Table");

g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);

/* Setting tebal pinggiran */
gtk_container_set_border_width (GTK_CONTAINER (window), 20);

/* Buat tabel 2x2 */
table = gtk_table_new (2, 2, TRUE);

/* Letakkan ke dalam window */
gtk_container_add (GTK_CONTAINER (window), table);


button = gtk_button_new_with_label ("button 1");

g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (callback), (gpointer) "button 1");


/* Letakkan tombol di kiri atas tabel */
gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 0, 1);

gtk_widget_show (button);

/* Tombol ke dua */

button = gtk_button_new_with_label ("button 2");

g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (callback), (gpointer) "button 2");
/* Letakkan tombol 2 di kanan atas */
gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 0, 1);

gtk_widget_show (button);


button = gtk_button_new_with_label ("Quit");

g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (delete_event), NULL);

/* Lettakan di bawah */
gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 2, 1, 2);

gtk_widget_show (button);

gtk_widget_show (table);
gtk_widget_show (window);

gtk_main ();

return 0;
}




Fungsi yang digunakan untuk meletakkan widget ke dalam tabel adalah :

void gtk_table_attach( GtkTable         *table,
GtkWidget *child,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach,
GtkAttachOptions xoptions,
GtkAttachOptions yoptions,
guint xpadding,
guint ypadding );

tabel adalah pointer ke tabel kontainer, child adalah widget yang akan ditempatkan ke tabel, left_attach/right_attach adalah ujung kiri dan kanan pada sumbu x, top_attach/bottom_attach adalah ujung atas dan bawah pada sumbu y.

yoptions/xoptions adalah pilihan jika terjadi perubahan ukuran tabel atau kontainernya. Pilihan itu terdiri dari :



xpadding/ypadding, berapa ruang yang akan digunakan disekitar widget, dalam satuan pixel.



Karena gtk_table_attach() mempunyai argumen yang banyak maka ada fungsi lain yang lebih ringkas yaitu :

void gtk_table_attach_defaults( GtkTable  *table,
GtkWidget *widget,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach );

dengan nilai default option x dan y adalah GTK_FILL | GTK_EXPAND dan padding x dan y bernilai 0.

Terdapat fungsi lain yaitu :

void gtk_table_set_row_spacing( GtkTable *table,
guint row,
guint spacing );

dan

void gtk_table_set_col_spacing ( GtkTable *table,
guint column,
guint spacing );

Fungsi-fungsi ini akan mengatur ruang diantara kolom dan baris. Untuk kolom tambahan ruang di sebelah kanan. Untuk baris tambahan ruang di bawah. Kecuali untuk kolom paling kanan atau baris paling kiri, tidak akan ada tambahan ruang.

Untuk mengatur ruang di semua kolom dan baris dapat menggunakan fungsi :

void gtk_table_set_row_spacings( GtkTable *table,
guint spacing );

dan

void gtk_table_set_col_spacings( GtkTable *table,
guint spacing );

Widget kontainer yang lain



Pada umumnya widget untuk penempatan yang digunakan adalah box dan tabel. Selain itu juga terdapat kontainer lain yang digunakan dalam situasi khusus :

<<Kontainer dan Peletakan Widget Dasar-dasar Gtk+
TreeView>>
Hosted by www.Geocities.ws

1