module DbSucker::Application::Window::Core

Constants

SPINNERS
UnknownSpinnerError

Public Instance Methods

change_view(new_view) { || ... } click to toggle source
# File lib/db_sucker/application/window/core.rb, line 121
def change_view new_view
  view_was = @view
  if block_given?
    begin
      @view = new_view
      yield
    ensure
      @view = view_was
    end
  else
    @view = new_view
    view_was
  end
end
choose_spinner() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 53
def choose_spinner
  spinner = app.opts[:window_spinner]
  spinner = SPINNERS.keys.sample if spinner == :random
  if s = SPINNERS[spinner]
    @spinner_frames = s.split("").reverse.freeze
  else
    raise UnknownSpinnerError, "The spinner `#{spinner}' does not exist, use :random or one of: #{SPINNERS.keys * ", "}"
  end
end
dialog(&block) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 165
def dialog &block
  Dialog.new(self, &block)
end
dialog!(&block) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 169
def dialog! &block
  dialog(&block).render!
end
flashbang() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 86
def flashbang
  flash
end
force_cursor(line, col = 0) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 94
def force_cursor line, col = 0
  if line.nil?
    @force_cursor = nil
  else
    @force_cursor = [line, col]
  end
end
init!() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 63
def init!
  app.debug "Entering curses screen mode"
  init_screen
  nl
  if @app.opts[:window_keypad]
    raw
    nonl
    noecho
    cbreak
    stdscr.keypad = true
    set_cursor 0
  end

  # colors
  start_color
  use_default_colors
  [:COLOR_BLACK, :COLOR_RED, :COLOR_GREEN, :COLOR_YELLOW, :COLOR_BLUE, :COLOR_MAGENTA, :COLOR_CYAN, :COLOR_WHITE].each do |cl|
    c = Window.const_get(cl)
    init_pair(c, c, -1)
  end
  init_pair(Window::COLOR_GRAY, 0, -1)
end
line(l = 1) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 112
def line l = 1
  setpos(l - 1, @x_offset)
end
next_line() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 116
def next_line
  @line += 1
  setpos(@line, @x_offset)
end
progress_bar(perc, opts = {}) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 136
def progress_bar perc, opts = {}
  opts = opts.reverse_merge({
    width: cols - stdscr.curx - 3,
    prog_open: "[",
    prog_open_color: "yellow",
    prog_done: "=",
    prog_done_color: "green",
    prog_current: ">",
    prog_current_color: "yellow",
    prog_remain: ".",
    prog_remain_color: "gray",
    prog_close: "]",
    prog_close_color: "yellow",
  })
  pdone = (opts[:width].to_d * (perc.to_d / 100.to_d)).ceil.to_i
  prem  = opts[:width] - pdone
  pcur  = 0
  if perc < 100
    pdone.zero? ? (prem -= 1) : (pdone -= 1)
    pcur  += 1
  end

  send(opts[:prog_open_color], " #{opts[:prog_open]}")
  send(opts[:prog_done_color], "".ljust(pdone, opts[:prog_done])) unless pdone.zero?
  send(opts[:prog_current_color], "".ljust(pcur, opts[:prog_current])) unless pcur.zero?
  send(opts[:prog_remain_color], "".ljust(prem, opts[:prog_remain])) unless prem.zero?
  send(opts[:prog_close_color], "#{opts[:prog_close]}")
end
set_cursor(visibility) click to toggle source
# File lib/db_sucker/application/window/core.rb, line 90
def set_cursor visibility
  curs_set(visibility)
end
start() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 25
def start
  @keypad.start_loop
  start_window_loop
end
start_window_loop() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 37
def start_window_loop
  @loop = app.spawn_thread(:window_draw_loop) do |thr|
    loop do
      break if thr[:stop] && (@view == :status || @force_kill)
      refresh_screen if app.opts[:window_draw]
      thr.wait(app.opts[:window_refresh_delay])
    end
  end
end
stop() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 30
def stop
  stop_window_loop
  @keypad.stop_loop
  close_screen
  app.debug "Leaving curses screen mode"
end
stop_window_loop() click to toggle source
# File lib/db_sucker/application/window/core.rb, line 47
def stop_window_loop
  return unless @loop
  @loop[:stop] = true
  @loop.signal.join
end
update() { || ... } click to toggle source
# File lib/db_sucker/application/window/core.rb, line 102
def update
  clear
  @x_offset = 0
  @line = -1
  yield if block_given?
  next_line
  setpos(*@force_cursor) if @force_cursor
  refresh
end