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.



720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
# File 'lib/rtf/node.rb', line 720

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



710
711
712
# File 'lib/rtf/node.rb', line 710

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.



755
756
757
# File 'lib/rtf/node.rb', line 755

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.



780
781
782
783
784
785
# File 'lib/rtf/node.rb', line 780

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.



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

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.



767
768
769
770
# File 'lib/rtf/node.rb', line 767

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

#rowsObject

Attribute accessor.



740
741
742
# File 'lib/rtf/node.rb', line 740

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.



797
798
799
800
801
802
803
804
805
806
807
# File 'lib/rtf/node.rb', line 797

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.



814
815
816
# File 'lib/rtf/node.rb', line 814

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.



819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
# File 'lib/rtf/node.rb', line 819

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