1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tk/lib/tk/menubar.rb
nagai 7050e0c745 * ext/tcltklib/extconf.rb: [EXPERIMENTAL] MacOS X (darwin) support
* ext/tcltklib/tcltklib.c: fix thread trouble on callback proc, and
			   eliminate warning about instance variable access
* ext/tk/lib/tk/menubar.rb: improve supported menu_spec
* ext/tk/lib/tk/menuspec.rb: [add] menu_spec support library
* ext/tk/lib/tk/root.rb: add menu_spec support
* ext/tk/lib/tk/text.rb: bug fix
* ext/tk/lib/tk/toplevel.rb: add menu_spec support
* ext/tk/sample/menubar?.rb: [add] sample of menu_spec usage


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-06-12 15:25:49 +00:00

131 lines
3.7 KiB
Ruby

#
# tk/menubar.rb
#
# Original version:
# Copyright (C) 1998 maeda shugo. All rights reserved.
# This file can be distributed under the terms of the Ruby.
# Usage:
#
# menu_spec = [
# [['File', 0],
# ['Open', proc{puts('Open clicked')}, 0],
# '---',
# ['Quit', proc{exit}, 0]],
# [['Edit', 0],
# ['Cut', proc{puts('Cut clicked')}, 2],
# ['Copy', proc{puts('Copy clicked')}, 0],
# ['Paste', proc{puts('Paste clicked')}, 0]]
# ]
# menubar = TkMenubar.new(nil, menu_spec,
# 'tearoff'=>false,
# 'foreground'=>'grey40',
# 'activeforeground'=>'red',
# 'font'=>'-adobe-helvetica-bold-r-*--12-*-iso8859-1')
# menubar.pack('side'=>'top', 'fill'=>'x')
#
#
# OR
#
#
# menubar = TkMenubar.new
# menubar.add_menu([['File', 0],
# ['Open', proc{puts('Open clicked')}, 0],
# '---',
# ['Quit', proc{exit}, 0]])
# menubar.add_menu([['Edit', 0],
# ['Cut', proc{puts('Cut clicked')}, 2],
# ['Copy', proc{puts('Copy clicked')}, 0],
# ['Paste', proc{puts('Paste clicked')}, 0]])
# menubar.configure('tearoff', false)
# menubar.configure('foreground', 'grey40')
# menubar.configure('activeforeground', 'red')
# menubar.configure('font', '-adobe-helvetica-bold-r-*--12-*-iso8859-1')
# menubar.pack('side'=>'top', 'fill'=>'x')
#
#
# OR
#
# radio_var = TkVariable.new('y')
# menu_spec = [
# [['File', 0],
# {:label=>'Open', :command=>proc{puts('Open clicked')}, :underline=>0},
# '---',
# ['Check_A', TkVariable.new(true), 6],
# {:type=>'checkbutton', :label=>'Check_B',
# :variable=>TkVariable.new, :underline=>6},
# '---',
# ['Radio_X', [radio_var, 'x'], 6],
# ['Radio_Y', [radio_var, 'y'], 6],
# ['Radio_Z', [radio_var, 'z'], 6],
# '---',
# ['cascade', [
# ['sss', proc{p 'sss'}, 0],
# ['ttt', proc{p 'ttt'}, 0],
# ['uuu', proc{p 'uuu'}, 0],
# ['vvv', proc{p 'vvv'}, 0],
# ], 0],
# '---',
# ['Quit', proc{exit}, 0]],
# [['Edit', 0],
# ['Cut', proc{puts('Cut clicked')}, 2],
# ['Copy', proc{puts('Copy clicked')}, 0],
# ['Paste', proc{puts('Paste clicked')}, 0]]
# ]
# menubar = TkMenubar.new(nil, menu_spec,
# 'tearoff'=>false,
# 'foreground'=>'grey40',
# 'activeforeground'=>'red',
# 'font'=>'Helvetia 12 bold')
# menubar.pack('side'=>'top', 'fill'=>'x')
# See tk/menuspce.rb about the format of the menu_spec
# To use add_menu, configuration must be done by calling configure after
# adding all menus by add_menu, not by the constructor arguments.
require 'tk'
require 'tk/frame'
require 'tk/composite'
require 'tk/menuspec'
class TkMenubar<TkFrame
include TkComposite
include TkMenuSpec
def initialize(parent = nil, spec = nil, options = nil)
if parent.kind_of? Hash
options = _symbolkey2str(parent)
spec = options.delete('spec')
super(options)
else
super(parent, options)
end
@menus = []
spec.each{|info| add_menu(info)} if spec
options.each{|key, value| configure(key, value)} if options
end
def add_menu(menu_info)
mbtn, menu = _create_menubutton(@frame, menu_info)
submenus = _get_cascade_menus(menu).flatten
@menus.push([mbtn, menu])
delegate('tearoff', menu, *submenus)
delegate('foreground', mbtn, menu, *submenus)
delegate('background', mbtn, menu, *submenus)
delegate('disabledforeground', mbtn, menu, *submenus)
delegate('activeforeground', mbtn, menu, *submenus)
delegate('activebackground', mbtn, menu, *submenus)
delegate('font', mbtn, menu, *submenus)
delegate('kanjifont', mbtn, menu, *submenus)
end
def [](index)
return @menus[index]
end
end