Class: Legion::TTY::ScreenManager

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/tty/screen_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeScreenManager

Returns a new instance of ScreenManager.



8
9
10
11
12
13
# File 'lib/legion/tty/screen_manager.rb', line 8

def initialize
  @stack = []
  @overlay = nil
  @render_queue = Queue.new
  @mutex = Mutex.new
end

Instance Attribute Details

#overlayObject (readonly)

Returns the value of attribute overlay.



6
7
8
# File 'lib/legion/tty/screen_manager.rb', line 6

def overlay
  @overlay
end

Instance Method Details

#active_screenObject



33
34
35
# File 'lib/legion/tty/screen_manager.rb', line 33

def active_screen
  @mutex.synchronize { @stack.last }
end

#dismiss_overlayObject



41
42
43
# File 'lib/legion/tty/screen_manager.rb', line 41

def dismiss_overlay
  @mutex.synchronize { @overlay = nil }
end

#drain_queueObject



49
50
51
52
53
# File 'lib/legion/tty/screen_manager.rb', line 49

def drain_queue
  updates = []
  updates << @render_queue.pop until @render_queue.empty?
  updates
end

#enqueue(update) ⇒ Object



45
46
47
# File 'lib/legion/tty/screen_manager.rb', line 45

def enqueue(update)
  @render_queue.push(update)
end

#popObject



23
24
25
26
27
28
29
30
31
# File 'lib/legion/tty/screen_manager.rb', line 23

def pop
  @mutex.synchronize do
    return if @stack.size <= 1

    screen = @stack.pop
    screen.teardown
    @stack.last&.activate
  end
end

#push(screen) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/legion/tty/screen_manager.rb', line 15

def push(screen)
  @mutex.synchronize do
    @stack.last&.deactivate
    @stack.push(screen)
    screen.activate
  end
end

#show_overlay(overlay_obj) ⇒ Object



37
38
39
# File 'lib/legion/tty/screen_manager.rb', line 37

def show_overlay(overlay_obj)
  @mutex.synchronize { @overlay = overlay_obj }
end

#teardown_allObject



55
56
57
58
59
60
# File 'lib/legion/tty/screen_manager.rb', line 55

def teardown_all
  @mutex.synchronize do
    @stack.reverse_each(&:teardown)
    @stack.clear
  end
end