diff options
author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-22 23:12:37 +0000 |
---|---|---|
committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-22 23:12:37 +0000 |
commit | d852a4e317e163c920b0b69aff59cb5edea08a18 (patch) | |
tree | 0e5df47bcbd88c6edfb5198a5e1386b2e5aae9bc | |
parent | 941d1359043bbb52e14eba9cfcc90292b4ddaa4b (diff) | |
download | ruby-d852a4e317e163c920b0b69aff59cb5edea08a18.tar.gz |
* 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
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | ext/tk/lib/tk/menu.rb | 59 |
2 files changed, 45 insertions, 18 deletions
@@ -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] 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<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 + + @variable = nil + if args[0].kind_of?(TkVariable) || args[0] == nil + @variable = args.shift + else + @variable = keys.delete('variable') end - if parent.kind_of? TkVariable - vals.unshift(firstval) if firstval - firstval = var - var = parent - parent = nil + @variable = TkVariable.new unless @variable + + (args = keys.delete('values') || []) if args.empty? + if args.empty? + args << @variable.value + else + @variable.value = args[0] 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 + 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 |