class TheFox::TermKit::UIApp

Attributes

active_controller[RW]
app_controller[RW]

Public Class Methods

new() click to toggle source
Calls superclass method TheFox::TermKit::App.new
# File lib/termkit/app/app_ui.rb, line 10
def initialize
    super()
    
    #puts 'UIApp initialize'
    
    @render_count = 0
    @app_controller = nil
    @active_controller = nil
    
    ui_init
end

Public Instance Methods

draw_line(point, row) click to toggle source
# File lib/termkit/app/app_ui.rb, line 81
def draw_line(point, row)
    x_pos = point.x
    y_pos = point.y
    
    row.length.times do |n|
        draw_point(Point.new(x_pos, y_pos), ViewContent.new(row[n]))
        x_pos += 1
    end
end
draw_point(point, content) click to toggle source

Needs to be implemented by the sub-class.

For example, CursesApp is a sub-class of UIApp. CursesApp uses Curses.setpos and Curses.addstr in draw_point() to draw the points.

# File lib/termkit/app/app_ui.rb, line 95
def draw_point(point, content)
    raise NotImplementedError
end
render() click to toggle source

Handles the actual rendering and drawing of the UI layer. Calls draw_point() for all points of @active_controller.

# File lib/termkit/app/app_ui.rb, line 55
def render
    #sleep 1 # @TODO: remove this line
    
    area = nil # @TODO: use current terminal size as area
    
    @render_count += 1
    # @logger.debug("--- RENDER: #{@render_count} ---")
    if !@active_controller.nil?
        # @logger.debug("RENDER active_controller OK: #{@active_controller.inspect}")
        # @logger.debug("RENDER active_controller view grid_cache: #{@active_controller.view.grid_cache.inspect}")
        
        @active_controller.render(area).each do |y_pos, row|
            row.each do |x_pos, content|
                #sleep 0.1 # @TODO: remove this line
                
                # @logger.debug("RENDER #{x_pos}:#{y_pos} '#{content}'")
                
                draw_point(Point.new(x_pos, y_pos), content)
                
                #ui_refresh # @TODO: remove this line
            end
        end
    end
    ui_refresh
end
run_cycle() click to toggle source

See App run_cycle() method.

Calls superclass method TheFox::TermKit::App#run_cycle
# File lib/termkit/app/app_ui.rb, line 24
def run_cycle
    super()
    
    #puts 'UIApp->run_cycle'
    
    render
end
set_active_controller(active_controller) click to toggle source
# File lib/termkit/app/app_ui.rb, line 40
def set_active_controller(active_controller)
    if !active_controller.is_a?(ViewController)
        raise ArgumentError, "Argument is not a ViewController -- #{active_controller.class} given"
    end
    
    if !@active_controller.nil?
        @active_controller.inactive
    end
    
    @active_controller = active_controller
    @active_controller.active
end
set_app_controller(app_controller) click to toggle source
# File lib/termkit/app/app_ui.rb, line 32
def set_app_controller(app_controller)
    if !app_controller.is_a?(AppController)
        raise ArgumentError, "Argument is not a AppController -- #{app_controller.class} given"
    end
    
    @app_controller = app_controller
end
ui_max_x() click to toggle source
# File lib/termkit/app/app_ui.rb, line 103
def ui_max_x
    -1
end
ui_max_y() click to toggle source
# File lib/termkit/app/app_ui.rb, line 107
def ui_max_y
    -1
end
ui_refresh() click to toggle source
# File lib/termkit/app/app_ui.rb, line 99
def ui_refresh
    raise NotImplementedError
end

Protected Instance Methods

app_will_terminate() click to toggle source
# File lib/termkit/app/app_ui.rb, line 113
def app_will_terminate
    #puts 'UIApp app_will_terminate'
    
    ui_close
end
key_down(key) click to toggle source
# File lib/termkit/app/app_ui.rb, line 127
def key_down(key)
    if !key.nil? && !@active_controller.nil?
        event = KeyEvent.new
        event.key = key
        
        begin
            @active_controller.handle_event(event)
        rescue Exception::UnhandledKeyEventException => e
            @logger.warn("#{self.class} UnhandledKeyEventException: #{e}")
            
            if @app_controller.nil?
                @logger.warn("#{self.class} UnhandledKeyEventException: no app controller set, raise")
                
                raise e
            end
            
            @app_controller.handle_event(e.event)
        rescue Exception::UnhandledEventException => e
            @logger.warn("#{self.class} UnhandledEventException: #{e}")
        end
    end
end
ui_close() click to toggle source
# File lib/termkit/app/app_ui.rb, line 123
def ui_close
    # raise NotImplementedError
end
ui_init() click to toggle source
# File lib/termkit/app/app_ui.rb, line 119
def ui_init
    # raise NotImplementedError
end