2013-03-05 11 views
5

ビルダーを使用してコンテンツをロードする新しいウィジェットを作成できることが理想的です。 this =が無効な割り当てであるため、ビルダーの内容を使用してVala Gtkオブジェクトを作成する

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

は明らかにこれは動作しませんが、ビルダーからロードされたものを使用して、ウィジェットの内容を設定する方法がある場合、私は思ったんだけど。私は

作業を行い
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); 

this = ...を交換しましたが、それはまだで直接読み込むことができるように私には理にかなって。

おかげで、その間については

答えて

1

いいえ、できません。 Gtk.Builderhas thisへのC++バインディングですが、残念ながらC++テンプレートに依存しており、他のバインディングでは実装されていません。

+0

で、あまりにも悪いです。あなたはcontent_areaを元気づけるアプローチに何か問題があると思いますか? –

+0

私にはうまく見えます。 – ptomato

2

これはGearyで広範に行います。私が最もよく使ったトリックは、Gladeのオブジェクト(つまり、Gtk.Dialog)を、その内容だけを構築することではありません。次に、ダイアログ/ウィンドウ自体をValaでコーディングすることができます。

Glade 3.15が出てくる前に、これはボックス、グリッド、その他のコンポーネントをトップレベルとして明示的にサポートしていなかったので、それは苦痛でした。あなたがまだアップグレードしていない場合は、私はそれをお勧めします。

+0

ああ、面白いことに、これまで使っていなかったので、箱を何年も使っていないからです。ありがとう、それは私が今からやっていることですが、コンテンツの再育成は機能しません。ただ今は不必要なようです。 –

3

今後誰かがこの質問に遭遇する場合、Vala 0.22は複合ウィジェットテンプレートを特徴としています。複合テンプレートを使用すると、Gladeでウィジェットを定義し、属性を使用して、Gtk.Builderを手動で使用することなく、クラスのどのビットがウィジェットのどの要素を参照し、コールバックに接続するかを伝えることができます。

詳細はhttp://blogs.gnome.org/tvb/2013/05/29/composite-templates-lands-in-vala/

関連する問題