Class: MotionPrime::BaseElement
Direct Known Subclasses
ButtonElement, DrawElement, GoogleMapElement, ImageElement, LabelElement, MapElement, ProgressHudElement, SpinnerElement, TableHeaderElement, TableViewCellElement, TableViewElement, TextFieldElement, TextViewElement, ViewWithSectionElement, WebViewElement
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
camelize_factory, class_factory, low_camelize_factory
#build_styles_chain
#debug_info, #element?, #normalize_object, #normalize_options, #normalize_value
Constructor Details
#initialize(options = {}) ⇒ BaseElement
Returns a new instance of BaseElement.
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'motion-prime/elements/base_element.rb', line 20
def initialize(options = {})
options[:screen] = options[:screen].try(:weak_ref)
@options = options
@screen = options[:screen]
@section = options[:section]
@view_class = options[:view_class] || 'UIView'
@name = options[:name]
@block = options[:block]
@view_name = self.class_name_without_kvo.demodulize.underscore.gsub(/(_draw)?_element/, '')
if Prime.env.development?
info = []
info << @name
info << view_name
info << section.try(:name)
info << screen.class
@_element_info = info.join(' ')
@@_allocated_elements ||= []
@@_allocated_elements << @_element_info
end
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def name
@name
end
|
#options ⇒ Object
Returns the value of attribute options.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def options
@options
end
|
#screen ⇒ Object
Returns the value of attribute screen.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def screen
@screen
end
|
#section ⇒ Object
Returns the value of attribute section.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def section
@section
end
|
#styles ⇒ Object
Returns the value of attribute styles.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def styles
@styles
end
|
#view ⇒ Object
Returns the value of attribute view.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def view
@view
end
|
#view_class ⇒ Object
Returns the value of attribute view_class.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def view_class
@view_class
end
|
#view_name ⇒ Object
Returns the value of attribute view_name.
15
16
17
|
# File 'motion-prime/elements/base_element.rb', line 15
def view_name
@view_name
end
|
Class Method Details
.after_render(method_name) ⇒ Object
254
255
256
|
# File 'motion-prime/elements/base_element.rb', line 254
def after_render(method_name)
set_callback :render, :after, method_name
end
|
.before_render(method_name) ⇒ Object
251
252
253
|
# File 'motion-prime/elements/base_element.rb', line 251
def before_render(method_name)
set_callback :render, :before, method_name
end
|
.factory(type, options = {}) ⇒ Object
244
245
246
247
248
249
250
|
# File 'motion-prime/elements/base_element.rb', line 244
def factory(type, options = {})
element_class = class_factory("#{type}_element", true) || self
view_class_name = camelize_factory("ui_#{type}")
options.merge!(view_class: view_class_name)
element_class.new(options)
end
|
Instance Method Details
#add_target(target = nil, action = 'on_click:', event = :touch) ⇒ Object
52
53
54
55
|
# File 'motion-prime/elements/base_element.rb', line 52
def add_target(target = nil, action = 'on_click:', event = :touch)
return false unless self.view
self.view.addTarget(target || section, action: action, forControlEvents: event.uicontrolevent)
end
|
#bind_gesture(action, receiver = nil) ⇒ Object
130
131
132
133
134
135
|
# File 'motion-prime/elements/base_element.rb', line 130
def bind_gesture(action, receiver = nil)
receiver ||= self
single_tap = UITapGestureRecognizer.alloc.initWithTarget(receiver, action: action)
view.addGestureRecognizer single_tap
view.setUserInteractionEnabled true
end
|
#cell_element? ⇒ Boolean
141
142
143
|
# File 'motion-prime/elements/base_element.rb', line 141
def cell_element?
@view_class == 'UICollectionViewCell' || @view_class == 'UITableViewCell'
end
|
#cell_section? ⇒ Boolean
137
138
139
|
# File 'motion-prime/elements/base_element.rb', line 137
def cell_section?
section.respond_to?(:cell_section_name)
end
|
#compute_options! ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'motion-prime/elements/base_element.rb', line 81
def compute_options!
block_options = compute_block_options || {}
raw_options = self.options.except(:screen, :name, :block, :view_class).merge(block_options)
compute_style_options(raw_options)
raw_options = Styles.for(styles).merge(raw_options)
@computed_options = raw_options
normalize_options(@computed_options, section.try(:elements_eval_object), %w[
font text placeholder title_label
padding padding_left padding_right padding_top padding_bottom
left right min_width min_outer_width max_width max_outer_width width
top bottom min_height min_outer_height max_height max_outer_height height])
end
|
#computed_options ⇒ Object
76
77
78
79
|
# File 'motion-prime/elements/base_element.rb', line 76
def computed_options
compute_options! unless @computed_options
@computed_options
end
|
#dealloc ⇒ Object
43
44
45
46
47
48
49
50
|
# File 'motion-prime/elements/base_element.rb', line 43
def dealloc
if Prime.env.development?
index = @@_allocated_elements.index(@_element_info)
@@_allocated_elements.delete_at(index) if index
end
Prime.logger.dealloc_message :element, self, self.name
super
end
|
#hide ⇒ Object
122
123
124
|
# File 'motion-prime/elements/base_element.rb', line 122
def hide
view.hidden = true
end
|
#reload! ⇒ Object
94
95
96
97
|
# File 'motion-prime/elements/base_element.rb', line 94
def reload!
reset_computed_values
compute_options!
end
|
#render(options = {}, &block) ⇒ Object
57
58
59
60
61
|
# File 'motion-prime/elements/base_element.rb', line 57
def render(options = {}, &block)
run_callbacks :render do
render!(options, &block)
end
end
|
#render!(options = {}, &block) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
|
# File 'motion-prime/elements/base_element.rb', line 63
def render!(options = {}, &block)
view = screen.add_view class_factory(view_class), computed_options.merge(options) do |view|
@view = view
block.try(:call, view, self)
end
if computed_options.has_key?(:delegate) && computed_options[:delegate].respond_to?(:delegated_by)
computed_options[:delegate].delegated_by(view)
end
view
end
|
#rerender! ⇒ Object
99
100
101
102
103
104
|
# File 'motion-prime/elements/base_element.rb', line 99
def rerender!
render_target = view.try(:superview)
view.try(:removeFromSuperview)
render(render_target: render_target)
section.try(:on_element_render, self)
end
|
#show ⇒ Object
126
127
128
|
# File 'motion-prime/elements/base_element.rb', line 126
def show
view.hidden = false
end
|
#update ⇒ Object
118
119
120
|
# File 'motion-prime/elements/base_element.rb', line 118
def update
update_with_options({})
end
|
#update_options(new_options) ⇒ Object
112
113
114
115
116
|
# File 'motion-prime/elements/base_element.rb', line 112
def update_options(new_options)
options.merge!(new_options)
return unless view
ViewStyler.new(view, view.superview.try(:bounds), new_options).apply
end
|
#update_with_options(new_options = {}) ⇒ Object
106
107
108
109
110
|
# File 'motion-prime/elements/base_element.rb', line 106
def update_with_options(new_options = {})
options.merge!(new_options)
reload!
rerender!
end
|