2013-03-05 14 views
5

Byłoby idealnie, gdyby można było utworzyć nowy widget, który używa budowniczego do ładowania jego zawartości, np.Konstruowanie obiektu Vala Gtk przy użyciu zawartości konstruktora

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; 
     } 
    } 

Oczywiście to nie zadziała, ponieważ this = jest nieważny zadanie, ale zastanawiam się, czy istnieje sposób, aby ustawić zawartość widget za pomocą tych, które zostały załadowane z budowniczego.

Dla międzyczasie ja zastąpiła this = ... z

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); 

który działa, ale nadal ma sensu dla mnie, aby móc załadować bezpośrednio.

Dzięki.

Odpowiedz

1

Nie, niemożliwe. Wiązanie C++ do Gtk.Builderhas this, ale niestety opiera się na szablonach C++ i nie zostało zaimplementowane w żadnym innym powiązaniu.

+0

Hmm, szkoda. Czy sądzisz, że coś jest nie tak z podejściem polegającym na ponownym nadawaniu treści? –

+0

Wygląda dobrze dla mnie. – ptomato

2

Robimy to intensywnie w Geary. Sztuczka, której najbardziej używałem, nie polega na budowaniu obiektu zawierającego (tzn. Gtk.Dialog) na Polanie, tylko na jej zawartości. Następnie możesz zakodować okno dialogowe/okno w Vala.

To był rodzaj bólu, aby zrobić, zanim pojawiła się Glade 3.15, ponieważ nie obsługuje wyraźnie Box, Grid i innych składników, jak toplevels. Jeśli jeszcze się nie uaktualniłeś, polecam go.

+0

Huh, to zabawne, ponieważ od lat nie próbowałem używać pudełka jako najwyższego poziomu, ponieważ nigdy nie działało. Wielkie dzięki, że to, co będę robić od teraz, nie, że ponowne rodzicielstwo treści nie działa, teraz wydaje się po prostu niepotrzebne. –

3

W przypadku, gdy ktokolwiek natknie się na to pytanie w przyszłości, Vala 0.22 oferuje złożone szablony widżetów, które są znacznie łatwiejszym rozwiązaniem powyższego problemu. Szablony złożone pozwalają na zdefiniowanie widżetu na Polanie i użycie atrybutów do poinformowania Vali, które bity twojej klasy odnoszą się do elementów widgetu i do łączenia wywołań zwrotnych, bez konieczności ręcznego korzystania z nich.

Szczegóły można znaleźć pod adresem http://blogs.gnome.org/tvb/2013/05/29/composite-templates-lands-in-vala/

Powiązane problemy