# This application is free software; you can redistribute it and/or
# modify it under the terms of the Ruby license defined in the
# COPYING file.
#
# Copyright (C) 2005 Martin DeMello. All rights reserved.
class FoxDisplayer
attr_accessor :reader
def initialize(text_field)
@text_field = text_field
@formatter = FoxTextFormatter.new(70, "") do |arg, style|
startpos = @str.size
@str << arg
@formats.push [startpos, arg.size, style]
end
@reader = nil
end
def width=(newWidth)
@formatter.width = newWidth
end
def no_info_available
@text_field.text="nothing here, move on!"
end
def init_text
@str = ""
@formats = Array.new
end
# Sets a new text, and all styles
def set_text
@text_field.text = @str
@formats.each do |start, n, style|
case style
when FoxTextFormatter::STYLE_BOLD
@text_field.changeStyle(start, n, 2)
when FoxTextFormatter::STYLE_H1
@text_field.changeStyle(start, n, 3)
when FoxTextFormatter::STYLE_H2
@text_field.changeStyle(start, n, 4)
when FoxTextFormatter::STYLE_H3
@text_field.changeStyle(start, n, 5)
when FoxTextFormatter::STYLE_TELETYPE
@text_field.changeStyle(start, n, 6)
when FoxTextFormatter::STYLE_CODE
@text_field.changeStyle(start, n, 7)
when FoxTextFormatter::STYLE_EMPHASIS
@text_field.changeStyle(start, n, 8)
when FoxTextFormatter::STYLE_CLASS
@text_field.changeStyle(start, n, 9)
else
@text_field.changeStyle(start, n, 1)
end
end
end
# Display method information
def display_method_info(method)
init_text
@formatter.draw_line(method.full_name)
@formatter.display_params(method)
@formatter.draw_line
display_flow(method.comment)
if method.aliases && !method.aliases.empty?
@formatter.blankline
aka = "(also known as "
aka << method.aliases.map {|a| a.name }.join(", ")
aka << ")"
@formatter.wrap(aka)
end
set_text
end
def display_information(message)
init_text
display_flow(message)
set_text
end
def display_class_info(klass)
init_text
superclass = klass.superclass_string
if superclass
superclass = " < " + superclass
else
superclass = ""
end
@formatter.draw_line(klass.display_name + ": " + klass.full_name + superclass)
display_flow(klass.comment)
@formatter.draw_line
unless klass.includes.empty?
@formatter.blankline
@formatter.display_heading("Includes:", 2, "")
incs = []
klass.includes.each do |inc|
inc_desc = @reader.find_class_by_name(inc.name)
if inc_desc
str = inc.name + "("
str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
str << ")"
incs << str
else
incs << inc.name
end
end
@formatter.wrap(incs.sort.join(', '))
end
unless klass.constants.empty?
@formatter.blankline
@formatter.display_heading("Constants:", 2, "")
len = 0
klass.constants.each { |c| len = c.name.length if c.name.length > len }
len += 2
klass.constants.each do |c|
@formatter.wrap(c.value, @formatter.indent+((c.name+":").ljust(len)))
end
end
unless klass.class_methods.empty?
@formatter.blankline
@formatter.display_heading("Class methods:", 2, "")
@formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
end
unless klass.instance_methods.empty?
@formatter.blankline
@formatter.display_heading("Instance methods:", 2, "")
@formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
end
unless klass.attributes.empty?
@formatter.blankline
@formatter.wrap("Attributes:", "")
@formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
end
set_text
end
def display_flow(flow)
if !flow || flow.empty?
@formatter.wrap("(no description...)\n")
else
@formatter.display_flow(flow)
end
end
end
syntax highlighted by Code2HTML, v. 0.9.1