4 # usage: cd_timer min [, min ... ]
5 # ( e.g. cd_timer 0.5 1 3 5 10 )
10 $stderr.puts 'Error:: No time arguments for counting down'
16 TkButton.new(:text=>'exit',
17 :command=>proc{exit}).pack(:side=>:bottom, :fill=>:x)
19 b = TkButton.new(:text=>'start').pack(:side=>:top, :fill=>:x)
21 f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x)
22 TkLabel.new(f, :relief=>:flat, :pady=>3,
23 :background=>'black', :foreground=>'white',
24 :text=>' elapsed: ').pack(:fill=>:x, :side=>:left, :expand=>true)
25 now = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w,
26 :background=>'black', :foreground=>'white',
27 :text=>'%4d:%02d.00' % [0, 0]).pack(:side=>:right)
29 timers = [ TkRTTimer.new(10){|tm|
30 t = (tm.return_value || 0) + 1
33 now.text('%4d:%02d.%02d' % [m, s, u])
35 }.set_start_proc(0, proc{
36 now.text('%4d:%02d.00' % [0,0])
37 now.foreground('white')
42 ARGV.collect{|arg| (Float(arg) * 60).to_i}.sort.each_with_index{|time, idx|
43 f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x)
44 TkLabel.new(f, :relief=>:flat, :pady=>3,
45 :text=>' %4d:%02d --> ' % (time.divmod(60))).pack(:side=>:left)
46 l = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w,
47 :text=>'%4d:%02d' % (time.divmod(60))).pack(:side=>:right)
48 timers << TkRTTimer.new(1000){|tm|
49 t = (tm.return_value || time) - 1
51 l.text('%4d:%02d' % ((-t).divmod(60)))
53 l.text('%4d:%02d' % (t.divmod(60)))
60 }.set_start_proc(0, proc{
61 l.text('%4d:%02d' % (time.divmod(60)))
70 timers.each{|timer| timer.restart}
74 timers.each{|timer| timer.stop.reset}