近藤と申します。質問ばかりですみません。

ruby + Tk で ツリー状の階層構造を一覧できる Widget ( MS-Windows では 
TreeView って言うんですか?)を必要としています。

すでに作られたものがありますか?
あるのならば、それを使いたいと思います。

自分でも、以下のようなものを作り始めたのですが、
できれば、他の人にも使ってもらえるようなものにしてゆきたいと思います。

o データの渡し方はこれで良いのか?
o tk_send を使って activate を自前で作ったが、TkListbox を変更した方が
  良いのではないか?
o TkListbox から継承するのが本当に良いのか?
o 操作方法や見かけはどういう風にしたほうが良いのか?

の疑問や、その他全体についてアドバイスを教えて下さい。

環境は、ruby 1.1b9、libtk4.2jp です。

--
近藤靖浩 <nkon / osk2.3web.ne.jp>
http://www2.osk.3web.ne.jp/~nkon/3web/

-- tree.rb
#!/usr/local/bin/ruby
# tree.rb
# Widget of Tree Control 

# $DEBUG=1

require "tk"

class TkTree < TkListbox
  def initialize(parent=nil, keys=nil)
	super
print "TkTree#initialize: #{path}\n" if $DEBUG
	bind("Double-1", proc{action})
	@tree = Array.new
	@list = Array.new
	bind("Key-Return", proc{action})
  end

  def action
print "TkTree#double_click: curselection=#{curselection}\n" if $DEBUG
	item = @list[curselection]
	if (item['child'])
	  open_or_close(item)
	end
  end

  def open_or_close(item)
	if (item['expand'])
	  item.delete('expand')
	else
	  item['expand'] = 1
	end
	draw
  end

  def draw
	anc_item = @list[curselection]
	delete(0,'end')
	ind = 0; n = 0
	@tree.each{|item| n = _draw_sub(n, ind, item) }
	activate(anc_item['n']) if anc_item
	selection_anchor(anc_item['n']) if anc_item
	see('anchor')
  end

  def activate(y)
	tk_send 'activate', y
  end

  def _draw_sub(n, ind, item)
	item['indent'] = ind; item['n'] = n
	@list[n] = item
	if (item['child'])
	  if (item['expand'])
		insert(n, "#{' '*ind}V #{item['name']}")
		n = n+1
		item['child'].each{|i|
		  n = _draw_sub(n, ind+1, i)
		}
	  else
		insert(n, "#{' '*ind}> #{item['name']}")
	  n = n+1
	  end
	else
	  insert(n, "#{' '*ind}- #{item['name']}")
	  n = n+1
	end
	return n
  end
  private :_draw_sub

  def tree; return @tree; end
  def tree=(tree); @tree=tree; end
end


# test program

tree = TkTree.new
tree.pack 'side'=>'left'

tree.tree=[
  {'name'=>'item1'},
  {'name'=>'item2'},
  {'name'=>'group3','child'=>[
	  {'name'=>'item31'},
	  {'name'=>'item32'},
	  {'name'=>'group33', 'child'=>[
		  {'name'=>'item331'}
		]}
	]},
  {'name'=>'group4','child'=>[
	  {'name'=>'item41'},
	  {'name'=>'item42'},
	  {'name'=>'group43', 'child'=>[
		  {'name'=>'item431'}
		]}
	]},
]
tree.draw

Tk.mainloop