Class: TaskJuggler::ReportTableCell

Inherits:
Object
  • Object
show all
Defined in:
lib/taskjuggler/reports/ReportTableCell.rb

Overview

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line, query, text = nil, headerCell = false) ⇒ ReportTableCell

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.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 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

Instance Attribute Details

#alignmentObject

Returns the value of attribute alignment.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def alignment
  @alignment
end

#boldObject

Returns the value of attribute bold.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def bold
  @bold
end

#categoryObject

Returns the value of attribute category.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def category
  @category
end

#cellColorObject

Returns the value of attribute cellColor.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def cellColor
  @cellColor
end

#columnsObject

Returns the value of attribute columns.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def columns
  @columns
end

#dataObject

Returns the value of attribute data.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def data
  @data
end

#fontColorObject

Returns the value of attribute fontColor.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def fontColor
  @fontColor
end

#fontSizeObject

Returns the value of attribute fontSize.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def fontSize
  @fontSize
end

#hiddenObject

Returns the value of attribute hidden.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def hidden
  @hidden
end

#iconObject

Returns the value of attribute icon.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def icon
  @icon
end

#iconTooltipObject

Returns the value of attribute iconTooltip.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def iconTooltip
  @iconTooltip
end

#indentObject

Returns the value of attribute indent.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def indent
  @indent
end

#lineObject (readonly)

Returns the value of attribute line.



23
24
25
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 23

def line
  @line
end

#paddingObject

Returns the value of attribute padding.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def padding
  @padding
end

#rowsObject

Returns the value of attribute rows.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def rows
  @rows
end

#showTooltipHintObject

Returns the value of attribute showTooltipHint.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def showTooltipHint
  @showTooltipHint
end

#specialObject

Returns the value of attribute special.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def special
  @special
end

#textObject

Returns the value of attribute text.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def text
  @text
end

#tooltipObject

Returns the value of attribute tooltip.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def tooltip
  @tooltip
end

#widthObject

Returns the value of attribute width.



24
25
26
# File 'lib/taskjuggler/reports/ReportTableCell.rb', line 24

def width
  @width
end

Instance Method Details

#==(c) ⇒ Object

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.



91
92
93
94
95
96
97
98
99
# 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

#to_csv(csv, columnIdx, lineIdx) ⇒ Object

Add the text content of the cell to an Array of Arrays form of the table.



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# 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

#to_htmlObject

Turn the abstract cell representation into an HTML element tree.



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# 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