====== Usare il widget Gtk.Treeview in Vala ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//17/12/2015 - 12:34//** \\ \\ {{:programmazione:vala:2015-12-17_123704.png?300|}} Di seguito viene mostrato come usare il treeview associato a una semplice struttura di tipo treeview. ===== Il codice ===== **treeview.vala** using Gtk; public class TreeViewSample : Window { TreeView view ; public TreeViewSample () { this.title = "Esempio utilizzo TreeView"; set_default_size (350, 200); view = new TreeView (); setup_treeview (view); add (view); this.destroy.connect (Gtk.main_quit); } private void setup_treeview (TreeView view) { /* Preparo il liststore che conterra' i dati e il treeview che * li mostrera' */ //Struttura delle colonne per il modello dei dati var listmodel = new Gtk.ListStore (4, typeof (string), typeof (string), typeof (string), typeof (string)); //Attribuiamo al treeview il modello (un liststore) view.set_model (listmodel); //Inseriamo e formattiamo le colonne del del treeview view.insert_column_with_attributes (-1, "Nome", new CellRendererText (), "text", 0); view.insert_column_with_attributes (-1, "Cognome", new CellRendererText (), "text", 1); var cell = new CellRendererText (); //l'ultima colonna puo' essere formattata con i colori cell.set ("foreground_set", true); view.insert_column_with_attributes (-1, "Email", cell, "text", 2, "foreground", 3); /*Adesso aggiungiamo i dati. Faremo uso di un iteratore, una sorta di contatore/segnaposto * per le righe (iter). I dati si aggiungono al liststore e automaticamente vengono mostrati sul * treeview * */ TreeIter iter; listmodel.append (out iter); listmodel.set (iter, 0, "Fabio", 1, "Di Matteo", 2, "fa@mail.com", 3, "blue"); listmodel.append (out iter); listmodel.set (iter, 0, "Rita", 1, "Bella", 2, "mail@rita.com", 3, "blue"); listmodel.append (out iter); listmodel.set (iter, 0, "Chester", 1, "Cane", 2, "chester@mail.com", 3, "blue"); listmodel.append (out iter); listmodel.set (iter, 0, "Mone'", 1, "Gatto", 2, "gatto@mail.com", 3, "blue"); //Al click su una riga prelevo il testo della stessa view.get_selection().changed.connect(()=>{ //Prelevo la selezione(singola riga) Gtk.TreeSelection selection= view.get_selection(); selection.set_mode(SelectionMode.SINGLE); //Struttura d'appoggio per prelevare i dati(un'altra...!) Gtk.TreeModel model; if (selection.get_selected (out model, out iter)) { //Le stringhe dei campi che prelevero' dalla selezione string Nome, Cognome, Email; //Prendo il contenuto della colonna 0 e lo metto nella //variabile "Nome". Faccio lo stesso con le altre col. model.get (iter, 0, out Nome); model.get (iter, 1, out Cognome); model.get (iter, 2, out Email); //Stampo la riga selezionata sul titolo della finestra this.set_title(Nome+" "+Cognome+" "+Email); } }); } public static int main (string[] args) { Gtk.init (ref args); var sample = new TreeViewSample (); sample.show_all (); Gtk.main (); return 0; } } Compilare con : valac --pkg gtk+-2.0 treeview.vala -o treeview-gtk2