Membuat Komponen View

Setelah ada beberapa model yang dapat dipilih, tinggal satu lagi widget yang perlu kita tangani. Widget ini bekerja baik pada list store maupun tree store. Pengaturan GtkTreeView tidaklah sulit. Ia membutuhkan GtkTreeModel untuk tahu darimana data diterima :


GtkWidget *tree;

tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));

Renderer Kolom dan Cell

Setelah widget GtkTreeView memiliki sebuah model, ia perlu tahu bagaimana menampilkan model tersebut. Hal tersebut dilakukan dengan renderer kolom dan cell.

Renderer cell digunakan untuk menuliskan data di model percabangan (tree) dengan cara tertentu. Ada sejumlah renderer cell yang ada di GTK+2.x, termasuk GtkCellRendererText, GtkCellRendererPixbuf dan GtkRendererCellToogle. Cenderung mudah untuk menulis renderer baru yang terkustomisasi.

GtkTreeViewColumn adalah objek yang digunakan oleh GtkTreeView untuk mengorganisir kolom vertikal dalam tampilan percabangan. Ia perlu mengetahui nama dari kolom untuk memberikan label pada pengguna, tipe apa yang digunakan oleh renderer cell, dan data mana yang diambil dari model dimana baris tersebut ada.


GtkCellRenderer *renderer;
GtkTreeViewColumn *column;

renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Author",
                                                   renderer,
                                                   "text", AUTHOR_COLUMN,
                                                   NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);

Sampai titik ini, keseluruhan tiga langkah untuk membuat percabangan yang dapat ditampilkan telah tertangani semuanya. Model telah dibuat, data sudah dimaukkan dan penampil percabangan (tree) sudah dibuat serta kolom sudah ditambahkan ke dalamnya.


Penanganan Seleksi

Kebanyakan aplikasi akan membutuhkan tidak hanya bagaimana berurusan dengan cara menampilkan data, tetapi juga menerima input dari pengguna. untuk melakukan ini, dengan mudah dapatkan suatu referensi ke objek yang dipilih dan hubungkan dengan sinyal “changed” :

/* Prototype for selection handler callback */
static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data);

/* Setup the selection handler */
GtkTreeSelection *select;

select = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
g_signal_connect (G_OBJECT (select), "changed",
                  G_CALLBACK (tree_selection_changed_cb),
                  NULL);

Kemudian untuk menerima data yang ada di baris yang dipilih :

static void
tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data)
{
        GtkTreeIter iter;
        GtkTreeModel *model;
        gchar *author;

        if (gtk_tree_selection_get_selected (selection, &model, &iter))
        {
                gtk_tree_model_get (model, &iter, AUTHOR_COLUMN, &author, -1);

                g_print ("You selected a book by %s\n", author);

                g_free (author);
        }
}

Bersambung (rezaervani@gmail.com)

Sumber : GTK+ Reference Manual