module Rabbit::Element::ContainerElement

Attributes

elements[R]

Public Class Methods

new(elems=[]) click to toggle source
Calls superclass method Rabbit::Element::Base::new
# File lib/rabbit/element/container-element.rb, line 18
def initialize(elems=[])
  @elements = []
  elems = [elems] unless elems.is_a?(Array)
  elems.each do |elem|
    add_element(elem)
  end
  super()
end

Public Instance Methods

<<(element) click to toggle source
# File lib/rabbit/element/container-element.rb, line 27
def <<(element)
  @elements << element
  element.parent = self
  dirty!
end
Also aliased as: add_element
[](name_or_index) click to toggle source
Calls superclass method Rabbit::Element::Base#[]
# File lib/rabbit/element/container-element.rb, line 248
def [](name_or_index)
  if name_or_index.is_a?(Integer)
    @elements[name_or_index]
  else
    super
  end
end
[]=(name_or_index, value) click to toggle source
Calls superclass method Rabbit::Element::Base#[]=
# File lib/rabbit/element/container-element.rb, line 256
def []=(name_or_index, value)
  if name_or_index.is_a?(Integer)
    @elements[name_or_index] = value
  else
    super
  end
end
_width() click to toggle source

SLOW!!

# File lib/rabbit/element/container-element.rb, line 178
def _width
  block_widths = []
  block_widths << @elements.inject(0) do |result, elem|
    if elem.width
      if elem.inline_element?
        result + elem.width
      else
        block_widths << elem.width
        elem.width
      end
    else
      result
    end
  end
  block_widths.max.to_i
end
add_element(element)
Alias for: <<
clear_theme() click to toggle source
Calls superclass method Rabbit::Element::Base#clear_theme
# File lib/rabbit/element/container-element.rb, line 216
def clear_theme
  @elements.each do |element|
    element.clear_theme
  end
  super
end
Also aliased as: container_clear_theme
compile(canvas, x, y, w, h) click to toggle source
Calls superclass method Rabbit::Element::Base#compile
# File lib/rabbit/element/container-element.rb, line 109
def compile(canvas, x, y, w, h)
  super
  if_dirty do
    x, y, w, h = setup_padding(@x, @y, @w, @h)
    compile_elements(canvas, x, y, w, h)
    x, w = restore_x_padding(x, w)
    x, w = adjust_x_centering(x, w)
    y, h = adjust_y_padding(y, h)
  end
end
compile_elements(canvas, x, y, w, h) click to toggle source
# File lib/rabbit/element/container-element.rb, line 120
def compile_elements(canvas, x, y, w, h)
  prev_is_inline = false
  @elements.each do |element|
    element.compile(canvas, x, y, w, h)
    compile_horizontal_element(element, canvas, x, y, w, h)
    x, y, w, h = element.draw(true)
  end
end
compile_horizontal(canvas, x, y, w, h) click to toggle source
# File lib/rabbit/element/container-element.rb, line 129
def compile_horizontal(canvas, x, y, w, h)
  @elements.each do |element|
    compile_horizontal_element(element, canvas, x, y, w, h)
  end
end
compile_horizontal_element(element, canvas, x, y, w, h) click to toggle source
# File lib/rabbit/element/container-element.rb, line 135
def compile_horizontal_element(element, canvas, x, y, w, h)
  if do_horizontal_centering? or element.do_horizontal_centering?
    element.do_horizontal_centering(canvas, x, y, w, h)
  else
    element.reset_horizontal_centering(canvas, x, y, w, h)
  end
end
container_clear_theme()
Alias for: clear_theme
delete(element) click to toggle source
# File lib/rabbit/element/container-element.rb, line 40
def delete(element)
  return if @elements.delete(element).nil?
  element.parent = nil
  dirty!
  element
end
dirty?() click to toggle source
Calls superclass method Rabbit::Element::Base#dirty?
# File lib/rabbit/element/container-element.rb, line 224
def dirty?
  super or @elements.any?{|x| x.dirty?}
end
draw_element(canvas, x, y, w, h, simulation) click to toggle source
# File lib/rabbit/element/container-element.rb, line 75
def draw_element(canvas, x, y, w, h, simulation)
  draw_elements(canvas, x, y, w, h, simulation)
