Class: RRTF::TableNode

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



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

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



703
704
705
# File 'lib/rrtf/node.rb', line 703

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.



748
749
750
# File 'lib/rrtf/node.rb', line 748

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.



773
774
775
776
777
778
# File 'lib/rrtf/node.rb', line 773

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.



738
739
740
# File 'lib/rrtf/node.rb', line 738

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.



760
761
762
763
# File 'lib/rrtf/node.rb', line 760

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

#rowsObject

Attribute accessor.



733
734
735
# File 'lib/rrtf/node.rb', line 733

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.



790
791
792
793
794
795
796
797
798
799
800
# File 'lib/rrtf/node.rb', line 790

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.



807
808
809
# File 'lib/rrtf/node.rb', line 807

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.



812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
# File 'lib/rrtf/node.rb', line 812

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