1# 2# tkextlib/bwidget/selectcolor.rb 3# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) 4# 5 6require 'tk' 7require 'tkextlib/bwidget.rb' 8require 'tkextlib/bwidget/messagedlg' 9 10module Tk 11 module BWidget 12 class SelectColor < Tk::BWidget::MessageDlg 13 class Dialog < Tk::BWidget::SelectColor 14 end 15 class Menubutton < Tk::Menubutton 16 end 17 MenuButton = Menubutton 18 end 19 end 20end 21 22class Tk::BWidget::SelectColor 23 extend Tk 24 25 TkCommandNames = ['SelectColor'.freeze].freeze 26 WidgetClassName = 'SelectColor'.freeze 27 WidgetClassNames[WidgetClassName] ||= self 28 29 def dialog(keys={}) 30 newkeys = @keys.dup 31 newkeys.update(_symbolkey2str(keys)) 32 tk_call('SelectColor::dialog', @path, *hash_kv(newkeys)) 33 end 34 35 def menu(*args) 36 if args[-1].kind_of?(Hash) 37 keys = args.pop 38 else 39 keys = {} 40 end 41 place = args.flatten 42 newkeys = @keys.dup 43 newkeys.update(_symbolkey2str(keys)) 44 tk_call('SelectColor::menu', @path, place, *hash_kv(newkeys)) 45 end 46 47 def self.set_color(idx, color) 48 tk_call('SelectColor::setcolor', idx, color) 49 end 50end 51 52class Tk::BWidget::SelectColor::Dialog 53 def create_self(keys) 54 super(keys) 55 @keys['type'] = 'dialog' 56 end 57 58 def create 59 @keys['type'] = 'dialog' # 'dialog' type returns color 60 tk_call(Tk::BWidget::SelectColor::TkCommandNames[0], 61 @path, *hash_kv(@keys)) 62 end 63end 64 65class Tk::BWidget::SelectColor::Menubutton 66 def create_self(keys) 67 keys = {} unless keys 68 keys = _symbolkey2str(keys) 69 keys['type'] = 'menubutton' # 'toolbar' type returns widget path 70 window(tk_call(Tk::BWidget::SelectColor::TkCommandNames[0], 71 @path, *hash_kv(keys))) 72 end 73end 74