Class: RRTF::TableNode

Inherits:
ContainerNode show all
Defined in:
lib/rrtf/node/table_node.rb

Overview

This class represents a table node within an RTF document. Table nodes are specialised container nodes that contain only TableRowNodes and have their size specified when they are created an cannot be resized after that.

Instance Attribute Summary collapse

Attributes inherited from ContainerNode

#children

Attributes inherited from Node

#parent

Instance Method Summary collapse

Methods inherited from ContainerNode

#[], #each, #first, #last, #size

Methods inherited from Node

#is_root?, #next_node, #previous_node, #root

Constructor Details

#initialize(parent, *args, &block) ⇒ TableNode

This is a constructor for the TableNode class.

Parameters

parent

A reference to the node that owns the table.

rows

The number of rows in the table.

columns

The number of columns in the table.

*widths

One or more integers specifying the widths of the table columns.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rrtf/node/table_node.rb', line 17

def initialize(parent, *args, &block)
  if args.size>=2
   rows=args.shift
   columns=args.shift
   widths=args
   super(parent) do
      entries = []
      rows.times {entries.push(TableRowNode.new(self, columns, *widths))}
      entries
   end

  elsif block
    block.arity<1 ? self.instance_eval(&block) : block.call(self)
  else
    raise "You should use 0 or >2 args"
  end
   @cell_margin = 100
end

Instance Attribute Details

#cell_marginObject

Cell margin. Default to 100



7
8
9
# File 'lib/rrtf/node/table_node.rb', line 7

def cell_margin
  @cell_margin
end

Instance Method Details

#border_width=(width) ⇒ Object

This method assigns a border width setting to all of the sides on all of the cells within a table.

Parameters

width

The border width setting to apply. Negative values are ignored and zero switches the border off.



52
53
54
# File 'lib/rrtf/node/table_node.rb', line 52

def border_width=(width)
   self.each {|row| row.border_width = width}
end

#column_shading_colour(index, colour) ⇒ Object Also known as: column_shading_color

This method assigns a shading colour to a specified column within a TableNode object.

Parameters

index

The offset from the first column of the column to have shading applied to it.

colour

A reference to a Colour object representing the shading colour to be used. Set to nil to clear shading.



77
78
79
80
81
82
# File 'lib/rrtf/node/table_node.rb', line 77

def column_shading_colour(index, colour)
   self.each do |row|
      cell = row[index]
      cell.shading_colour = colour if cell != nil
   end
end

#columnsObject

Attribute accessor.



42
43
44
# File 'lib/rrtf/node/table_node.rb', line 42

def columns
   entries[0].length
end

#row_shading_colour(index, colour) ⇒ Object Also known as: row_shading_color

This method assigns a shading colour to a specified row within a TableNode object.

Parameters

index

The offset from the first row of the row to have shading applied to it.

colour

A reference to a Colour object representing the shading colour to be used. Set to nil to clear shading.



64
65
66
67
# File 'lib/rrtf/node/table_node.rb', line 64

def row_shading_colour(index, colour)
   row = self[index]
   row.shading_colour = colour if row != nil
end

#rowsObject

Attribute accessor.



37
38
39
# File 'lib/rrtf/node/table_node.rb', line 37

def rows
   entries.size
end

#shading_colour(colour) ⇒ Object Also known as: shading_color

This method provides a means of assigning a shading colour to a selection of cells within a table. The method accepts a block that takes three parameters - a TableCellNode representing a cell within the table, an integer representing the x offset of the cell and an integer representing the y offset of the cell. If the block returns true then shading will be applied to the cell.

Parameters

colour

A reference to a Colour object representing the shading colour to be applied. Set to nil to remove shading.



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/rrtf/node/table_node.rb', line 94

def shading_colour(colour)
   if block_given?
      0.upto(self.size - 1) do |x|
         row = self[x]
         0.upto(row.size - 1) do |y|
            apply = yield row[y], x, y
            row[y].shading_colour = colour if apply
         end
      end
   end
end

#store(node) ⇒ Object

This method overloads the store method inherited from the ContainerNode class to forbid addition of further nodes.

Parameters

node

A reference to the node to be added.



111
112
113
# File 'lib/rrtf/node/table_node.rb', line 111

def store(node)
   RTFError.fire("Table nodes cannot have nodes added to.")
end

#to_rtfObject

This method generates the RTF document text for a TableCellNode object.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rrtf/node/table_node.rb', line 116

def to_rtf
   text = StringIO.new
   size = 0

   self.each do |row|
      if size > 0
         text << "\n"
      else
         size = 1
      end
      text << row.to_rtf
   end

   text.string.sub(/\\row(?!.*\\row)/m, "\\lastrow\n\\row")
end