* ext/tk/lib/tk/timer.rb (TkTimer): forgot to clear @return_value
when restarting * ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e58c2dc6a8
commit
289b6bb21b
@ -1,3 +1,10 @@
|
|||||||
|
Mon Mar 14 19:39:33 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
|
* ext/tk/lib/tk/timer.rb (TkTimer): forgot to clear @return_value
|
||||||
|
when restarting
|
||||||
|
|
||||||
|
* ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer
|
||||||
|
|
||||||
Mon Mar 14 12:21:03 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
Mon Mar 14 12:21:03 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
* ext/tk/lib/tk/timer.rb (TkRTTimer): forgot to reset the callback
|
* ext/tk/lib/tk/timer.rb (TkRTTimer): forgot to reset the callback
|
||||||
|
@ -353,6 +353,7 @@ class TkTimer
|
|||||||
Tk_CBTBL[@id] = self
|
Tk_CBTBL[@id] = self
|
||||||
@do_loop = @loop_exec
|
@do_loop = @loop_exec
|
||||||
@current_pos = 0
|
@current_pos = 0
|
||||||
|
@return_value = nil
|
||||||
@after_id = nil
|
@after_id = nil
|
||||||
|
|
||||||
@init_sleep = 0
|
@init_sleep = 0
|
||||||
|
81
ext/tk/sample/cd_timer.rb
Normal file
81
ext/tk/sample/cd_timer.rb
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
#
|
||||||
|
# countdown timer
|
||||||
|
# usage: cd_timer min [, min ... ]
|
||||||
|
# ( e.g. cd_timer 0.5 1 3 5 10 )
|
||||||
|
#
|
||||||
|
require 'tk'
|
||||||
|
|
||||||
|
if ARGV.empty?
|
||||||
|
$stderr.puts 'Error:: No time arguments for counting down'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
width = 10
|
||||||
|
|
||||||
|
TkButton.new(:text=>'exit',
|
||||||
|
:command=>proc{exit}).pack(:side=>:bottom, :fill=>:x)
|
||||||
|
|
||||||
|
b = TkButton.new(:text=>'start').pack(:side=>:top, :fill=>:x)
|
||||||
|
|
||||||
|
f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x)
|
||||||
|
TkLabel.new(f, :relief=>:flat, :pady=>3,
|
||||||
|
:background=>'black', :foreground=>'white',
|
||||||
|
:text=>' elapsed: ').pack(:fill=>:x, :side=>:left, :expand=>true)
|
||||||
|
now = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w,
|
||||||
|
:background=>'black', :foreground=>'white',
|
||||||
|
:text=>'%4d:%02d.00' % [0, 0]).pack(:side=>:right)
|
||||||
|
|
||||||
|
timers = [ TkRTTimer.new(10){|tm|
|
||||||
|
t = (tm.return_value || 0) + 1
|
||||||
|
s, u = t.divmod(100)
|
||||||
|
m, s = s.divmod(60)
|
||||||
|
now.text('%4d:%02d.%02d' % [m, s, u])
|
||||||
|
t
|
||||||
|
}.set_start_proc(0, proc{
|
||||||
|
now.text('%4d:%02d.00' % [0,0])
|
||||||
|
now.foreground('white')
|
||||||
|
0
|
||||||
|
})
|
||||||
|
]
|
||||||
|
|
||||||
|
ARGV.collect{|arg| (Float(arg) * 60).to_i}.sort.each_with_index{|time, idx|
|
||||||
|
f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x)
|
||||||
|
TkLabel.new(f, :relief=>:flat, :pady=>3,
|
||||||
|
:text=>' %4d:%02d --> ' % (time.divmod(60))).pack(:side=>:left)
|
||||||
|
l = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w,
|
||||||
|
:text=>'%4d:%02d' % (time.divmod(60))).pack(:side=>:right)
|
||||||
|
timers << TkRTTimer.new(1000){|tm|
|
||||||
|
t = (tm.return_value || time) - 1
|
||||||
|
if t < 0
|
||||||
|
l.text('%4d:%02d' % ((-t).divmod(60)))
|
||||||
|
else
|
||||||
|
l.text('%4d:%02d' % (t.divmod(60)))
|
||||||
|
end
|
||||||
|
if t.zero?
|
||||||
|
l.foreground('red')
|
||||||
|
idx.times{Tk.bell}
|
||||||
|
end
|
||||||
|
t
|
||||||
|
}.set_start_proc(0, proc{
|
||||||
|
l.text('%4d:%02d' % (time.divmod(60)))
|
||||||
|
l.foreground('black')
|
||||||
|
time
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
mode = :start
|
||||||
|
b.command(proc{
|
||||||
|
if mode == :start
|
||||||
|
timers.each{|timer| timer.restart}
|
||||||
|
b.text('reset')
|
||||||
|
mode = :reset
|
||||||
|
else
|
||||||
|
timers.each{|timer| timer.stop.reset}
|
||||||
|
b.text('start')
|
||||||
|
mode = :start
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
Tk.mainloop
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user