27
juillet
2013
[Vala/Gtk] composer une fenêtre Gtk depuis un modèle json
juillet
2013
Un article de Rachel
Pas de commentaires
un petit billet pour informer de l’avancement de mee. l’api étant à point, j’ai eu l’idée folle de construire des fenêtres Gtk depuis leur modèle Json, comme cela se fait déjà avec Xml. du coup ça fait un tout nouvel espace de nom, MeeGtk. il inclut bien évidemment un constructeur Xml, et Json.
Voici un exemple simple :
using MeeGtk;
void main(string[] args){
init(null);
var toto = new Toto();
toto.show_all();
Gtk.main();
}
public class Toto : GLib.Object
{
string s = """{
"interface" : [
{
"class" : "GtkWindow",
"id" : "window",
"properties" : {
"can_focus" : false
},
"children" : [
{
"class" : "GtkButton",
"id" : "btn",
"properties" : {
"label" : "titre"
},
"signals" : {
"clicked": { "handler": "toto_on_btn_clicked", "swapped": false }
}
}
]
}
]
}""";
Gtk.Window window;
public Toto(){
var c = new Constructor();
c.load_from_data(s);
c.connect_signals(this);
window = (Gtk.Window)c["window"];
}
public void show_all(){ window.show_all(); }
[CCode(instance_pos = -1)]
public void on_btn_clicked(Gtk.Widget widget){ Gtk.main_quit(); }
}
void main(string[] args){
init(null);
var toto = new Toto();
toto.show_all();
Gtk.main();
}
public class Toto : GLib.Object
{
string s = """{
"interface" : [
{
"class" : "GtkWindow",
"id" : "window",
"properties" : {
"can_focus" : false
},
"children" : [
{
"class" : "GtkButton",
"id" : "btn",
"properties" : {
"label" : "titre"
},
"signals" : {
"clicked": { "handler": "toto_on_btn_clicked", "swapped": false }
}
}
]
}
]
}""";
Gtk.Window window;
public Toto(){
var c = new Constructor();
c.load_from_data(s);
c.connect_signals(this);
window = (Gtk.Window)c["window"];
}
public void show_all(){ window.show_all(); }
[CCode(instance_pos = -1)]
public void on_btn_clicked(Gtk.Widget widget){ Gtk.main_quit(); }
}
c’est encore expérimental, reste à lier les signaux comme avec la version Xml.
Edit : possibilité de connecter les signaux du json maintenant.
pour compiler ce test :
valac main.vala --pkg mee-gtk --pkg gmodule-2.0