Sha256: da2b464967cb999aa727cbd4e06d96cf801771ea6f6e2a7027d244c3c2bd264c

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require 'ncurses'
require 'progressbar'
require 'delegate'

module MultiProgressBar
  class << self
    attr_reader :bars

    # Set up the screen.  Always call +MultiProgressBar.start+ before using progress bars.
    def start
      @bars = [].freeze

      Ncurses.initscr
      Ncurses.curs_set(0)

      @bars_window = Ncurses::WINDOW.new(1, 0, Ncurses.LINES-1, 0)
      @log_window  = Ncurses::WINDOW.new(Ncurses.LINES-1, 0, 0, 0)
      @log_window.scrollok(true)
    end

    # Restore the terminal to normal function.  Always call this before exiting.
    def end
      Ncurses.endwin
      puts
    end

    # Write +text+ to the space above the progress bars.
    def log(text)
      @log_window.addstr("#{text}\n")
      @log_window.refresh
    end

    def width  #:nodoc:
      @bars_window.getmaxx
    end

    def add_bar(bar)  #:nodoc:
      @bars += [bar]

      @bars_window.mvwin(Ncurses.LINES-bars.size, @bars_window.getbegx)
      @bars_window.resize(bars.size, @bars_window.getmaxx)
      @bars_window.refresh

      @log_window.resize(Ncurses.LINES-bars.size, @log_window.getmaxx)
      @log_window.refresh
    end

    def update_bar(bar, rendered_bar)  #:nodoc:
      @bars_window.move(bars.index(bar), 0)
      @bars_window.addstr(rendered_bar)
      @bars_window.refresh
    end
  end
end

require 'multi_progress_bar/bar_renderer'
require 'multi_progress_bar/bar'
require 'multi_progress_bar/total_bar'

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
multi_progress_bar-0.1.0 lib/multi_progress_bar.rb