mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
287a34ae0d
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
198 lines
7.5 KiB
Ruby
198 lines
7.5 KiB
Ruby
#
|
|
# basic demo --- called from demo.rb
|
|
#
|
|
unless Object.const_defined?('DemoVar')
|
|
fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "
|
|
end
|
|
|
|
module DemoBasic
|
|
@@var = TkVariable.new_hash
|
|
@@after = nil
|
|
@@count = 0
|
|
|
|
def self.create(nb)
|
|
frame = nb.insert('end', 'demoBasic', :text=>'Basic')
|
|
topf = TkFrame.new(frame)
|
|
|
|
titf1 = Tk::BWidget::TitleFrame.new(topf, :text=>'Label')
|
|
titf2 = Tk::BWidget::TitleFrame.new(topf, :text=>'Entry')
|
|
|
|
titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>'Button and ArrowButton')
|
|
|
|
_label(titf1.get_frame)
|
|
_entry(titf2.get_frame)
|
|
_button(titf3.get_frame)
|
|
|
|
Tk.pack(titf1, titf2, :side=>:left, :fill=>:both, :padx=>4, :expand=>true)
|
|
topf.pack(:pady=>2, :fill=>:x)
|
|
titf3.pack(:pady=>2, :padx=>4, :fill=>:x)
|
|
end
|
|
|
|
def self._label(parent)
|
|
lab = Tk::BWidget::Label.new(parent, :text=>'This is a Label widget',
|
|
:helptext=>'Label widget')
|
|
chk = TkCheckbutton.new(parent, :text=>'Disabled',
|
|
:variable=>@@var.ref(lab, 'state'),
|
|
:onvalue=>'disabled', :offvalue=>'normal',
|
|
:command=>proc{lab[:state] = @@var[lab, 'state']})
|
|
lab.pack(:anchor=>:w, :pady=>4)
|
|
chk.pack(:anchor=>:w)
|
|
end
|
|
|
|
def self._entry(parent)
|
|
ent = Tk::BWidget::Entry.new(parent, :text=>'Press enter',
|
|
:helptext=>'Entry widtet',
|
|
:command=>proc{
|
|
@@var['entcmd'] = 'command called'
|
|
Tk.after(500, proc{@@var['entcmd'] = ''})
|
|
})
|
|
|
|
chk1 = TkCheckbutton.new(parent, :text=>'Disabled',
|
|
:variable=>@@var.ref(ent, 'state'),
|
|
:onvalue=>'disabled', :offvalue=>'normal',
|
|
:command=>proc{ent.state = @@var[ent, 'state']})
|
|
|
|
chk2 = TkCheckbutton.new(parent, :text=>'Non editable',
|
|
:variable=>@@var.ref(ent, 'editable'),
|
|
:onvalue=>false, :offvalue=>true,
|
|
:command=>proc{
|
|
ent.editable = @@var[ent, 'editable']
|
|
})
|
|
|
|
lab = TkLabel.new(parent, :textvariable=>@@var.ref('entcmd'),
|
|
:foreground=>'red')
|
|
|
|
ent.pack(:pady=>4, :anchor=>:w)
|
|
Tk.pack(chk1, chk2, :anchor=>:w)
|
|
lab.pack(:pady=>4)
|
|
end
|
|
|
|
def self._button(parent)
|
|
frame = TkFrame.new(parent)
|
|
but = Tk::BWidget::Button.new(frame, :text=>'Press me!',
|
|
:repeatdelay=>300,
|
|
:command=>proc{_butcmd('command')},
|
|
:helptext=>'This is a Button widget')
|
|
|
|
sep1 = Tk::BWidget::Separator.new(frame, :orient=>:vertical)
|
|
arr1 = Tk::BWidget::ArrowButton.new(frame, :type=>:button,
|
|
:width=>25, :height=>25, :repeatdelay=>300,
|
|
:command=>proc{_butcmd('command')},
|
|
:helptext=>"This is an ArrowButton widget\nof type button")
|
|
|
|
sep2 = Tk::BWidget::Separator.new(frame, :orient=>:vertical)
|
|
arr2 = Tk::BWidget::ArrowButton.new(frame, :type=>:arrow,
|
|
:width=>25, :height=>25, :relief=>:sunken,
|
|
:ipadx=>0, :ipady=>0, :repeatdelay=>300,
|
|
:command=>proc{_butcmd('command')},
|
|
:helptext=>"This is an ArrowButton widget\nof type arrow")
|
|
|
|
but.pack(:side=>:left, :padx=>4)
|
|
sep1.pack(:side=>:left, :padx=>4, :fill=>:y)
|
|
arr1.pack(:side=>:left, :padx=>4)
|
|
sep2.pack(:side=>:left, :padx=>4, :fill=>:y)
|
|
arr2.pack(:side=>:left, :padx=>4)
|
|
frame.pack
|
|
|
|
Tk::BWidget::Separator.new(parent,
|
|
:orient=>:horizontal).pack(:fill=>:x, :pady=>10)
|
|
|
|
labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Command',
|
|
:side=>:top, :anchor=>:w,
|
|
:relief=>:sunken, :borderwidth=>1)
|
|
subf = labf1.get_frame
|
|
chk1 = TkCheckbutton.new(subf, :text=>'Disabled',
|
|
:variable=>@@var.ref('bstate'),
|
|
:onvalue=>'disabled', :offvalue=>'normal',
|
|
:command=>proc{_bstate(@@var['bstate'],
|
|
but, arr1, arr2)})
|
|
chk2 = TkCheckbutton.new(subf, :text=>"Use armcommand/\ndisarmcommand",
|
|
:variable=>@@var.ref('barmcmd'),
|
|
:command=>proc{_barmcmd(@@var['barmcmd'],
|
|
but, arr1, arr2)})
|
|
Tk.pack(chk1, chk2, :anchor=>:w)
|
|
|
|
label = TkLabel.new(parent, :textvariable=>@@var.ref('butcmd'),
|
|
:foreground=>'red').pack(:side=>:bottom, :pady=>4)
|
|
|
|
labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Direction',
|
|
:side=>:top, :anchor=>:w,
|
|
:relief=>:sunken, :borderwidth=>1)
|
|
subf = labf2.get_frame
|
|
@@var['bside'] = :top
|
|
[:top, :left, :bottom, :right].each{|dir|
|
|
TkRadiobutton.new(subf, :text=>"#{dir} arrow",
|
|
:variable=>@@var.ref('bside'), :value=>dir,
|
|
:command=>proc{_bside(@@var['bside'], arr1, arr2)}
|
|
).pack(:anchor=>:w)
|
|
}
|
|
|
|
labf3 = Tk::BWidget::LabelFrame.new(parent, :text=>'Relief',
|
|
:side=>:top, :anchor=>:w,
|
|
:relief=>:sunken, :borderwidth=>1)
|
|
subf = labf3.get_frame
|
|
@@var['brelief'] = :raised
|
|
[ %w(raised sunken ridge groove), %w(flat solid link)].each{|lrelief|
|
|
f = TkFrame.new(subf)
|
|
lrelief.each{|relief|
|
|
TkRadiobutton.new(f, :text=>relief,
|
|
:variable=>@@var.ref('brelief'), :value=>relief,
|
|
:command=>proc{
|
|
_brelief(@@var['brelief'], but, arr1, arr2)
|
|
}).pack(:anchor=>:w)
|
|
}
|
|
f.pack(:side=>:left, :padx=>2, :anchor=>:n)
|
|
}
|
|
Tk.pack(labf1, labf2, labf3, :side=>:left, :fill=>:y, :padx=>4)
|
|
end
|
|
|
|
def self._bstate(state, but, arr1, arr2)
|
|
[but, arr1, arr2].each{|b| b[:state] = state}
|
|
end
|
|
|
|
def self._brelief(relief, but, arr1, arr2)
|
|
but[:relief] = relief
|
|
if relief.to_s != 'link'
|
|
[arr1, arr2].each{|arr| arr[:relief] = relief}
|
|
end
|
|
end
|
|
|
|
def self._bside(side, *args)
|
|
args.each{|arr| arr[:dir] = side}
|
|
end
|
|
|
|
def self._barmcmd(value, but, arr1, arr2)
|
|
if TkComm.bool(value)
|
|
but.configure(:armcommand=>proc{_butcmd('arm')},
|
|
:disarmcommand=>proc{_butcmd('disarm')},
|
|
:command=>'')
|
|
[arr1, arr2].each{|arr|
|
|
arr.configure(:armcommand=>proc{_butcmd('arm')},
|
|
:disarmcommand=>proc{_butcmd('disarm')},
|
|
:command=>'')
|
|
}
|
|
else
|
|
but.configure(:armcommand=>'', :disarmcommand=>'',
|
|
:command=>proc{_butcmd('command')})
|
|
[arr1, arr2].each{|arr|
|
|
arr.configure(:armcommand=>'', :disarmcommand=>'',
|
|
:command=>proc{_butcmd('command')})
|
|
}
|
|
end
|
|
end
|
|
|
|
def self._butcmd(reason)
|
|
unless @@after
|
|
@@after = TkTimer.new(500, 1, proc{@@var['butcmd'] = ''})
|
|
end
|
|
@@after.stop
|
|
if (reason == 'arm')
|
|
@@count += 1
|
|
@@var['butcmd'] = "#{reason} command called (#{@@count})"
|
|
else
|
|
@@count = 0
|
|
@@var['butcmd'] = "#{reason} command called"
|
|
end
|
|
@@after.start
|
|
end
|
|
end
|