* ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagai 2004-11-22 23:12:37 +00:00
parent 941d135904
commit d852a4e317
2 changed files with 45 additions and 18 deletions

View File

@ -1,3 +1,7 @@
Tue Nov 23 08:09:50 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton
Tue Nov 23 02:00:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* file.c (rb_file_chown): [ruby-dev:24949]

View File

@ -402,33 +402,56 @@ class TkOptionMenubutton<TkMenubutton
end
end
def initialize(parent=nil, var=nil, firstval=nil, *vals)
if parent.kind_of? Hash
keys = _symbolkey2str(parent)
parent = keys['parent']
var = keys['variable'] if keys['variable']
firstval, *vals = keys['values']
def initialize(*args)
# args :: [parent,] [var,] [value[, ...],] [keys]
# parent --> TkWindow or nil
# var --> TkVariable or nil
# keys --> Hash
# keys[:parent] or keys['parent'] --> parent
# keys[:variable] or keys['variable'] --> var
# keys[:values] or keys['values'] --> value, ...
# other Hash keys are menubutton options
keys = {}
keys = args.pop if args[-1].kind_of?(Hash)
keys = _symbolkey2str(keys)
parent = nil
if args[0].kind_of?(TkWindow) || args[0] == nil
parent = args.shift
else
parent = keys.delete('parent')
end
if parent.kind_of? TkVariable
vals.unshift(firstval) if firstval
firstval = var
var = parent
parent = nil
@variable = nil
if args[0].kind_of?(TkVariable) || args[0] == nil
@variable = args.shift
else
@variable = keys.delete('variable')
end
var = TkVariable.new unless var
fail 'variable option must be TkVariable' unless var.kind_of? TkVariable
@variable = var
firstval = @variable.value unless firstval
@variable.value = firstval
@variable = TkVariable.new unless @variable
(args = keys.delete('values') || []) if args.empty?
if args.empty?
args << @variable.value
else
@variable.value = args[0]
end
install_win(if parent then parent.path end)
@menu = OptionMenu.new(tk_call('tk_optionMenu', @path, @variable.id,
firstval, *vals))
@menu = OptionMenu.new(tk_call('tk_optionMenu',
@path, @variable.id, *args))
configure(keys) if keys
end
def value
@variable.value
end
def value=(val)
@variable.value = val
end
def activate(index)
@menu.activate(index)
self