====== 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