From: Masahiro S. ()
<sa...@to...> - 2003-10-25 16:06:37
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: [ruby-gnome2-devel-ja] GLibのregister_type周辺 Date: Tue, 14 Oct 2003 23:25:59 +0900 > さかいさん > > むとうです。 > > Nikolaiにもせっつかれてしまいましたが、 > そろそろ、結論を出したいな、と思っています。 > > たぶん、一番大きな問題は、私が現在のGLibの > 実装ってどういうところまでできてるのか > きちんと把握していないことだと思います。 > > サンプルみたいなのをあげて説明していただけ > るととっても助かるんですが、いかがでしょう。 ではとりあえずサンプルを。 require 'gtk2' Gtk.init class MyButton < Gtk::Button register_type("MyButton") def initialize(label = nil) # XXX: register_typeするとsuperがGLib#initialize相当になる super("label" => label) @fuga = 0 end # 既存のシグナルのデフォルトハンドラをオーバーライド def do_clicked(*args) puts "MyButton#do_clicked enter" #p caller super puts "MyButton#do_clicked leave" end # 新しいシグナルを定義 signal_new("hoge", # 名前 GLib::Signal::RUN_FIRST, # フラグ nil, # accumulator (XXX: 仕様が未確定) GLib::Type["void"], # 返り値の型 GLib::Type["gint"], GLib::Type["gint"] # 引数の型 ) # 新しいシグナルのデフォルトハンドラ def do_hoge(a, b) puts "MyButton#do_hoge enter" #p caller puts "MyButton#do_hoge leave" end # 新しいプロパティの作成 install_property(GLib::Param::Int.new("fuga", # name "Fuga", # nick "fuga hoge", # blurb 0, # min 10000, # max 0, # default GLib::Param::READABLE | GLib::Param::WRITABLE)) # プロパティの実装 def fuga puts "MyButton#fuga is called" @fuga end def fuga=(arg) puts "MyButton#fuga= is called" @fuga = arg end end class MyButton2 < MyButton register_type("MyButton2") # clickedシグナルのデフォルトハンドラをオーバーライド def do_clicked(*args) puts "MyButton2#do_clicked enter" super(*args) puts "MyButton2#do_clicked leave" end # hogeシグナルのデフォルトハンドラをオーバーライド def do_hoge(a, b) puts "MyButton2#do_hoge enter" #p caller super puts "MyButton2#do_hoge leave" end end b = MyButton2.new("Hello") p b p b.label p b.gtype b.clicked b.signal_emit("hoge", 1, 2) p b.get_property("fuga") b.set_property("fuga", 1) p b.get_property("fuga") -- 酒井 政裕 / Masahiro Sakai |