OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / ext / tk / sample / tkextlib / bwidget / basic.rb
1 #
2 #  basic demo  ---  called from demo.rb
3 #
4 unless Object.const_defined?('DemoVar')
5   fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
6 end
7
8 module DemoBasic
9   @@var   = TkVariable.new_hash
10   @@after = nil
11   @@count = 0
12
13   def self.create(nb)
14     frame = nb.insert('end', 'demoBasic', :text=>'Basic')
15     topf  = TkFrame.new(frame)
16
17     titf1 = Tk::BWidget::TitleFrame.new(topf, :text=>'Label')
18     titf2 = Tk::BWidget::TitleFrame.new(topf, :text=>'Entry')
19
20     titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>'Button and ArrowButton')
21
22     _label(titf1.get_frame)
23     _entry(titf2.get_frame)
24     _button(titf3.get_frame)
25
26     Tk.pack(titf1, titf2, :side=>:left, :fill=>:both, :padx=>4, :expand=>true)
27     topf.pack(:pady=>2, :fill=>:x)
28     titf3.pack(:pady=>2, :padx=>4, :fill=>:x)
29   end
30
31   def self._label(parent)
32     lab = Tk::BWidget::Label.new(parent, :text=>'This is a Label widget', 
33                                  :helptext=>'Label widget')
34     chk = TkCheckbutton.new(parent, :text=>'Disabled', 
35                             :variable=>@@var.ref(lab, 'state'), 
36                             :onvalue=>'disabled', :offvalue=>'normal', 
37                             :command=>proc{lab[:state] = @@var[lab, 'state']})
38     lab.pack(:anchor=>:w, :pady=>4)
39     chk.pack(:anchor=>:w)
40   end
41
42   def self._entry(parent)
43     ent = Tk::BWidget::Entry.new(parent, :text=>'Press enter', 
44                                  :helptext=>'Entry widtet', 
45                                  :command=>proc{
46                                    @@var['entcmd'] = 'command called'
47                                    Tk.after(500, proc{@@var['entcmd'] = ''})
48                                  })
49
50     chk1 = TkCheckbutton.new(parent, :text=>'Disabled', 
51                              :variable=>@@var.ref(ent, 'state'), 
52                              :onvalue=>'disabled', :offvalue=>'normal', 
53                              :command=>proc{ent.state = @@var[ent, 'state']})
54
55     chk2 = TkCheckbutton.new(parent, :text=>'Non editable', 
56                              :variable=>@@var.ref(ent, 'editable'), 
57                              :onvalue=>false, :offvalue=>true, 
58                              :command=>proc{
59                                ent.editable = @@var[ent, 'editable']
60                              })
61
62     lab = TkLabel.new(parent, :textvariable=>@@var.ref('entcmd'), 
63                       :foreground=>'red')
64
65     ent.pack(:pady=>4, :anchor=>:w)
66     Tk.pack(chk1, chk2, :anchor=>:w)
67     lab.pack(:pady=>4)
68   end
69
70   def self._button(parent)
71     frame = TkFrame.new(parent)
72     but  = Tk::BWidget::Button.new(frame, :text=>'Press me!', 
73                                    :repeatdelay=>300, 
74                                    :command=>proc{_butcmd('command')}, 
75                                    :helptext=>'This is a Button widget')
76
77     sep1 = Tk::BWidget::Separator.new(frame, :orient=>:vertical)
78     arr1 = Tk::BWidget::ArrowButton.new(frame, :type=>:button, 
79                 :width=>25, :height=>25, :repeatdelay=>300, 
80                 :command=>proc{_butcmd('command')}, 
81                 :helptext=>"This is an ArrowButton widget\nof type button")
82
83     sep2 = Tk::BWidget::Separator.new(frame, :orient=>:vertical)
84     arr2 = Tk::BWidget::ArrowButton.new(frame, :type=>:arrow, 
85                 :width=>25, :height=>25, :relief=>:sunken, 
86                 :ipadx=>0, :ipady=>0, :repeatdelay=>300, 
87                 :command=>proc{_butcmd('command')}, 
88                 :helptext=>"This is an ArrowButton widget\nof type arrow")
89
90     but.pack(:side=>:left, :padx=>4)
91     sep1.pack(:side=>:left, :padx=>4, :fill=>:y)
92     arr1.pack(:side=>:left, :padx=>4)
93     sep2.pack(:side=>:left, :padx=>4, :fill=>:y)
94     arr2.pack(:side=>:left, :padx=>4)
95     frame.pack
96
97     Tk::BWidget::Separator.new(parent, 
98                                :orient=>:horizontal).pack(:fill=>:x, :pady=>10)
99
100     labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Command', 
101                                         :side=>:top, :anchor=>:w, 
102                                         :relief=>:sunken, :borderwidth=>1)
103     subf = labf1.get_frame
104     chk1 = TkCheckbutton.new(subf, :text=>'Disabled', 
105                              :variable=>@@var.ref('bstate'), 
106                              :onvalue=>'disabled', :offvalue=>'normal', 
107                              :command=>proc{_bstate(@@var['bstate'], 
108                                                      but, arr1, arr2)})
109     chk2 = TkCheckbutton.new(subf, :text=>"Use armcommand/\ndisarmcommand", 
110                              :variable=>@@var.ref('barmcmd'), 
111                              :command=>proc{_barmcmd(@@var['barmcmd'], 
112                                                      but, arr1, arr2)})
113     Tk.pack(chk1, chk2, :anchor=>:w)
114
115     label = TkLabel.new(parent, :textvariable=>@@var.ref('butcmd'), 
116                         :foreground=>'red').pack(:side=>:bottom, :pady=>4)
117
118     labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Direction', 
119                                         :side=>:top, :anchor=>:w, 
120                                         :relief=>:sunken, :borderwidth=>1)
121     subf = labf2.get_frame
122     @@var['bside'] = :top
123     [:top, :left, :bottom, :right].each{|dir|
124       TkRadiobutton.new(subf, :text=>"#{dir} arrow", 
125                         :variable=>@@var.ref('bside'), :value=>dir, 
126                         :command=>proc{_bside(@@var['bside'], arr1, arr2)}
127                         ).pack(:anchor=>:w)
128     }
129
130     labf3 = Tk::BWidget::LabelFrame.new(parent, :text=>'Relief', 
131                                         :side=>:top, :anchor=>:w, 
132                                         :relief=>:sunken, :borderwidth=>1)
133     subf = labf3.get_frame
134     @@var['brelief'] = :raised
135     [ %w(raised sunken ridge groove), %w(flat solid link)].each{|lrelief|
136       f = TkFrame.new(subf)
137       lrelief.each{|relief|
138         TkRadiobutton.new(f, :text=>relief, 
139                           :variable=>@@var.ref('brelief'), :value=>relief, 
140                           :command=>proc{
141                             _brelief(@@var['brelief'], but, arr1, arr2)
142                           }).pack(:anchor=>:w)
143       }
144       f.pack(:side=>:left, :padx=>2, :anchor=>:n)
145     }
146     Tk.pack(labf1, labf2, labf3, :side=>:left, :fill=>:y, :padx=>4)
147   end
148
149   def self._bstate(state, but, arr1, arr2)
150     [but, arr1, arr2].each{|b| b[:state] = state}
151   end
152
153   def self._brelief(relief, but, arr1, arr2)
154     but[:relief] = relief
155     if relief.to_s != 'link'
156       [arr1, arr2].each{|arr| arr[:relief] = relief}
157     end
158   end
159
160   def self._bside(side, *args)
161     args.each{|arr| arr[:dir] = side}
162   end
163
164   def self._barmcmd(value, but, arr1, arr2)
165     if TkComm.bool(value)
166       but.configure(:armcommand=>proc{_butcmd('arm')}, 
167                     :disarmcommand=>proc{_butcmd('disarm')}, 
168                     :command=>'')
169       [arr1, arr2].each{|arr|
170         arr.configure(:armcommand=>proc{_butcmd('arm')}, 
171                       :disarmcommand=>proc{_butcmd('disarm')}, 
172                       :command=>'')
173       }
174     else
175       but.configure(:armcommand=>'', :disarmcommand=>'', 
176                     :command=>proc{_butcmd('command')})
177       [arr1, arr2].each{|arr|
178         arr.configure(:armcommand=>'', :disarmcommand=>'', 
179                       :command=>proc{_butcmd('command')})
180       }
181     end
182   end
183
184   def self._butcmd(reason)
185     unless @@after
186       @@after = TkTimer.new(500, 1, proc{@@var['butcmd'] = ''})
187     end
188     @@after.stop
189     if (reason == 'arm')
190       @@count += 1
191       @@var['butcmd'] = "#{reason} command called (#{@@count})"
192     else
193       @@count = 0
194       @@var['butcmd'] = "#{reason} command called"
195     end
196     @@after.start
197   end
198 end