Membuat Suatu Model

GTK+ menyediakan dua model sederhana yang dapat digunakan : GtkListStore dan GtkTreeStoder. GtkListStore digunakan untuk memodel widget list, sementara GtkTreeStore pemodelan percabangan. Adalah mungkin untuk mengembangkan tipe model yang baru, tetapi model yang ada seharusnya sudah memenuhi kebutuhan yang ada, kecuali mungkin beberapa kebutuhan yang tidak biasa

Membuat model dapat dilakukan dengan cara sederhana :


GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);

Perintah diatas membuat sebuah list store dengan dua kolom, kolom dengan tipe data string dan kolom dengan tipe data boolean. Umumnya tidak langsung ditulis dengan angka 2 seperti diatas, tetapi sebuah enum dibuat untuk mengenali kolom-kolom berbeda yang dienumerasi diikuti sebuah token yang merepresentaikan jumlah total kolom. Contoh berikut ini akan mengilustrasikan hal tersebut, hanya saja menggunakan sebuah tree store bukan list store.


enum
{
   TITLE_COLUMN,
   AUTHOR_COLUMN,
   CHECKED_COLUMN,
   N_COLUMNS
};

GtkTreeStore *store = gtk_tree_store_new (N_COLUMNS,       /* Total number of columns */
                                          G_TYPE_STRING,   /* Book title              */
                                          G_TYPE_STRING,   /* Author                  */
                                          G_TYPE_BOOLEAN); /* Is checked out?         */

Menambahkan data ke dalammodel dilakukan dengan menggunakan gtk_tree_store_set() atau gtk_list_store_set(), bergantung jenis model yang dibuat. Untuk melakukan ini GtkTreeIter mestilah disertakan. Iterator menunjukan lokasi dimana data akan ditambahkan.

Sekali iterator ditentukan, gtk_tree_store_set() digunakan untuk menerapkan data pada bagian dari model yang ditunjuk oleh iterator. Perhatikan contoh berikut :


GtkTreeIter   iter;

gtk_tree_store_append (store, &iter, NULL);  /* Acquire an iterator */

gtk_tree_store_set (store, &iter,
                    TITLE_COLUMN, "The Principle of Reason",
                    AUTHOR_COLUMN, "Martin Heidegger",
                    CHECKED_COLUMN, FALSE,
                    -1);

Catat bahwa argumen terakhir adalah -1. Hal ini mesti selalu dilakukan karena ini adalah fungsi variable-argument yang dibutuhkan untuk mengetahui kapan argumen prosesing dihentikan. Dapat digunakan untuk mengset data di suatu kolom atau semua kolom pada baris yang ada.

Argumen ketiga pada gtk_tree_store_append() adalah iterator parent. Digunakan untuk menambahkan baris pada GtkTreeStore sebagai turunan (child) dari baris yang ada. Ini berarti bahwa baris baru hanya akan tampak jika parentnya tampak dan berada dalam kondisi di”exspand” Perhatikan contoh berikut :


GtkTreeIter iter1;  /* Parent iter */
GtkTreeIter iter2;  /* Child iter  */

gtk_tree_store_append (store, &iter1, NULL);  /* Acquire a top-level iterator */
gtk_tree_store_set (store, &iter1,
                    TITLE_COLUMN, "The Art of Computer Programming",
                    AUTHOR_COLUMN, "Donald E. Knuth",
                    CHECKED_COLUMN, FALSE,
                    -1);

gtk_tree_store_append (store, &iter2, &iter1);  /* Acquire a child iterator */
gtk_tree_store_set (store, &iter2,
                    TITLE_COLUMN, "Volume 1: Fundamental Algorithms",
                    -1);

gtk_tree_store_append (store, &iter2, &iter1);
gtk_tree_store_set (store, &iter2,
                    TITLE_COLUMN, "Volume 2: Seminumerical Algorithms",
                    -1);

gtk_tree_store_append (store, &iter2, &iter1);
gtk_tree_store_set (store, &iter2,
                    TITLE_COLUMN, "Volume 3: Sorting and Searching",
                    -1);

Bersambung (rezaervani@gmail.com)

Sumber : GTK+ Reference Manual