こんにちわ。原田@JDNです。

平松さん、気に留めていただいてありがとうございます。
全然遅くないです。
以前投稿したときは、RubyとはTkとは・・?と、言う段階だったので。
実際に仕事で使うのはこれからですので、必要になったら是非使わせていただきます。



> 平松です。
> 
> [ruby-list:16048]で原田さんが、menu_specを使って
> 
> [hoge]----[hoge1]
>        |--[hoge2]---[submenu1]
>        |          |-[submenu2]
> 
> といったメニュー階層を作りたいと発言していました。これが気になっていた
> ので、tkmenubar.rbを真似して「仕事の間の気晴らしに」作ってみました。
> 
> # って、原田さんにはもう遅いですか……。
> 
> $file = [['Open', proc{puts 'open'}, {'underline' => '0', 'foregrount'=>'blue'}],
>          ['Save', proc{puts 'save'}, {'accelerator' => 'Ctrl+S'}],
>          '---',
>          ['Quit', proc{exit}]]
> 
> $manual = [['Tutorial', proc{puts 'tutorial'}],
>            ['User Guide', proc{puts 'user guide'}],
>            ['Reference', proc{puts 'reference'}]]
> $help = [['Manual', $manual],
>          ['About', proc{puts 'about'}]]
> 
> add_menu [['File', $file, {'underline' => 0}], ['Help', $help]], {'tearoff'=>false}
> 
> のようにすると、トップレベルのウィンドウにサブメニューを持ったメニュー
> バーが付きます。以下がその add_menu 関数のソースです。Tcl/Tkのバージョ
> ン8.0以上でないと動かないと思います。
> 
> def make_menu(menu_info, parent, args)
>   menu = TkMenu.new(parent, args)
>   for m in menu_info
>     if m[1].kind_of?(Array)
>       options = Hash.new
>       options['label'] = m[0]
>       options['menu'] = make_menu(m[1], menu, args)
>       options.update(m[2]) if m[2]
>       menu.add('cascade', options)
>     elsif m[1].kind_of?(Proc)
>       options = Hash.new
>       options['label'] = m[0]
>       options['command'] = m[1]
>       options.update(m[2]) if m[2]
>       menu.add('command', options)
>     elsif /^-+$/ =~ m
>       menu.add('separator')
>     else
>       menu.add('command', 'label' => m)
>     end
>   end    
>   return menu
> end
> 
> def add_menu(menu_info, option = nil)
>   root = Tk.root
>   mbar = make_menu menu_info, root, option
>   root.configure 'menu', mbar
> end
> 
> -- 
> // Linux Japan編集部
> // 平松祥史(Hiramatsu, Yoshifumi) Mail: hiramatsu / linuxjapan.com
> // 〒101-0021 東京都千代田区外神田5-6-12 コーワビル3 3階 
> // Tel: 03-5818-6608   Fax: 03-5818-6613
> 
> 



_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>

    原田 <jdn / po.synapse.ne.jp>

_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>