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