class TaskJuggler::ReportTableCell
This class models the output format independent version of a cell in a TableReport
. It belongs to a certain ReportTableLine
and ReportTableColumn
. Normally a cell contains text on a colored background. By help of the @special variable it can alternatively contain any object the provides the necessary output methods such as to_html.
Attributes
Public Class Methods
Create the ReportTableCell
object and initialize the attributes to some default values. line is the ReportTableLine
this cell belongs to. text is the text that should appear in the cell. headerCell is a flag that must be true only for table header cells.
# File lib/taskjuggler/reports/ReportTableCell.rb, line 35 def initialize(line, query, text = nil, headerCell = false) @line = line @line.addCell(self) if line # Specifies whether this is a header cell or not. @headerCell = headerCell # A copy of a Query object that is needed to access project data via the # query function. @query = query ? query.dup : nil # The cell textual content. This may be a String or a # RichTextIntermediate object. self.text = text || '' # A custom text for the tooltip. @tooltip = nil # Determines if the tooltip is triggered by an special hinting icon or # the whole cell. @showTooltipHint = true # The original data of the cell content (optional, nil if not provided) @data = nil # Determines the background color of the cell. @category = nil # True of the cell is hidden (because other cells span multiple rows or # columns) @hidden = false # How to horizontally align the cell @alignment = :center # Horizontal padding between frame and cell content @padding = 3 # Whether or not to indent the cell. If not nil, it is an Integer # indicating the indentation level. @indent = nil # The basename of the icon file @icon = nil # A custom tooltip for the cell icon @iconTooltip = nil # Font size of the cell text in pixels @fontSize = nil # The background color of the cell. Overwrite the @category color. @cellColor = nil # The color of the cell text font. @fontColor = nil # True of a bold font is to be used for the cell text. @bold = false # The width of the column in pixels @width = nil # The number of rows the cell spans @rows = 1 # The number of columns the cell spans @columns = 1 # Ignore everything and use this reference to generate the output. @special = nil end
Public Instance Methods
Return true if two cells are similar enough so that they can be merged in the report to a single, wider cell. c is the cell to compare this cell with.
# File lib/taskjuggler/reports/ReportTableCell.rb, line 91 def ==(c) @text == c.text && @tooltip == c.tooltip && @alignment == c.alignment && @padding == c.padding && @indent == c.indent && @cellColor == c.cellColor && @category == c.category end
Add the text content of the cell to an Array of Arrays form of the table.
# File lib/taskjuggler/reports/ReportTableCell.rb, line 155 def to_csv(csv, columnIdx, lineIdx) # We only support left indentation in CSV files as the spaces for right # indentation will be disregarded by most applications. indent = @indent && @alignment == :left ? ' ' * @indent : '' columns = 1 if @special # This is for nested tables. They will be inserted as whole columns # in the existing table. csv[lineIdx][columnIdx] = nil columns = @special.to_csv(csv, columnIdx) else cell = if @data && @data.is_a?(String) @data elsif @text if @text.respond_to?('functionHandler') @text.setQuery(@query) end str = @text.to_s # Remove any trailing line breaks. These don't really make much # sense in CSV files. while str[-1] == ?\n str.chomp! end str end # Try to convert numbers and other types to their native Ruby type if # they are supported by CSVFile. native = CSVFile.strToNative(cell) # Only for String objects, we add the indentation. csv[lineIdx][columnIdx] = (native.is_a?(String) ? indent + native : native) end return columns end
Turn the abstract cell representation into an HTML element tree.
# File lib/taskjuggler/reports/ReportTableCell.rb, line 102 def to_html return nil if @hidden return @special.to_html if @special # Determine cell attributes attribs = { } attribs['rowspan'] = "#{@rows}" if @rows > 1 attribs['colspan'] = "#{@columns}" if @columns > 1 attribs['class'] = @category ? @category : 'tabcell' style = '' style += "background-color: #{@cellColor}; " if @cellColor attribs['style'] = style unless style.empty? cell = XMLElement.new('td', attribs) cell << (table = XMLElement.new('table', 'class' => @category ? 'tj_table_cell' : 'tj_table_header_cell', 'cellspacing' => '0', 'style' => cellStyle)) table << (row = XMLElement.new('tr')) calculateIndentation # Insert a padding cell for the left side indentation. if @leftIndent && @leftIndent > 0 row << XMLElement.new('td', 'style' => "width:#{@leftIndent}px; ") end row << cellIcon(cell) labelDiv, tooltip = cellLabel row << labelDiv # Overwrite the tooltip if the user has specified a custom tooltip. tooltip = @tooltip if @tooltip if tooltip && !tooltip.empty? && !selfcontained if @showTooltipHint row << (td = XMLElement.new('td')) td << XMLElement.new('img', 'src' => "#{auxDir}icons/details.png", 'class' => 'tj_table_cell_tooltip') addHtmlTooltip(tooltip, td, cell) else addHtmlTooltip(tooltip, cell) end end # Insert a padding cell for the right side indentation. if @rightIndent && @rightIndent > 0 row << XMLElement.new('td', 'style' => "width:#{@rightIndent}px; ") end cell end