Class: TaskJuggler::ReportTable
- Defined in:
- lib/taskjuggler/reports/ReportTable.rb
Overview
This class models the intermediate format of all report tables. The generators for all the table reports create the report in this intermediate format. The to_* member functions can then output the table in the appropriate format.
Direct Known Subclasses
Constant Summary collapse
- SCROLLBARHEIGHT =
The height in pixels of a horizontal scrollbar on an HTML page. This value should be large enough to work for all browsers.
20
Instance Attribute Summary collapse
-
#auxDir ⇒ Object
Returns the value of attribute auxDir.
-
#embedded ⇒ Object
Returns the value of attribute embedded.
-
#equiLines ⇒ Object
Returns the value of attribute equiLines.
-
#headerFontSize ⇒ Object
readonly
Returns the value of attribute headerFontSize.
-
#headerLineHeight ⇒ Object
readonly
Returns the value of attribute headerLineHeight.
-
#maxIndent ⇒ Object
readonly
Returns the value of attribute maxIndent.
-
#selfcontained ⇒ Object
Returns the value of attribute selfcontained.
Instance Method Summary collapse
-
#addColumn(col) ⇒ Object
This function should only be called by the ReportTableColumn constructor.
-
#addLine(line) ⇒ Object
This function should only be called by the ReportTableLine constructor.
-
#initialize ⇒ ReportTable
constructor
Create a new ReportTable object.
-
#lines ⇒ Object
Return the number of registered lines for this table.
-
#minWidth ⇒ Object
Return the minimum required width for the table.
-
#to_csv(csv = [[ ]], startColumn = 0) ⇒ Object
Convert the intermediate representation into an Array of Arrays.
-
#to_html ⇒ Object
Output the table as HTML.
Constructor Details
#initialize ⇒ ReportTable
Create a new ReportTable object.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 33 def initialize # The height if the header lines in screen pixels. @headerLineHeight = 19 # Size of the font used in the header @headerFontSize = 15 # Array of ReportTableColumn objects. @columns = [] # Array of ReportTableLine objects. @lines = [] @maxIndent = 0 # Whether or not all table lines must have same height. @equiLines = false # True if the table is embedded as a column of another ReportTable. @embedded = false # True if the report does not rely on the data of other files. @selfcontained = false # Path to the auxiliary data directory. @auxDir = '' end |
Instance Attribute Details
#auxDir ⇒ Object
Returns the value of attribute auxDir.
30 31 32 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 30 def auxDir @auxDir end |
#embedded ⇒ Object
Returns the value of attribute embedded.
30 31 32 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 30 def @embedded end |
#equiLines ⇒ Object
Returns the value of attribute equiLines.
30 31 32 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 30 def equiLines @equiLines end |
#headerFontSize ⇒ Object (readonly)
Returns the value of attribute headerFontSize.
29 30 31 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 29 def headerFontSize @headerFontSize end |
#headerLineHeight ⇒ Object (readonly)
Returns the value of attribute headerLineHeight.
29 30 31 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 29 def headerLineHeight @headerLineHeight end |
#maxIndent ⇒ Object (readonly)
Returns the value of attribute maxIndent.
29 30 31 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 29 def maxIndent @maxIndent end |
#selfcontained ⇒ Object
Returns the value of attribute selfcontained.
30 31 32 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 30 def selfcontained @selfcontained end |
Instance Method Details
#addColumn(col) ⇒ Object
This function should only be called by the ReportTableColumn constructor.
54 55 56 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 54 def addColumn(col) @columns << col end |
#addLine(line) ⇒ Object
This function should only be called by the ReportTableLine constructor.
59 60 61 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 59 def addLine(line) @lines << line end |
#lines ⇒ Object
Return the number of registered lines for this table.
64 65 66 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 64 def lines @lines.length end |
#minWidth ⇒ Object
Return the minimum required width for the table. If we don’t have a mininum with, nil is returned.
70 71 72 73 74 75 76 77 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 70 def minWidth width = 1 @columns.each do |column| cw = column.minWidth width += cw + 1 if cw end width end |
#to_csv(csv = [[ ]], startColumn = 0) ⇒ Object
Convert the intermediate representation into an Array of Arrays. csv is the destination Array of Arrays. It may contain columns already.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 139 def to_csv(csv = [[ ]], startColumn = 0) # Generate the header line. columnIdx = startColumn @columns.each do |col| columnIdx += col.to_csv(csv, columnIdx) end if @embedded columnIdx - startColumn else # Content of embedded tables is inserted when generating the # respective Line. lineIdx = 1 @lines.each do |line| # Insert a new Array for each line. csv[lineIdx] = [] line.to_csv(csv, startColumn, lineIdx) lineIdx += 1 end csv end end |
#to_html ⇒ Object
Output the table as HTML.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 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 |
# File 'lib/taskjuggler/reports/ReportTable.rb', line 80 def to_html determineMaxIndents attr = { 'class' => 'tj_table', 'cellspacing' => '1' } attr['style'] = 'width:100%; ' if @embedded table = XMLElement.new('table', attr) table << (tbody = XMLElement.new('tbody')) # Generate the 1st table header line. allCellsHave2Rows = true lineHeight = @headerLineHeight @columns.each do |col| if col.cell1.rows != 2 && !col.cell1.special allCellsHave2Rows = false break; end end if allCellsHave2Rows @columns.each { |col| col.cell1.rows = 1 } lineHeight = @headerLineHeight * 2 + 1 end tbody << (tr = XMLElement.new('tr', 'class' => 'tabhead', 'style' => "height:#{lineHeight}px; " + "font-size:#{@headerFontSize}px;")) @columns.each { |col| tr << col.to_html(1) } unless allCellsHave2Rows # Generate the 2nd table header line. tbody << (tr = XMLElement.new('tr', 'class' => 'tabhead', 'style' => "height:#{@headerLineHeight}px; " + "font-size:#{@headerFontSize}px;")) @columns.each { |col| tr << col.to_html(2) } end # Generate the rest of the table. @lines.each { |line| tbody << line.to_html } # In case we have columns with scrollbars, we generate an extra line with # cells for all columns that don't have a scrollbar. The scrollbar must # have a height of SCROLLBARHEIGHT pixels or less. if tbody << (tr = XMLElement.new('tr', 'style' => "height:#{SCROLLBARHEIGHT}px")) @columns.each do |column| unless column. tr << XMLElement.new('td') end end end table end |