2 # basic demo --- called from demo.rb
4 unless Object.const_defined?('DemoVar')
5 fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
9 @@var = TkVariable.new_hash
14 frame = nb.insert('end', 'demoBasic', :text=>'Basic')
15 topf = TkFrame.new(frame)
17 titf1 = Tk::BWidget::TitleFrame.new(topf, :text=>'Label')
18 titf2 = Tk::BWidget::TitleFrame.new(topf, :text=>'Entry')
20 titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>'Button and ArrowButton')
22 _label(titf1.get_frame)
23 _entry(titf2.get_frame)
24 _button(titf3.get_frame)
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)
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)
42 def self._entry(parent)
43 ent = Tk::BWidget::Entry.new(parent, :text=>'Press enter',
44 :helptext=>'Entry widtet',
46 @@var['entcmd'] = 'command called'
47 Tk.after(500, proc{@@var['entcmd'] = ''})
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']})
55 chk2 = TkCheckbutton.new(parent, :text=>'Non editable',
56 :variable=>@@var.ref(ent, 'editable'),
57 :onvalue=>false, :offvalue=>true,
59 ent.editable = @@var[ent, 'editable']
62 lab = TkLabel.new(parent, :textvariable=>@@var.ref('entcmd'),
65 ent.pack(:pady=>4, :anchor=>:w)
66 Tk.pack(chk1, chk2, :anchor=>:w)
70 def self._button(parent)
71 frame = TkFrame.new(parent)
72 but = Tk::BWidget::Button.new(frame, :text=>'Press me!',
74 :command=>proc{_butcmd('command')},
75 :helptext=>'This is a Button widget')
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")
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")
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)
97 Tk::BWidget::Separator.new(parent,
98 :orient=>:horizontal).pack(:fill=>:x, :pady=>10)
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'],
109 chk2 = TkCheckbutton.new(subf, :text=>"Use armcommand/\ndisarmcommand",
110 :variable=>@@var.ref('barmcmd'),
111 :command=>proc{_barmcmd(@@var['barmcmd'],
113 Tk.pack(chk1, chk2, :anchor=>:w)
115 label = TkLabel.new(parent, :textvariable=>@@var.ref('butcmd'),
116 :foreground=>'red').pack(:side=>:bottom, :pady=>4)
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)}
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,
141 _brelief(@@var['brelief'], but, arr1, arr2)
144 f.pack(:side=>:left, :padx=>2, :anchor=>:n)
146 Tk.pack(labf1, labf2, labf3, :side=>:left, :fill=>:y, :padx=>4)
149 def self._bstate(state, but, arr1, arr2)
150 [but, arr1, arr2].each{|b| b[:state] = state}
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}
160 def self._bside(side, *args)
161 args.each{|arr| arr[:dir] = side}
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')},
169 [arr1, arr2].each{|arr|
170 arr.configure(:armcommand=>proc{_butcmd('arm')},
171 :disarmcommand=>proc{_butcmd('disarm')},
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')})
184 def self._butcmd(reason)
186 @@after = TkTimer.new(500, 1, proc{@@var['butcmd'] = ''})
191 @@var['butcmd'] = "#{reason} command called (#{@@count})"
194 @@var['butcmd'] = "#{reason} command called"