class Viewing::TabularFormattedView
TabularFormattedView
class printing and painting stored data
Constants
- DEFAULT_OPTIONS
constants options (color styles)
- DEFAULT_SYMBOLS
unicode symbols for padding and delimiters
Public Class Methods
new()
click to toggle source
initialization
# File lib/tabular_formatted_view.rb, line 46 def initialize @data_hash = {} @console_output = Kernel32Lib.GetStdHandle(Kernel32Lib::STD_OUTPUT_HANDLE) Kernel32Lib.set_console_window_info(@console_output,true,[0,0,1,1]) Kernel32Lib.set_console_text_attribute(@console_output,Kernel32Lib::FOREGROUND_WHITE) @init_console_screen_buffer_info = Kernel32Lib.get_console_screen_buffer_info(@console_output) @init_attributes = @init_console_screen_buffer_info[:attributes] @init_screen_buffer_size = @init_console_screen_buffer_info[:size] end
Public Instance Methods
calc_console_window_size(console_screen_buffer_size)
click to toggle source
# File lib/tabular_formatted_view.rb, line 65 def calc_console_window_size(console_screen_buffer_size) console_window_size = [] console_window_size << 0 << 0 if console_screen_buffer_size[0] >= @init_console_screen_buffer_info[:maximum_window_size][0] console_window_size << @init_console_screen_buffer_info[:maximum_window_size][0]-1 else console_window_size << console_screen_buffer_size[0]-1 end if console_screen_buffer_size[1] >= @init_console_screen_buffer_info[:maximum_window_size][1] console_window_size << @init_console_screen_buffer_info[:maximum_window_size][1]-1 else console_window_size << console_screen_buffer_size[1]-1 end console_window_size end
close()
click to toggle source
close view
# File lib/tabular_formatted_view.rb, line 158 def close Kernel32Lib.set_console_text_attribute(@console_output,@init_attributes.to_i) Kernel32Lib.set_console_screen_buffer_size(@console_output,@init_screen_buffer_size) end
print_value(value,attributes=nil)
click to toggle source
print value
@param value [String] Value for printing @param attributes [Integer] Color style
# File lib/tabular_formatted_view.rb, line 152 def print_value(value,attributes=nil) Kernel32Lib.set_console_text_attribute(@console_output,attributes) if attributes print value end
show(header,fields,options)
click to toggle source
show view
@param header [Array] Header text (with CRLF separated rows) @param fields [Array] Array of metadata: name, max width, format, alignment @param options [Hash] Options: color styles + custom parameters
# File lib/tabular_formatted_view.rb, line 86 def show(header,fields,options) opts = DEFAULT_OPTIONS.merge(options) head_box_lines = [] head_box_lines << [] << [] @data_box_lines = [] @data_box_lines << [] << [] fields.each { |field| head_box_lines[0] << (DEFAULT_SYMBOLS[:box_drawings_double_horizontal]*field[:max_width]) @data_box_lines[0] << (DEFAULT_SYMBOLS[:box_drawings_light_horizontal]*field[:max_width]) @data_box_lines[1] << (DEFAULT_SYMBOLS[:box_drawings_double_horizontal]*field[:max_width]) head_box_lines[1] << (DEFAULT_SYMBOLS[:box_drawings_double_horizontal]*field[:max_width]) } h0_str = "#{DEFAULT_SYMBOLS[:box_drawings_down_single_and_right_double]}#{head_box_lines[0].join(DEFAULT_SYMBOLS[:box_drawings_down_single_and_horizontal_double])}#{DEFAULT_SYMBOLS[:box_drawings_down_single_and_left_double]}" @console_screen_buffer_size = [h0_str.length,header.length + opts[:title_lines].length + head_box_lines.length + 1] console_window_size = calc_console_window_size(@console_screen_buffer_size) system('cls') Kernel32Lib.set_console_text_attribute(@console_output,opts[:header_color_style]) Kernel32Lib.set_console_screen_buffer_size(@console_output,@console_screen_buffer_size) Kernel32Lib.set_console_window_info(@console_output,true,console_window_size) opts[:title_lines].each { |line| print_value "#{line.gsub('_','').center(@console_screen_buffer_size[0],DEFAULT_SYMBOLS[:light_shade])}",opts[:title_color_style] } print_value h0_str,opts[:header_color_style] header.each { |header_line_array| print_value "#{DEFAULT_SYMBOLS[:box_drawings_light_vertical]}#{header_line_array.join(DEFAULT_SYMBOLS[:box_drawings_light_vertical])}#{DEFAULT_SYMBOLS[:box_drawings_light_vertical]}" } print_value "#{DEFAULT_SYMBOLS[:box_drawings_vertical_single_and_right_double]}#{head_box_lines[1].join(DEFAULT_SYMBOLS[:box_drawings_vertical_single_and_horizontal_double])}#{DEFAULT_SYMBOLS[:box_drawings_vertical_single_and_left_double]}" @data_cursor_position = Kernel32Lib.get_console_screen_buffer_info(@console_output)[:cursor_position] end
store(key,values,options)
click to toggle source
store data
@param key [String] Value in first cell of data row @param values [Array] Values in cells of row @param options [Hash] Options: color styles
# File lib/tabular_formatted_view.rb, line 61 def store(key,values,options) @data_hash[key.to_sym] = { values: values, options: DEFAULT_OPTIONS.merge(options) } end
update()
click to toggle source
update view
# File lib/tabular_formatted_view.rb, line 123 def update console_screen_buffer_size = [@console_screen_buffer_size[0],@console_screen_buffer_size[1] + @data_hash.keys.length * 2] console_window_size = calc_console_window_size(console_screen_buffer_size) Kernel32Lib.set_console_screen_buffer_size(@console_output,console_screen_buffer_size) Kernel32Lib.set_console_window_info(@console_output,true,console_window_size) Kernel32Lib.set_console_cursor_position(@console_output,@data_cursor_position) end_line_str = "#{DEFAULT_SYMBOLS[:box_drawings_up_single_and_right_double]}#{@data_box_lines[1].join(DEFAULT_SYMBOLS[:box_drawings_up_single_and_horizontal_double])}#{DEFAULT_SYMBOLS[:box_drawings_up_single_and_left_double]}" line_str = "#{DEFAULT_SYMBOLS[:box_drawings_light_vertical_and_right]}#{@data_box_lines[0].join(DEFAULT_SYMBOLS[:box_drawings_light_vertical_and_horizontal])}#{DEFAULT_SYMBOLS[:box_drawings_light_vertical_and_left]}" keys = @data_hash.keys.sort keys.each_with_index { |key,ind| print_value DEFAULT_SYMBOLS[:box_drawings_light_vertical],@data_hash[key][:options][:border_color_style] @data_hash[key][:values].each { |val| print_value val,@data_hash[key][:options][:data_color_style] print_value DEFAULT_SYMBOLS[:box_drawings_light_vertical],@data_hash[key][:options][:border_color_style] } if ind == keys.length - 1 print_value end_line_str else print_value line_str end } end