# -*- coding: binary -*-
module Rex
module Ui
###
#
# This module tracks the progress of an arbitrary task in a generic fashion.
# The actual implementation is left up to the thing that derives from this
# module.
class ProgressTracker
require 'rex/ui/text/progress_tracker'
def initialize
self.start = 0
self.stop = 0
self.pos = 0
end
# Sets start and step using a range.
def range=(rng)
self.start = rng.begin
self.stop = rng.end
# Sets the start and resets the position.
def start=(start)
@start = start
self.pos = start
# Steps with a given message and step size.
def step(status = nil, n = 1)
self.pos += n if (self.pos + n <= self.stop)
step_status(status)
self.pos
# Resets the current step location.
def reset(n = self.start)
self.pos = n
# Passes a generic status message that isn't necessarily associated
# with a step event.
def status(msg = nil)
# Updates the status associated with the current step.
def step_status(msg = nil)
# An error occurred that may result in aborting the progress.
def error(msg = nil)
# Progress has been aborted, the reason is supplied in msg.
def abort(msg = nil)
# The start of the progress.
attr_reader :start
# The last position in the progress.
attr_accessor :stop
# The current position in the progress.
attr_accessor :pos