# This file is part of NIT ( http://www.nitlanguage.org ). # # This file is free software, which comes along with NIT. This software is # distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. You can modify it is you want, provided this header # is kept unaltered, and a notification of the changes is added. # You are allowed to redistribute it and sell it, alone or is a part of # another product. # Event-based interface to track the progression of an operation. module progression # An operation that is trackable using a `ProgressionListener`. abstract class Trackable # Listen to the progression of the operation. var progression_listeners: SimpleCollection[ProgressionListener] = new Array[ProgressionListener] # Notice the registered `ProgessionListener` that the operation started. protected fun fire_started do for l in progression_listeners do l.started l.progressed(0) end end # Notice the registered `ProgessionListener` that the operation progressed. # # Parameter: # # * `done_part`: Indicates what is done. # * `total`: Indicates what need to be done, `done_part` included. protected fun fire_progressed(done_part: Int, total: Int) do for l in progression_listeners do l.progressed(done_part * l.progression_max / total) end end # Notice the registered `ProgessionListener` that the operation is done. protected fun fire_done do for l in progression_listeners do l.progressed(l.progression_max) l.done end end end # Listens to the progression of a possibly long-running operation. interface ProgressionListener # The number that represents a completed operation. fun progression_max: Int do return 100 # The operation started. fun started do end # The operation progressed. # # Parameter: # # * `progression`: Indicator of the progession, between `0` and # `progression_max`. fun progressed(progression: Int) do end # The operation is done. fun done do end end