module Rabbit::Element::ContainerElement
Attributes
Public Class Methods
Source
# File lib/rabbit/element/container-element.rb, line 35 def initialize(elems=[]) @elements = [] elems = [elems] unless elems.is_a?(Array) elems.each do |elem| add_element(elem) end super() end
Calls superclass method
Rabbit::Element::Base::new
Public Instance Methods
Source
# File lib/rabbit/element/container-element.rb, line 44 def <<(element) @elements << element element.parent = self dirty! end
Also aliased as: add_element
Source
# File lib/rabbit/element/container-element.rb, line 304 def [](name_or_index) if name_or_index.is_a?(Integer) @elements[name_or_index] else super end end
Calls superclass method
Rabbit::Element::Base#[]
Source
# File lib/rabbit/element/container-element.rb, line 312 def []=(name_or_index, value) if name_or_index.is_a?(Integer) @elements[name_or_index] = value else super end end
Calls superclass method
Rabbit::Element::Base#[]=
Source
# File lib/rabbit/element/container-element.rb, line 234 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
SLOW!!
Source
# File lib/rabbit/element/container-element.rb, line 272 def clear_theme @elements.each do |element| element.clear_theme end super end
Calls superclass method
Rabbit::Element::Base#clear_theme
Also aliased as: container_clear_theme
Source
# File lib/rabbit/element/container-element.rb, line 126 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 = restore_x_centering(x, w) y, h = adjust_y_padding(y, h) end end
Calls superclass method
Rabbit::Element::Base#compile
Source
# File lib/rabbit/element/container-element.rb, line 137 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
Source
# File lib/rabbit/element/container-element.rb, line 146 def compile_horizontal(canvas, x, y, w, h) @elements.each do |element| compile_horizontal_element(element, canvas, x, y, w, h) end end
Source
# File lib/rabbit/element/container-element.rb, line 152 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
Source
# File lib/rabbit/element/container-element.rb, line 57 def delete(element) return if @elements.delete(element).nil? element.parent = nil dirty! element end
Source
# File lib/rabbit/element/container-element.rb, line 280 def dirty? super or @elements.any?{|x| x.dirty?} end
Calls superclass method
Rabbit::Element::Base#dirty?
Source
# File lib/rabbit/element/container-element.rb, line 92 def draw_element(canvas, x, y, w, h, simulation) draw_elements(canvas, x, y, w, h, simulation) end
Source
# File lib/rabbit/element/container-element.rb, line 96 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
Source
# File lib/rabbit/element/container-element.rb, line 296 def have_tag?(name) @elements.any? {|element| element.have_tag?(name)} end
Source
# File lib/rabbit/element/container-element.rb, line 300 def have_wait_tag? @elements.any? {|element| element.have_wait_tag?} end
Source
# File lib/rabbit/element/container-element.rb, line 252 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
perhaps SLOW!!
Source
# File lib/rabbit/element/container-element.rb, line 284 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
Calls superclass method
Rabbit::Element::Base#inspect
Source
# File lib/rabbit/element/container-element.rb, line 217 def prop_delete(name) collect do |elem| elem.prop_delete(name) end end
Source
# File lib/rabbit/element/container-element.rb, line 211 def prop_get(name) collect do |elem| elem.prop_get(name) end end
Source
# File lib/rabbit/element/container-element.rb, line 205 def prop_set(*args) each do |elem| elem.prop_set(*args) end end
Source
# File lib/rabbit/element/container-element.rb, line 87 def replace_element(child, *targets) index = @elements.index(child) @elements[index, 1] = targets end
Source
# File lib/rabbit/element/container-element.rb, line 193 def scene_snapshot_element(widget, snapshot, canvas, x, y, w, h) # TODO: height may be wrong here. We need to check # post_draw_hook usage. [x, y + height, w, h - height] end
Source
# File lib/rabbit/element/container-element.rb, line 160 def setup_scene_element(canvas, scene_widget, x, y, w, h) x, y, w, h = super @centering_adjusted_height = 0 if do_vertical_centering? adjust_height = ((h - height - @padding_bottom) / 2.0).ceil if y + adjust_height > 0 y += adjust_height h -= adjust_height else adjust_height = 0 end @centering_adjusted_height = adjust_height compile_elements(canvas, x, y, w, h) end base_x, base_w = x, w @elements.each do |element| x, y, w, h = element.setup_scene(canvas, scene_widget, x, y, w, h) end # For table last_element = @elements.last if last_element and last_element.inline_element? container_height = height y += container_height h -= container_height end x = base_x w = base_w [x, y, w, h] end
Calls superclass method
Rabbit::Element::Base#setup_scene_element
Source
# File lib/rabbit/element/container-element.rb, line 76 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
Source
# File lib/rabbit/element/container-element.rb, line 64 def text @elements.collect do |element| element.text end.join("\n") end
Source
# File lib/rabbit/element/container-element.rb, line 199 def to_html(generator) collect do |element| element.to_html(generator) end.join("\n") end
Source
# File lib/rabbit/element/container-element.rb, line 70 def to_rd @elements.collect do |element| element.to_rd end.join("\n") end
Source
# File lib/rabbit/element/container-element.rb, line 51 def unshift(element) @elements.unshift(element) element.parent = self dirty! end
Source
# File lib/rabbit/element/container-element.rb, line 223 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