From d852a4e317e163c920b0b69aff59cb5edea08a18 Mon Sep 17 00:00:00 2001 From: nagai Date: Mon, 22 Nov 2004 23:12:37 +0000 Subject: [PATCH] * 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 --- ChangeLog | 4 +++ ext/tk/lib/tk/menu.rb | 59 ++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 24324ac96e..19afef71bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Tue Nov 23 08:09:50 2004 Hidetoshi NAGAI + + * ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton + Tue Nov 23 02:00:21 2004 Yukihiro Matsumoto * file.c (rb_file_chown): [ruby-dev:24949] diff --git a/ext/tk/lib/tk/menu.rb b/ext/tk/lib/tk/menu.rb index 5014dea603..2ac6a0efe7 100644 --- a/ext/tk/lib/tk/menu.rb +++ b/ext/tk/lib/tk/menu.rb @@ -402,33 +402,56 @@ class TkOptionMenubutton 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