2013-03-05 12 views
5

Sarebbe ideale essere in grado di creare un nuovo widget che utilizza il builder per caricare il suo contenuto, ad es.Costruire oggetti Gtk di Vala usando il contenuto del builder

public class MyDialog : Dialog 
    { 
    public MyDialog 
     { 
     Gtk.Builder builder = new Gtk.Builder(); 
     builder.add_from_file ("dialog.ui"); 
     this = builder.get_object ("my_dialog") as Gtk.Widget; 
     } 
    } 

Ovviamente questo non funzionerà perché this = è un compito non valida, ma mi chiedo se c'è un modo per impostare il contenuto di un widget utilizzando quelli che sono stati caricati dal costruttore.

Per frattempo ho sostituito il this = ... con

var content = get_content_area(); 
var dialog = builder.get_object ("my_dialog") as Gtk.Widget; 
var _content = (dialog as Dialog).get_content_area(); 
_content.reparent (content); 

che fa il lavoro, ma ancora avrebbe senso per me per essere in grado di caricare direttamente.

Grazie.

risposta

1

No, non possibile. Il binding C++ a Gtk.Builderhas this, ma sfortunatamente si basa su modelli C++ e non è stato implementato in nessun altro binding.

+0

Hmm, troppo male. Pensi che ci sia qualcosa di sbagliato nell'approccio alla riparazione della content_area? –

+0

Sembra a me. – ptomato

2

Lo facciamo ampiamente in Geary. Il trucco che ho usato di più non è di costruire l'oggetto contenitore (cioè il Gtk.Dialog) in Glade, ma solo il suo contenuto. Quindi puoi semplicemente programmare la finestra di dialogo/finestra stessa in Vala.

Questo è stato un po 'difficile da fare prima che Glade 3.15 uscisse dal momento che non supportava esplicitamente Box, Grid e altri componenti come toplevel. Se non hai ancora aggiornato, lo consiglio.

+0

Huh, è divertente perché non ho nemmeno tentato di usare un Box come livello superiore per anni perché non funzionava mai. Grazie mille questo è quello che farò da ora in poi, non che la ri-genitorialità del contenuto non funzioni, sembra solo inutile ora. –

3

Nel caso in cui qualcuno inciampi su questa domanda in futuro, Vala 0.22 presenta modelli di widget compositi, che sono una soluzione molto più semplice al problema precedente. I modelli compositi consentono di definire un widget in Glade e utilizzare gli attributi per indicare a Vala quali bit della classe si riferiscono a quali elementi del widget e per connettere i callback, senza dover utilizzare manualmente Gtk.Builder.

dettagli possono essere trovati a http://blogs.gnome.org/tvb/2013/05/29/composite-templates-lands-in-vala/