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.



548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
# File 'lib/rtf/node.rb', line 548

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



538
539
540
# File 'lib/rtf/node.rb', line 538

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.



583
584
585
# File 'lib/rtf/node.rb', line 583

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.



608
609
610
611
612
613
# File 'lib/rtf/node.rb', line 608

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.



573
574
575
# File 'lib/rtf/node.rb', line 573

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.



595
596
597
598
# File 'lib/rtf/node.rb', line 595

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

#rowsObject

Attribute accessor.



568
569
570
# File 'lib/rtf/node.rb', line 568

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.



625
626
627
628
629
630
631
632
633
634
635
# File 'lib/rtf/node.rb', line 625

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.



642
643
644
# File 'lib/rtf/node.rb', line 642

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.



647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
# File 'lib/rtf/node.rb', line 647

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