module RRTF # This class represents a row within an RTF table. The TableRowNode is a # specialised container node that can hold only TableCellNodes and, once # created, cannot be resized. Its also not possible to change the parent # of a TableRowNode object. class TableRowNode < ContainerNode # This is the constructor for the TableRowNode class. # # ===== Parameters # table:: A reference to table that owns the row. # cells:: The number of cells that the row will contain. # widths:: One or more integers specifying the widths for the table # columns def initialize(table, cells, *widths) super(table) do entries = [] cells.times do |index| entries.push(TableCellNode.new(self, widths[index])) end entries end end # Attribute accessors def length entries.size end # This method assigns a border width setting to all of the sides on all # of the cells within a table row. # # ==== Parameters # width:: The border width setting to apply. Negative values are ignored # and zero switches the border off. def border_width=(width) self.each {|cell| cell.border_width = width} end # This method overloads the parent= method inherited from the Node class # to forbid the alteration of the cells parent. # # ==== Parameters # parent:: A reference to the new node parent. def parent=(parent) RTFError.fire("Table row nodes cannot have their parent changed.") end # This method sets the shading colour for a row. # # ==== Parameters # colour:: A reference to the Colour object that represents the new # shading colour. Set to nil to switch shading off. def shading_colour=(colour) self.each {|cell| cell.shading_colour = colour} end # 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. #def store(node) # RTFError.fire("Table row nodes cannot have nodes added to.") #end # This method generates the RTF document text for a TableCellNode object. def to_rtf text = StringIO.new temp = StringIO.new offset = 0 text << "\\trowd\\tgraph#{parent.cell_margin}" self.each do |entry| widths = entry.border_widths colour = entry.shading_colour text << "\n" text << "\\clbrdrt\\brdrw#{widths[0]}\\brdrs" if widths[0] != 0 text << "\\clbrdrl\\brdrw#{widths[3]}\\brdrs" if widths[3] != 0 text << "\\clbrdrb\\brdrw#{widths[2]}\\brdrs" if widths[2] != 0 text << "\\clbrdrr\\brdrw#{widths[1]}\\brdrs" if widths[1] != 0 text << "\\clcbpat#{root.colours.index(colour)}" if colour != nil text << "\\cellx#{entry.width + offset}" temp << "\n#{entry.to_rtf}" offset += entry.width end text << "#{temp.string}\n\\row" text.string end end # End of the TableRowNode class. end