end
draw_elements(canvas, x, y, w, h, simulation) click to toggle source
# File lib/rabbit/element/container-element.rb, line 79
def draw_elements(canvas, x, y, w, h, simulation)
  @centering_adjusted_height = 0

  args = [x, y, w, h]
  if do_vertical_centering?
    adjust_height = ((h - height - @padding_bottom) / 2.0).ceil
    if y + adjust_height > 0
      args = [x, y + adjust_height, w, h - adjust_height]
    else
      adjust_height = 0
    end
    @centering_adjusted_height = adjust_height
    compile_elements(canvas, *args)
  end

  base_x, base_w = x, w
  @elements.each do |element|
    x, y, w, h = element.draw(simulation)
  end
  last_element = @elements.last
  if last_element and last_element.inline_element?
    container_height = height
    x = base_x
    y += container_height
    w = base_w
    h -= container_height
  end
  [x, y, w, h]
end
have_tag?(name) click to toggle source
# File lib/rabbit/element/container-element.rb, line 240
def have_tag?(name)
  @elements.any? {|element| element.have_tag?(name)}
end
have_wait_tag?() click to toggle source
# File lib/rabbit/element/container-element.rb, line 244
def have_wait_tag?
  @elements.any? {|element| element.have_wait_tag?}
end
height() click to toggle source

perhaps SLOW!!

# File lib/rabbit/element/container-element.rb, line 196
def height
  inline_heights = []
  @elements.inject(0) do |result, elem|
    elem_height = elem.height
    if elem_height
      if elem.inline_element?
        inline_heights << elem_height
        result
      else
        prev_inlines_max_height = inline_heights.max.to_i
        inline_heights.clear
        h = elem_height + elem.margin_top + elem.margin_bottom
        result + h + prev_inlines_max_height
      end
    else
      result
    end
  end + inline_heights.max.to_i + @padding_top + @padding_bottom
end
inspect(verbose=false) click to toggle source
Calls superclass method Rabbit::Element::Base#inspect
# File lib/rabbit/element/container-element.rb, line 228
def inspect(verbose=false)
  elem_info = @elements.collect do |x|
    _indent(x.inspect(verbose))
  end.join("\n")
  if verbose
    self_info = super(verbose)
  else
    self_info = "<#{self.class.name}>"
  end
  self_info + (elem_info.empty? ? "" : "\n") + elem_info
end
prop_delete(name) click to toggle source
# File lib/rabbit/element/container-element.rb, line 161
def prop_delete(name)
  collect do |elem|
    elem.prop_delete(name)
  end
end
prop_get(name) click to toggle source
# File lib/rabbit/element/container-element.rb, line 155
def prop_get(name)
  collect do |elem|
    elem.prop_get(name)
  end
end
prop_set(*args) click to toggle source
# File lib/rabbit/element/container-element.rb, line 149
def prop_set(*args)
  each do |elem|
    elem.prop_set(*args)
  end
end
replace_element(child, *targets) click to toggle source
# File lib/rabbit/element/container-element.rb, line 70
def replace_element(child, *targets)
  index = @elements.index(child)
  @elements[index, 1] = targets
end
substitute_text(&block) click to toggle source
# File lib/rabbit/element/container-element.rb, line 59
def substitute_text(&block)
  substituted = false
  e = @elements.dup
  e.each_with_index do |element, i|
    element_substituted = element.substitute_text(&block)
    substituted ||= element_substituted
  end
  dirty! if substituted
  substituted
end
text() click to toggle source
# File lib/rabbit/element/container-element.rb, line 47
def text
  @elements.collect do |element|
    element.text
  end.join("\n")
end
to_html(generator) click to toggle source
# File lib/rabbit/element/container-element.rb, line 143
def to_html(generator)
  collect do |element|
    element.to_html(generator)
  end.join("\n")
end
to_rd() click to toggle source
# File lib/rabbit/element/container-element.rb, line 53
def to_rd
  @elements.collect do |element|
    element.to_rd
  end.join("\n")
end
unshift(element) click to toggle source
# File lib/rabbit/element/container-element.rb, line 34
def unshift(element)
  @elements.unshift(element)
  element.parent = self
  dirty!
end
width() click to toggle source
# File lib/rabbit/element/container-element.rb, line 167
def width
  @elements.collect do |elem|
    w = elem.w
    if w
      w += elem.margin_left + elem.margin_right
    end
    w
  end.compact.max.to_i + @padding_left + @padding_right
end