きくたにです。
akaishiさんのページを参考にようやくruby/gtkに
手を染めました。まずは Treeウィジェット の例を参考に
file viwer風のもの。
「Developing Linux Applications with GTK+ and GDK」
という本も参考にしてます。
-------------------------------------------------------
require 'gtk'
require 'find'
if ARGV.size == 0
printf("usage %s directory\n", $0)
exit
end
top = ARGV.shift
dir = {}
window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
window.border_width = 2
window.set_title 'Files using trees'
# Vertical box
box1 = Gtk::HBox::new(FALSE, 0)
window.add box1
box1.show
# create scrolleed window for the tree
scrolled_win = Gtk::ScrolledWindow::new()
scrolled_win.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC)
box1.pack_start(scrolled_win, TRUE, TRUE, 0)
scrolled_win.set_usize 250, 250
scrolled_win.show
# create root tree widget
tree = Gtk::Tree.new
tree.show
# add the tree to the scrolled window
scrolled_win.add_with_viewport tree
# create list box
listbox = Gtk::List::new()
listbox.set_usize 250, 250
box1.pack_start(listbox, TRUE, TRUE, 0)
listbox.show
# create a subtree
dir[File.dirname(top)] = tree
Find.find(top) do |f|
dirname = File.dirname(f)
item = Gtk::TreeItem.new(File.basename f)
item.signal_connect('select') do
if File.directory? f
if (c = listbox.children) != []
listbox.clear_items(0, c.size)
end
Dir.foreach(f) do |fn|
list_item = Gtk::ListItem::new(fn)
listbox.add list_item
list_item.show
end
end
end
dir[dirname].append item
if File.directory? f
item.show
dir[f] = Gtk::Tree.new
item.set_subtree dir[f]
end
end
window.show
Gtk.main
-------------------------------------------------------
質問は、
「右のファイル名が出てくるところにもスクロールバーを付けたい」
です。いろいろ試行錯誤したけどわからなかったんで。
あと、なんだか「すっごく遅い」んですけど。
起動が遅いのは全階層読んじゃうんでしかたがないけど、
ディレクトリ名クリックしてファイル名が出てくるまでも
やけに時間かかるのはなぜ?
ruby-1.2.5 + libgtk-1.2 + ruby-gtk-pre0.17.tar.gz + 保科パッチ
です。
なお、サブジェクトは、菊谷が入門するんであって、菊谷が
入門書を書くわけではありません。あたりまえのことです。
--
Kikutani, Makoto kikutani / sprintmail.com