1# -*- coding: utf-8 -*-
2#
3# radio3.rb
4#
5# This demonstration script creates a toplevel window containing
6# several radiobutton widgets.
7#
8# radiobutton widget demo (called by 'widget')
9#
10
11# toplevel widget
12if defined?($radio3_demo) && $radio3_demo
13  $radio3_demo.destroy
14  $radio3_demo = nil
15end
16
17# demo toplevel widget
18$radio3_demo = TkToplevel.new {|w|
19  title("Radiobutton Demonstration 3")
20  iconname("radio3")
21  positionWindow(w)
22}
23
24base_frame = TkFrame.new($radio3_demo).pack(:fill=>:both, :expand=>true)
25
26# label
27msg = TkLabel.new(base_frame) {
28  font $font
29  wraplength '5i'
30  justify 'left'
31  text '下には3つのラジオボタングループが表示されています。ボタンをクリックすると、そのグループに属するすべてのボタンの中でクリックしたボタンだけが選択された状態になります。各グループには、そのグループの中のどのボタンが選択されているかを示す変数が割り当てられています。「トライステート」ボタンが押されたときには、ラジオボタンの表示がトライステートモードになります。いずれかのボタンを選択すれば、ボタンの状態は元のように個々のボタンのon/off状態を示すようになります。現在の変数の値を見るには「変数参照」ボタンをクリックしてください。'
32}
33msg.grid(:row=>0, :column=>0, :columnspan=>3, :sticky=>'nsew')
34
35# variable
36size = TkVariable.new
37color = TkVariable.new
38align = TkVariable.new
39
40# frame
41TkFrame.new(base_frame) {|frame|
42  TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2),
43         :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2)
44  TkGrid('x',
45         TkButton.new(frame, :text=>'変数参照',
46                      :image=>$image['view'], :compound=>:left,
47                      :command=>proc{
48                        showVars(base_frame, ['size', size],
49                                 ['color', color], ['compound', align])
50                      }),
51         TkButton.new(frame, :text=>'コード参照',
52                      :image=>$image['view'], :compound=>:left,
53                      :command=>proc{showCode 'radio3'}),
54         TkButton.new(frame, :text=>'閉じる',
55                      :image=>$image['delete'], :compound=>:left,
56                      :command=>proc{
57                        tmppath = $radio3_demo
58                        $radio3_demo = nil
59                        $showVarsWin[tmppath.path] = nil
60                        tmppath.destroy
61                      }),
62         :padx=>4, :pady=>4)
63  frame.grid_columnconfigure(0, :weight=>1)
64  TkGrid(frame, :row=>3, :column=>0, :columnspan=>3, :sticky=>'nsew')
65}
66
67# frame
68f_left  = TkLabelFrame.new(base_frame, 'text'=>'文字サイズ',
69                           'pady'=>2, 'padx'=>2)
70f_mid   = TkLabelFrame.new(base_frame, 'text'=>'色',
71                           'pady'=>2, 'padx'=>2)
72f_right = TkLabelFrame.new(base_frame, 'text'=>'ビットマップ配置',
73                           'pady'=>2, 'padx'=>2)
74f_left .grid('column'=>0, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2)
75f_mid  .grid('column'=>1, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2)
76f_right.grid('column'=>2, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c')
77
78TkButton.new(base_frame, 'text'=>'トライステート',
79             'command'=>proc{size.value = 'multi'; color.value = 'multi'}){
80  grid('column'=>2, 'row'=>2, 'pady'=>'.5c', 'padx'=>'.5c')
81}
82
83# radiobutton
84[10, 12, 14, 18, 24].each {|sz|
85  TkRadioButton.new(f_left) {
86    text "ポイントサイズ #{sz}"
87    variable size
88    relief 'flat'
89    value sz
90    tristatevalue 'multi'
91  }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x')
92}
93
94['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col|
95  TkRadioButton.new(f_mid) {
96    text col
97    variable color
98    relief 'flat'
99    value col.downcase
100    anchor 'w'
101    tristatevalue 'multi'
102    command proc{f_mid.fg(color.value)}
103  }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x')
104}
105
106# label = TkLabel.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead',
107label = Tk::Label.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead',
108                    'compound'=>'left')
109label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top')
110label.height(TkWinfo.reqheight(label))
111a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a|
112  TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat',
113                    'value'=>a.downcase, 'indicatoron'=>0, 'width'=>7,
114                    'command'=>proc{label.compound(align.value)})
115}
116
117Tk.grid('x', a_btn[0])
118Tk.grid(a_btn[1], label, a_btn[2])
119Tk.grid('x', a_btn[3])
120