きたさん
むとうです。チュートリアル、良い感じで進んでますね。
ちょっと、ファイルセレクションのところで、気づいたので
コメントさせていただきます。
ファイルセレクションはダイアログのサブクラスですので
Gtk::Dialog#runを使えます。
で、
filew.ok_button.signal_connect("clicked") {puts "#{filew.filename}"}
という形でシグナルに接続する方法は、今後ほとんど使われないはずです。
というのは、普通、ファイルセレクションをダイアログ画面は、
親画面が呼び出して、処理が終了するまではファイルが選択される
まで待ちにしたい場合がほとんどだからです。
例えば、親画面のボタンに対し、きたさんの例を埋め込むと
以下のようなイメージになります。
parent_button.signal_connect("clicked") do
filew = Gtk::FileSelection.new("File selection")
filew.signal_connect("destroy") {Gtk.main_quit}
filew.ok_button.signal_connect("clicked") {puts "#{filew.filename}"}
filew.cancel_button.signal_connect("clicked") {filew.destroy}
filew.filename = "penguin.png"
filew.show
@filename = filew.filename #(1)
end
実は、これだけでは、ファイルセレクションのOKボタンが押されることもなく
parent_buttonのclickedシグナル発生時の処理が終了してしまいます。
したがって、(1)の値は想定したとおりにはならないはずです。
これを防ぐためには、以下のようなコードを入れます。
parent_button.signal_connect("clicked") do
filew = Gtk::FileSelection.new("File selection")
filew.signal_connect("destroy") {Gtk.main_quit}
filew.ok_button.signal_connect("clicked") {
@filename = filew.filename
}
filew.cancel_button.signal_connect("clicked") {filew.destroy}
filew.filename = "penguin.png"
filew.show
Gtk.main
end
でも、この書き方は面倒くさいし間違えやすいのでrunを使うというわけです。
上のコードと以下は同等になります。
#試していないので間違えてるかも(^^;)。
parent_button.signal_connect("clicked") do
filew = Gtk::FileSelection.new("File selection")
filew.filename = "penguin.png"
if filew.run == Gtk::Dialog::RESPONSE_OK
puts "OK"
@filename = filew.filename
end
end
もちろん、ダイアログの特殊な使い方として、signal_connectを扱うのは
まったく問題ないですが、最初の例としてはGtk::ColorSelectionDialog
と同じ形態のサンプルを先に説明した方が良いと思います。
ちなみに、
Gtk::FileSelection#dir_list,#file_list, #selections, ....
等は、よくhideを使ってコンポーネントを隠すのに使いますので、
その例が載っていたりするとさらに良いかも。
#例えば、選択させたいけどファイル削除とかは一切なしよ、とか
#いう指定の時とか、ディレクトリ一覧だけ表示されればよいから
#ファイル一覧は表示しないよとか。
--
.:% Masao Mutoh<mu...@hi...>
|