
#  $Id: _ticker.icn,v 1.1 2003-05-31 06:09:04 jeffery Exp $

#
# A class for an object with a ticker.
# This class should be subclassed by a class that wishes to
# have a ticker facility, namely implement a method that is
# called repeatedly at set intervals.
#
class Ticker(
   ticker_rate,             # Ticker rate
   next_tick_time           # Time of next tick
   )

   ##
   #  This method should be overridden by the subclass.  It will
   #  be called repeatedly.
   #
   method tick()
      error("tick() must be overridden in subclass")
   end


   ##
   #  Start the ticker process, with the {tick()}
   #  method being invoked approximately every {n} milliseconds.
   #
   #  @param n   the ticker interval in milliseconds.
   #
   method set_ticker(n)
      dispatcher$set_ticker(self, n)
   end

   ##
   #  Stop the ticker.
   #
   method stop_ticker()
      dispatcher$stop_ticker(self)
   end

   ##
   #  Change the interval of the ticker
   #  @param n   the new interval.
   #
   method retime_ticker(n)
      dispatcher$retime_ticker(self, n)
   end

   ##
   #  Succeeds if and only if the ticker is active.
   #
   method is_ticking()
      return \ticker_rate
   end

   initially
end
