Class: RTF::TableNode

Inherits:
ContainerNode show all
Defined in:
lib/rtf/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 tabkle.

columns

The number of columns in the table.

*widths

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



711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
# File 'lib/rtf/node.rb', line 711

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



701
702
703
# File 'lib/rtf/node.rb', line 701

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.



746
747
748
# File 'lib/rtf/node.rb', line 746

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.



771
772
773
774
775
776
# File 'lib/rtf/node.rb', line 771

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.



736
737
738
# File 'lib/rtf/node.rb', line 736

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.



758
759
760
761
# File 'lib/rtf/node.rb', line 758

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

#rowsObject

Attribute accessor.



731
732
733
# File 'lib/rtf/node.rb', line 731

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.



788
789
790
791
792
793
794
795
796
797
798
# File 'lib/rtf/node.rb', line 788

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.



805
806
807
# File 'lib/rtf/node.rb', line 805

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.



810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
# File 'lib/rtf/node.rb', line 810

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
end