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