Class: EideticRML::LayoutManagers::LayoutManager

Inherits:
Object
  • Object
show all
Defined in:
lib/erml_layout_managers.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(style) ⇒ LayoutManager

Returns a new instance of LayoutManager.



11
12
13
# File 'lib/erml_layout_managers.rb', line 11

def initialize(style)
  @style = style
end

Class Method Details

.for_name(name) ⇒ Object



71
72
73
# File 'lib/erml_layout_managers.rb', line 71

def self.for_name(name)
  @@klasses[name] unless @@klasses.nil?
end

.register(name, klass) ⇒ Object



67
68
69
# File 'lib/erml_layout_managers.rb', line 67

def self.register(name, klass)
  (@@klasses ||= {})[name] = klass
end

Instance Method Details

#after_layout(container) ⇒ Object



64
65
# File 'lib/erml_layout_managers.rb', line 64

def after_layout(container)
end

#col_grid(container) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/erml_layout_managers.rb', line 23

def col_grid(container)
  grid = Support::Grid.new(1, container.children.size)
  container.children.each_with_index do |widget, index|
    grid[0, index] = widget
  end
  grid
end

#layout(container, writer) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/erml_layout_managers.rb', line 31

def layout(container, writer)
  absolute_widgets = container.children.select { |widget| widget.position == :absolute }
  layout_absolute(container, writer, absolute_widgets)
  relative_widgets = container.children.select { |widget| widget.position == :relative }
  layout_relative(container, writer, relative_widgets)
  container.children.each { |widget| container.root_page.positioned_widgets[widget.position] += 1 if widget.visible and widget.leaf? }
  # $stderr.puts "+++base+++ #{container.root_page.positioned_widgets[:static]}"
end

#layout_absolute(container, writer, widgets) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/erml_layout_managers.rb', line 40

def layout_absolute(container, writer, widgets)
  widgets.each do |widget|
    widget.before_layout
    widget.position(:absolute)
    widget.left(0, :pt) if widget.left.nil? and widget.right.nil?
    widget.top(0, :pt) if widget.top.nil? and widget.bottom.nil?
    widget.width(widget.preferred_width(writer), :pt) if widget.width.nil?
    widget.height(widget.preferred_height(writer), :pt) if widget.height.nil? # swapped
    widget.layout_widget(writer)                                              # swapped
  end
end

#layout_relative(container, writer, widgets) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/erml_layout_managers.rb', line 52

def layout_relative(container, writer, widgets)
  widgets.each do |widget|
    widget.before_layout
    widget.position(:relative) if widget.position == :static
    widget.left(0, :pt) if widget.left.nil? and widget.right.nil?
    widget.top(0, :pt) if widget.top.nil? and widget.bottom.nil?
    widget.width(widget.preferred_width(writer), :pt) if widget.width.nil?
    widget.layout_widget(writer)
    widget.height(widget.preferred_height(writer), :pt) if widget.height.nil?
  end
end

#row_grid(container) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/erml_layout_managers.rb', line 15

def row_grid(container)
  grid = Support::Grid.new(container.children.size, 1)
  container.children.each_with_index do |widget, index|
    grid[index, 0] = widget
  end
  grid
end