treeview2.rb
001 require 'phi'
002 require 'find'
003 require 'dialogs'
004
005 form = Phi::Form.new(:form1, 'フォームです')
006 form.height = 400
007
008 panel = Phi::Panel.new(form, :form1, '')
009 panel.align = Phi::AL_TOP
010 panel.height = 24
011 button = Phi::Button.new(panel, :button1, 'フォルダ選択')
012 button.align = Phi::AL_RIGHT
013 button.width = 100
014 edit = Phi::Edit.new(panel, :edit1, '')
015 edit.align = Phi::AL_CLIENT
016 edit.width = panel.width - button.width
017 edit.text = 'd:/docu/document/apollo'
018
019 show_btn = Phi::Button.new(form, :show_btn1, '表示')
020 show_btn.align = Phi::AL_BOTTOM
021
022 treeview = Phi::TreeView.new(form, :treeview1, '')
023 treeview.align = Phi::AL_CLIENT
024 nodes = treeview.items
025
026 button.on_click = proc do
027 result_path = ''
028 if Phi::select_dir('フォルダーを選択してください', '/', result_path)
029 edit.text = result_path
030 form.set_focus
031 end
032 end
033
034 show_btn.on_click = proc do
035 if edit.text != '' and FileTest::directory?(edit.text)
036 nodes.clear
037 nodes.update {
038 path = File::expand_path(edit.text)
039 dir = {}
040 top_node = nodes.add(nil, File::dirname(path))
041 dir[File::dirname(path)] = top_node
042 Find::find(edit.text) do |f|
043 dirname = File::dirname(f)
044 node = nodes.add_child(dir[dirname], File::basename(f))
045 if FileTest::directory?(f)
046 dir[f] = node
047 end
048 end
049 }
050 else
051 Phi::message_dlg(edit.text + ' はフォルダーではありません。',
052 Phi::MT_ERROR, [Phi::MB_OK], 0)
053 end
054 end
055
056 form.show
057 Phi.mainloop
このスクリプトを実行すると、このような ウィンドウがあらわれます。