class TaskJuggler::GanttLine

This class models the abstract (output independent) form of a line of a Gantt chart. Each line represents a property. Depending on the type of property and it’s context (for nested properties) the content varies. Tasks (not nested) are represented as task bars or milestones. When nested into a resource they are represented as load stacks.

Attributes

height[R]
query[R]
y[R]

Public Class Methods

new(chart, query, y, height, lineIndex, tooltip) click to toggle source

Create a GanttLine object and generate the abstract representation.

# File lib/taskjuggler/reports/GanttLine.rb, line 35
def initialize(chart, query, y, height, lineIndex, tooltip)
  # A reference to the chart that the line belongs to.
  @chart = chart
  # Register the line with the chart.
  @chart.addLine(self)

  # The query is used to access the presented project data.
  @query = query
  # A CellSettingPatternList object to determine the tooltips for the
  # line's content.
  @tooltip = tooltip
  # The category determines the background color of the line.
  @category = nil
  # The y coordinate of the topmost pixel of this line.
  @y = y + chart.header.height + 1
  # The height of the line in screen pixels.
  @height = height

  # The index of the line in the chart. It starts with 0 and is
  # incremented for each line by one.
  @lineIndex = lineIndex
  # The x coordinates of the time-off zones. It's an Array of [ startX, endX
  # ] touples.
  @timeOffZones = []

  generate
end

Public Instance Methods

addBlockedZones(router) click to toggle source

Register the areas that dependency lines should not cross.

# File lib/taskjuggler/reports/GanttLine.rb, line 118
def addBlockedZones(router)
  @content.each do |c|
    c.addBlockedZones(router)
  end
end
getTask() click to toggle source

This function only works for primary task lines. It returns the generated intermediate object for that line.

# File lib/taskjuggler/reports/GanttLine.rb, line 109
def getTask
  if @content.length == 1
    @content[0]
  else
    nil
  end
end
to_html() click to toggle source

Convert the abstract representation of the GanttLine into HTML elements.

# File lib/taskjuggler/reports/GanttLine.rb, line 64
def to_html
  # The whole line is put in a 'div' section. All coordinates relative to
  # the top-left corner of this div. Elements that extend over the
  # boundaries of this div are cut off.
  div = XMLElement.new('div', 'class' => @category,
                       'style' => "margin:0px; padding:0px; " +
                       "position:absolute; " +
                       "left:0px; top:#{@y}px; " +
                       "width:#{@chart.width.to_i}px; " +
                       "height:#{@height}px; " +
                       "font-size:10px;")
  # Render time-off zones.
  @timeOffZones.each do |zone|
    div << rectToHTML(zone[0], 0, zone[1], @height, 'offduty')
  end

  # Render grid lines. The grid lines are determined by the large scale.
  @chart.header.gridLines.each do |line|
    div << rectToHTML(line, 0, 1, @height, 'tabvline')
  end

  # Now render the content as HTML elements.
  @content.each do |c|
    html = c.to_html
    if html && html[0]
      addHtmlTooltip(@tooltip, @query, html[0], div)
      div << html
    end
  end

  # Render the 'now' line
  if @chart.header.nowLineX
    div << rectToHTML(@chart.header.nowLineX, 0, 1, @height, 'nowline')
  end

  # Render the 'markdate' line
  if @chart.header.markdateLineX
    div << rectToHTML(@chart.header.markdateLineX, 0, 1, @height, 'markdateline')
  end

  div
end