1# -*- coding: utf-8 -*-
2#
3# widget demo prompts the user to select a color (called by 'widget')
4#
5#  Note: don't support ttk_wrapper. work with standard widgets only.
6#
7
8# toplevel widget が存在すれば削除する
9if defined?($clrpick_demo) && $clrpick_demo
10  $clrpick_demo.destroy
11  $clrpick_demo = nil
12end
13
14# demo 用の toplevel widget を生成
15$clrpick_demo = TkToplevel.new {|w|
16  title("Color Selection Dialogs")
17  iconname("colors")
18  positionWindow(w)
19}
20
21# label 生成
22#TkLabel.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left',
23Tk::Label.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left',
24            'text'=>"以下のボタンを押して、このウィンドウ上にあるウィジェットの前景色と背景色を選択して下さい。").pack('side'=>'top')
25
26# frame 生成
27# TkFrame.new($clrpick_demo) {|frame|
28Tk::Frame.new($clrpick_demo) {|frame|
29  # TkButton.new(frame) {
30  Tk::Button.new(frame) {
31    #text '了解'
32    text '閉じる'
33    command proc{
34      tmppath = $clrpick_demo
35      $clrpick_demo = nil
36      tmppath.destroy
37    }
38  }.pack('side'=>'left', 'expand'=>'yes')
39
40  # TkButton.new(frame) {
41  Tk::Button.new(frame) {
42    text 'コード参照'
43    command proc{showCode 'clrpick'}
44  }.pack('side'=>'left', 'expand'=>'yes')
45}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m')
46
47# button 生成
48# TkButton.new($clrpick_demo, 'text'=>'背景色を設定 ...') {|b|
49Tk::Button.new($clrpick_demo, 'text'=>'背景色を設定 ...') {|b|
50  command(proc{setColor $clrpick_demo, b, 'background',
51              ['background', 'highlightbackground']})
52  pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m')
53}
54
55# TkButton.new($clrpick_demo, 'text'=>'前景色を設定 ...') {|b|
56Tk::Button.new($clrpick_demo, 'text'=>'前景色を設定 ...') {|b|
57  command(proc{setColor $clrpick_demo, b, 'foreground', ['foreground']})
58  pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m')
59}
60
61def setColor(w,button,name,options)
62  w.grab
63  initialColor = button[name]
64  color = Tk.chooseColor('title'=>"Choose a #{name} color", 'parent'=>w,
65                         'initialcolor'=>initialColor)
66  if color != ""
67    setColor_helper(w,options,color)
68  end
69
70  w.grab('release')
71end
72
73def setColor_helper(w, options, color)
74  options.each{|opt|
75    begin
76      w[opt] = color
77    rescue
78    end
79  }
80  TkWinfo.children(w).each{|child|
81    setColor_helper child, options, color
82  }
83end
84
85