2003-08-02 01:04:30 -04:00
|
|
|
#!/usr/bin/env ruby
|
2003-07-31 16:52:40 -04:00
|
|
|
#
|
|
|
|
# timer --
|
|
|
|
# This script generates a counter with start,stop and reset buttons.
|
|
|
|
#
|
|
|
|
# Copyright (C) 1998 Takaaki Tateishi (ttate@jaist.ac.jp)
|
|
|
|
# last update: Sat Jun 27 12:24:14 JST 1998
|
|
|
|
#
|
|
|
|
|
|
|
|
require "tk"
|
|
|
|
require "thread"
|
|
|
|
require "tkafter"
|
|
|
|
|
|
|
|
$time = "0.00"
|
|
|
|
$m = Mutex.new
|
|
|
|
$loop = false
|
|
|
|
|
|
|
|
def timer_stop
|
|
|
|
$loop = false
|
|
|
|
$m.lock
|
|
|
|
end
|
|
|
|
|
|
|
|
def timer_start
|
|
|
|
$loop = true
|
|
|
|
$m.unlock
|
|
|
|
end
|
|
|
|
|
|
|
|
def timer_reset
|
|
|
|
$time = "0.00"
|
|
|
|
$root.countframe.counter['text'] = $time
|
|
|
|
end
|
|
|
|
|
|
|
|
def timer_loop
|
|
|
|
if $loop
|
|
|
|
$time = $time.succ
|
|
|
|
$root.countframe.counter['text'] = $time
|
|
|
|
end
|
|
|
|
Tk.after(10,proc{timer_loop})
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# thread version
|
|
|
|
#
|
|
|
|
def timer_loop2
|
|
|
|
while true
|
|
|
|
$m.lock
|
|
|
|
$time = $time.succ
|
|
|
|
$root.countframe.counter['text'] = $time
|
|
|
|
sleep(0.01)
|
|
|
|
$m.unlock
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# TkAfter
|
|
|
|
#
|
|
|
|
def timer_loop3
|
|
|
|
if $loop
|
|
|
|
$time = $time.succ
|
|
|
|
$root.countframe.counter['text'] = $time
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
class CountFrame < TkFrame
|
|
|
|
attr_reader :counter
|
|
|
|
|
|
|
|
def initialize(parent=nil,keys=nil)
|
|
|
|
super(parent,keys)
|
|
|
|
@counter = TkLabel.new(self,
|
|
|
|
'text'=>$time,
|
|
|
|
'relief'=>'raised')
|
|
|
|
@counter.pack('fill'=>'both')
|
|
|
|
self
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
class ButtonFrame < TkFrame
|
|
|
|
def initialize(parent=nil,keys=nil)
|
|
|
|
super(parent,keys)
|
2003-08-02 01:04:30 -04:00
|
|
|
=begin
|
2003-07-31 16:52:40 -04:00
|
|
|
@stop = TkButton.new(self,
|
|
|
|
'text'=>'Stop',
|
|
|
|
'command'=>proc{timer_stop})
|
|
|
|
@start = TkButton.new(self,
|
|
|
|
'text'=>'Start',
|
|
|
|
'command'=>proc{timer_start})
|
2003-08-02 01:04:30 -04:00
|
|
|
=end
|
|
|
|
@stop = TkButton.new(self, :text=>'Stop', :state=>:disabled)
|
|
|
|
@start = TkButton.new(self, :text=>'Start', :state=>:normal)
|
|
|
|
|
|
|
|
@stop.command proc{
|
|
|
|
timer_stop
|
|
|
|
@start.state(:normal)
|
|
|
|
@stop.state(:disabled)
|
|
|
|
}
|
|
|
|
@start.command proc{
|
|
|
|
timer_start
|
|
|
|
@stop.state(:normal)
|
|
|
|
@start.state(:disabled)
|
|
|
|
}
|
|
|
|
|
2003-07-31 16:52:40 -04:00
|
|
|
@reset = TkButton.new(self,
|
|
|
|
'text'=>'Reset',
|
|
|
|
'command'=>proc{timer_reset})
|
|
|
|
for b in [@stop,@start,@reset]
|
|
|
|
b.pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
class Timer < TkRoot
|
|
|
|
attr_reader :countframe
|
|
|
|
|
2003-08-02 01:04:30 -04:00
|
|
|
def initialize(*args)
|
|
|
|
super(*args)
|
2003-07-31 16:52:40 -04:00
|
|
|
@countframe = CountFrame.new(self)
|
|
|
|
@buttonframe = ButtonFrame.new(self)
|
|
|
|
for f in [@buttonframe,@countframe]
|
|
|
|
f.pack('side'=>'top', 'fill'=>'both')
|
|
|
|
end
|
|
|
|
self
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
$root = Timer.new
|
|
|
|
|
|
|
|
#$thread = Thread.start{timer_loop2}
|
|
|
|
#timer_loop
|
|
|
|
TkAfter.new(10,-1,proc{timer_loop3}).start
|
|
|
|
|
|
|
|
Tk.mainloop
|