bluepotion 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +10 -0
- data/lib/bluepotion.rb +16 -0
- data/lib/project/ext/activity.rb +62 -0
- data/lib/project/ext/array_list.rb +25 -0
- data/lib/project/ext/fragment.rb +2 -0
- data/lib/project/ext/object.rb +105 -0
- data/lib/project/ext/string.rb +23 -0
- data/lib/project/ext/view.rb +81 -0
- data/lib/project/potion.rb +50 -0
- data/lib/project/pro_motion/pm_activity.rb +38 -0
- data/lib/project/pro_motion/pm_application.rb +71 -0
- data/lib/project/pro_motion/pm_home_activity.rb +14 -0
- data/lib/project/pro_motion/pm_screen.rb +67 -0
- data/lib/project/pro_motion/pm_screen_module.rb +165 -0
- data/lib/project/pro_motion/pm_single_fragment_activity.rb +31 -0
- data/lib/project/ruby_motion_query/rmq/actions.rb +48 -0
- data/lib/project/ruby_motion_query/rmq/base.rb +260 -0
- data/lib/project/ruby_motion_query/rmq/data.rb +64 -0
- data/lib/project/ruby_motion_query/rmq/debug.rb +9 -0
- data/lib/project/ruby_motion_query/rmq/enumerablish.rb +99 -0
- data/lib/project/ruby_motion_query/rmq/events.rb +28 -0
- data/lib/project/ruby_motion_query/rmq/factory.rb +47 -0
- data/lib/project/ruby_motion_query/rmq/position.rb +2 -0
- data/lib/project/ruby_motion_query/rmq/selectors.rb +72 -0
- data/lib/project/ruby_motion_query/rmq/styles.rb +108 -0
- data/lib/project/ruby_motion_query/rmq/subviews.rb +95 -0
- data/lib/project/ruby_motion_query/rmq/tags.rb +58 -0
- data/lib/project/ruby_motion_query/rmq/traverse.rb +287 -0
- data/lib/project/ruby_motion_query/rmq/utils.rb +36 -0
- data/lib/project/ruby_motion_query/rmq/version.rb +6 -0
- data/lib/project/ruby_motion_query/rmq_activity_data.rb +3 -0
- data/lib/project/ruby_motion_query/rmq_app.rb +9 -0
- data/lib/project/ruby_motion_query/rmq_color.rb +121 -0
- data/lib/project/ruby_motion_query/rmq_device.rb +47 -0
- data/lib/project/ruby_motion_query/rmq_event.rb +1 -0
- data/lib/project/ruby_motion_query/rmq_font.rb +61 -0
- data/lib/project/ruby_motion_query/rmq_image.rb +55 -0
- data/lib/project/ruby_motion_query/rmq_rect.rb +576 -0
- data/lib/project/ruby_motion_query/rmq_screen_data.rb +3 -0
- data/lib/project/ruby_motion_query/rmq_stylesheet.rb +39 -0
- data/lib/project/ruby_motion_query/rmq_view_data.rb +88 -0
- data/lib/project/ruby_motion_query/stylers/rmq_button_styler.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_image_button_styler.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_image_view_styler.rb +24 -0
- data/lib/project/ruby_motion_query/stylers/rmq_linear_layout_styler.rb +32 -0
- data/lib/project/ruby_motion_query/stylers/rmq_relative_layout_styler.rb +7 -0
- data/lib/project/ruby_motion_query/stylers/rmq_styler_helper.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_text_view_styler.rb +50 -0
- data/lib/project/ruby_motion_query/stylers/rmq_view_styler.rb +201 -0
- data/lib/project/version.rb +3 -0
- data/templates/screen/app/screens/name_screen.rb +20 -0
- data/templates/screen/app/stylesheets/name_screen_stylesheet.rb +24 -0
- data/templates/screen/spec/screens/name_screen_spec.rb +8 -0
- metadata +119 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
class RMQ
|
2
|
+
def data(new_data = :rmq_not_provided)
|
3
|
+
if new_data != :rmq_not_provided
|
4
|
+
selected.each do |view|
|
5
|
+
case view
|
6
|
+
#when UILabel then view.setText new_data # set is faster than =
|
7
|
+
#when UIButton then view.setTitle(new_data, forState: UIControlStateNormal)
|
8
|
+
#when UIImageView then view.image = new_data
|
9
|
+
#when UITableView then
|
10
|
+
#when UISwitch then view.setOn(new_data)
|
11
|
+
#when UIDatePicker then
|
12
|
+
#when UISegmentedControl then
|
13
|
+
#when UIRefreshControl then
|
14
|
+
#when UIPageControl then
|
15
|
+
#when UISlider then
|
16
|
+
#when UIStepper then
|
17
|
+
#when UITabBar then
|
18
|
+
#when UITableViewCell then
|
19
|
+
when Potion::TextView then view.text = new_data
|
20
|
+
#when UITextField then view.text = new_data
|
21
|
+
#when UINavigationBar then
|
22
|
+
#when UIScrollView then
|
23
|
+
#when UIProgressView then view.setProgress(new_data, animated: true)
|
24
|
+
|
25
|
+
# TODO, finish
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
self
|
30
|
+
else
|
31
|
+
out = selected.map do |view|
|
32
|
+
case view
|
33
|
+
#when UILabel then view.text
|
34
|
+
#when UIButton then view.titleForState(UIControlStateNormal)
|
35
|
+
#when UIImageView then view.image
|
36
|
+
#when UITableView then
|
37
|
+
#when UISwitch then
|
38
|
+
#when UIDatePicker then
|
39
|
+
#when UISegmentedControl then
|
40
|
+
#when UIRefreshControl then
|
41
|
+
#when UIPageControl then
|
42
|
+
#when UISlider then
|
43
|
+
#when UIStepper then
|
44
|
+
#when UITabBar then
|
45
|
+
#when UITableViewCell then
|
46
|
+
when Potion::TextView then view.text
|
47
|
+
#when UITextField then view.text
|
48
|
+
#when UINavigationBar then
|
49
|
+
#when UIScrollView then
|
50
|
+
#when UIProgressView then view.progress
|
51
|
+
|
52
|
+
# TODO, finish
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
out = out.first if out.length == 1
|
57
|
+
out
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def data=(new_data)
|
62
|
+
self.data(new_data)
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
class RMQ
|
2
|
+
# I'm purposly not including Enumerable,
|
3
|
+
# please use to_a if you want one
|
4
|
+
|
5
|
+
|
6
|
+
# @return [RMQ]
|
7
|
+
def <<(value)
|
8
|
+
selected << value if value.is_a?(UIView)
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [RMQ]
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# rmq(UILabel)[3]
|
16
|
+
# or
|
17
|
+
# rmq(UILabel)[1..5]
|
18
|
+
# or
|
19
|
+
# rmq(UILabel)[2,3]
|
20
|
+
def [](*args)
|
21
|
+
RMQ.create_with_array_and_selectors(Array(selected[*args]), @selectors, @originated_from)
|
22
|
+
end
|
23
|
+
alias :eq :[]
|
24
|
+
|
25
|
+
# @return [RMQ]
|
26
|
+
def each(&block)
|
27
|
+
return self unless block
|
28
|
+
RMQ.create_with_array_and_selectors(selected.each(&block), @selectors, @originated_from)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [RMQ]
|
32
|
+
def map(&block)
|
33
|
+
return self unless block
|
34
|
+
RMQ.create_with_array_and_selectors(selected.map(&block), @selectors, @originated_from)
|
35
|
+
end
|
36
|
+
alias :collect :map
|
37
|
+
|
38
|
+
# @return [RMQ]
|
39
|
+
def select(&block)
|
40
|
+
return self unless block
|
41
|
+
RMQ.create_with_array_and_selectors(selected.select(&block), @selectors, @originated_from)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [RMQ]
|
45
|
+
def detect(&block) # Unlike enumerable, detect and find are not the same. See find in transverse
|
46
|
+
return self unless block
|
47
|
+
RMQ.create_with_array_and_selectors(selected.select(&block), @selectors, @originated_from)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [RMQ]
|
51
|
+
def grep(&block)
|
52
|
+
return self unless block
|
53
|
+
RMQ.create_with_array_and_selectors(selected.grep(&block), @selectors, @originated_from)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @return [RMQ]
|
57
|
+
def reject(&block)
|
58
|
+
return self unless block
|
59
|
+
RMQ.create_with_array_and_selectors(selected.reject(&block), @selectors, @originated_from)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [RMQ]
|
63
|
+
def inject(o, &block)
|
64
|
+
return self unless block
|
65
|
+
RMQ.create_with_array_and_selectors(selected.inject(o, &block), @selectors, @originated_from)
|
66
|
+
end
|
67
|
+
alias :reduce :inject
|
68
|
+
|
69
|
+
# @return [RMQ]
|
70
|
+
def first
|
71
|
+
# TODO, check if it fails with nil
|
72
|
+
RMQ.create_with_array_and_selectors([selected.first], @selectors, @originated_from)
|
73
|
+
end
|
74
|
+
# @return [RMQ]
|
75
|
+
def last
|
76
|
+
# TODO, check if it fails with nil
|
77
|
+
RMQ.create_with_array_and_selectors([selected.last], @selectors, @originated_from)
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [Array]
|
81
|
+
def to_a
|
82
|
+
selected
|
83
|
+
end
|
84
|
+
|
85
|
+
# @return [Integer] number of views selected
|
86
|
+
def length
|
87
|
+
selected.length
|
88
|
+
end
|
89
|
+
def size
|
90
|
+
length
|
91
|
+
end
|
92
|
+
def count
|
93
|
+
length
|
94
|
+
end
|
95
|
+
#alias :size :length
|
96
|
+
#alias :count :length
|
97
|
+
end
|
98
|
+
|
99
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class RMQ
|
2
|
+
def on(event, args={}, &block)
|
3
|
+
self.selected.each do |view|
|
4
|
+
|
5
|
+
case event
|
6
|
+
when :click, :tap, :touch
|
7
|
+
view.onClickListener = RMQClickHandler.new(&block)
|
8
|
+
else
|
9
|
+
raise "[RMQ ERROR] Unrecognized event: #{event}"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class RMQClickHandler
|
18
|
+
attr_accessor :click_block
|
19
|
+
|
20
|
+
def initialize(&block)
|
21
|
+
@click_block = block
|
22
|
+
end
|
23
|
+
|
24
|
+
def onClick(view)
|
25
|
+
click_block.call(view)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class RMQ
|
2
|
+
# This is used internally, to get a new rmq instance, just call "rmq" in your view or controller or
|
3
|
+
# just create a new one like so: RubyMotionQuery::RMQ.new
|
4
|
+
#
|
5
|
+
# @return [RMQ]
|
6
|
+
def create_blank_rmq
|
7
|
+
RMQ.create_with_array_and_selectors([], self.selectors, @originated_from)
|
8
|
+
end
|
9
|
+
|
10
|
+
# This is used internally, to get a new rmq instance, just call "rmq" in your view or controller or
|
11
|
+
# just create a new one like so: RubyMotionQuery::RMQ.new
|
12
|
+
#
|
13
|
+
# @return [RMQ]
|
14
|
+
def create_rmq_in_originated_from(*working_selectors)
|
15
|
+
RMQ.create_with_selectors(working_selectors, @originated_from)
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
|
20
|
+
# This is used internally, to get a new rmq instance, just call "rmq" in your view or controller or
|
21
|
+
# just create a new one like so: RubyMotionQuery::RMQ.new
|
22
|
+
#
|
23
|
+
# @return [RMQ]
|
24
|
+
def create_with_selectors(working_selectors, originated_from, working_parent_rmq = nil)
|
25
|
+
q = RMQ.new
|
26
|
+
q.originated_from = originated_from
|
27
|
+
q.parent_rmq = working_parent_rmq
|
28
|
+
q.selectors = working_selectors
|
29
|
+
q
|
30
|
+
end
|
31
|
+
|
32
|
+
# This is used internally, to get a new rmq instance, just call "rmq" in your view or controller or
|
33
|
+
# just create a new one like so: RubyMotionQuery::RMQ.new
|
34
|
+
#
|
35
|
+
# @return [RMQ]
|
36
|
+
def create_with_array_and_selectors(array, working_selectors, local_originated_from, working_parent_rmq = nil) # TODO, convert to opts
|
37
|
+
q = RMQ.new
|
38
|
+
q.originated_from = local_originated_from
|
39
|
+
q.selectors = working_selectors
|
40
|
+
q.parent_rmq = working_parent_rmq
|
41
|
+
q.selected = array # Must be last
|
42
|
+
q
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class RMQ
|
2
|
+
# Do not use
|
3
|
+
def selectors=(value)
|
4
|
+
@selected_dirty = true
|
5
|
+
normalize_selectors(value)
|
6
|
+
@_selectors = value
|
7
|
+
end
|
8
|
+
|
9
|
+
def selectors
|
10
|
+
@_selectors
|
11
|
+
end
|
12
|
+
|
13
|
+
def match(view, new_selectors)
|
14
|
+
out = false
|
15
|
+
|
16
|
+
# This method is written strange because the return in this example doesn't actually return (RM bug)
|
17
|
+
# elsif selector == :tagged
|
18
|
+
# return true unless view.rmq_data.has_tag?
|
19
|
+
|
20
|
+
new_selectors.each do |selector|
|
21
|
+
if selector.is_a?(Java::Lang::Integer)
|
22
|
+
if view.id == selector
|
23
|
+
out = true
|
24
|
+
break
|
25
|
+
end
|
26
|
+
elsif selector == :tagged
|
27
|
+
if view.rmq_data.has_tag?
|
28
|
+
out = true
|
29
|
+
break
|
30
|
+
end
|
31
|
+
elsif selector.is_a?(Symbol)
|
32
|
+
if (view.rmq_data.has_style?(selector)) || view.rmq_data.has_tag?(selector)
|
33
|
+
out = true
|
34
|
+
break
|
35
|
+
end
|
36
|
+
elsif selector.is_a?(Hash)
|
37
|
+
if match_hash(view, selector)
|
38
|
+
out = true
|
39
|
+
break
|
40
|
+
end
|
41
|
+
elsif RMQ.is_class?(selector)
|
42
|
+
if view.is_a?(selector)
|
43
|
+
out = true
|
44
|
+
break
|
45
|
+
end
|
46
|
+
else
|
47
|
+
if view == selector
|
48
|
+
out = true
|
49
|
+
break
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
out
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def match_hash(view, hash)
|
60
|
+
# TODO, check speed, and do sub hashes for stuff like origin
|
61
|
+
# it's probably pretty slow
|
62
|
+
hash.each do |k,v|
|
63
|
+
return true if view.respond_to?(k) && (view.send(k) == v)
|
64
|
+
end
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
def normalize_selectors(a = self.selectors)
|
69
|
+
a.flatten! if a
|
70
|
+
a
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
class RMQ
|
2
|
+
|
3
|
+
def stylesheet=(value)
|
4
|
+
controller = self.screen || self.activity
|
5
|
+
unless value.is_a?(RMQStylesheet)
|
6
|
+
value = value.new(controller)
|
7
|
+
end
|
8
|
+
@_stylesheet = value
|
9
|
+
controller.rmq_data.stylesheet = value
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def stylesheet
|
14
|
+
@_stylesheet ||= begin
|
15
|
+
if self.controller && (ss = self.controller.rmq_data.stylesheet)
|
16
|
+
ss
|
17
|
+
elsif (prmq = self.parent_rmq) && prmq.stylesheet
|
18
|
+
prmq.stylesheet
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def styler_for(view)
|
24
|
+
context = RMQ.app.context
|
25
|
+
styler = case view
|
26
|
+
when Android::Widget::RelativeLayout then RMQRelativeLayoutStyler.new(view, context)
|
27
|
+
when Android::Widget::LinearLayout then RMQLinearLayoutStyler.new(view, context)
|
28
|
+
when Android::Widget::TextView then RMQTextViewStyler.new(view, context)
|
29
|
+
when Android::Widget::ImageView then RMQImageViewStyler.new(view, context)
|
30
|
+
when Android::Widget::ImageButton then RMQImageButtonStyler.new(view, context)
|
31
|
+
when Android::Widget::Button then RMQButtonStyler.new(view, context)
|
32
|
+
else
|
33
|
+
RMQViewStyler.new(view, context)
|
34
|
+
end
|
35
|
+
styler
|
36
|
+
end
|
37
|
+
|
38
|
+
def apply_style(*style_names)
|
39
|
+
if style_names
|
40
|
+
selected.each do |selected_view|
|
41
|
+
style_names.each do |style_name|
|
42
|
+
apply_style_to_view selected_view, style_name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
self
|
47
|
+
end
|
48
|
+
alias :apply_styles :apply_style
|
49
|
+
|
50
|
+
def apply_style_to_view(view, style_name)
|
51
|
+
#begin
|
52
|
+
styler = self.styler_for(view)
|
53
|
+
self.stylesheet.send(style_name, styler)
|
54
|
+
styler.finalize
|
55
|
+
|
56
|
+
view.rmq_data.styles << style_name unless view.rmq_data.has_style?(style_name)
|
57
|
+
view.rmq_style_applied
|
58
|
+
#rescue NoMethodError => e
|
59
|
+
#if e.message =~ /.*#{style_name.to_s}.*/
|
60
|
+
#$stderr.puts "\n[RMQ ERROR] style_name :#{style_name} doesn't exist for a #{view.class.name}. Add 'def #{style_name}(st)' to #{stylesheet.class.name} class\n\n"
|
61
|
+
#else
|
62
|
+
#raise e
|
63
|
+
#end
|
64
|
+
#end
|
65
|
+
end
|
66
|
+
|
67
|
+
def style
|
68
|
+
selected.each do |view|
|
69
|
+
yield(styler_for(view))
|
70
|
+
end
|
71
|
+
self
|
72
|
+
end
|
73
|
+
|
74
|
+
def styles
|
75
|
+
out = selected.map do |view|
|
76
|
+
view.rmq_data.styles
|
77
|
+
end
|
78
|
+
out.flatten!.uniq
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
__END__
|
87
|
+
|
88
|
+
# # these only work if widget is in a RelativeLayout
|
89
|
+
#
|
90
|
+
#def align_to_left_of(other)
|
91
|
+
#set_alignment_to(other, Android::Widget::RelativeLayout::LEFT_OF)
|
92
|
+
#end
|
93
|
+
|
94
|
+
#def align_to_right_of(other)
|
95
|
+
#set_alignment_to(other, Android::Widget::RelativeLayout::RIGHT_OF)
|
96
|
+
#end
|
97
|
+
|
98
|
+
#def align_below(other)
|
99
|
+
#set_alignment_to(other, Android::Widget::RelativeLayout::BELOW)
|
100
|
+
#end
|
101
|
+
|
102
|
+
#private
|
103
|
+
|
104
|
+
#def set_alignment_to(other, rule)
|
105
|
+
#params = @view.layoutParams
|
106
|
+
#params.addRule(rule, other.get.id)
|
107
|
+
#@view.setLayoutParams(params)
|
108
|
+
#end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
class RMQ
|
2
|
+
def add_subview(view_or_class, opts={})
|
3
|
+
subviews_added = []
|
4
|
+
|
5
|
+
selected.each do |selected_view|
|
6
|
+
created = false
|
7
|
+
appended = false
|
8
|
+
built = false
|
9
|
+
|
10
|
+
if view_or_class.is_a?(Potion::View)
|
11
|
+
new_view = view_or_class
|
12
|
+
else
|
13
|
+
created = true
|
14
|
+
new_view = view_or_class.new(RMQ.app.context)
|
15
|
+
new_view.setId(Potion::ViewIdGenerator.generate)
|
16
|
+
end
|
17
|
+
|
18
|
+
rmq_data = new_view.rmq_data
|
19
|
+
|
20
|
+
unless rmq_data.built
|
21
|
+
rmq_data.built = true # build only once
|
22
|
+
built = true
|
23
|
+
end
|
24
|
+
|
25
|
+
rmq_data.activity = self.activity
|
26
|
+
rmq_data.screen = self.screen
|
27
|
+
|
28
|
+
subviews_added << new_view
|
29
|
+
|
30
|
+
unless opts[:do_not_add]
|
31
|
+
#if at_index = opts[:at_index]
|
32
|
+
#selected_view.insertSubview(new_view, atIndex: at_index)
|
33
|
+
#elsif below_view = opts[:below_view]
|
34
|
+
#selected_view.insertSubview(new_view, belowSubview: below_view)
|
35
|
+
#else
|
36
|
+
selected_view.addView(new_view)
|
37
|
+
#end
|
38
|
+
|
39
|
+
appended = true
|
40
|
+
end
|
41
|
+
|
42
|
+
if created
|
43
|
+
new_view.rmq_created
|
44
|
+
end
|
45
|
+
new_view.rmq_build if built
|
46
|
+
new_view.rmq_appended if appended
|
47
|
+
|
48
|
+
if self.stylesheet
|
49
|
+
apply_style_to_view(new_view, opts[:style]) if opts[:style]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
viewq = RMQ.create_with_array_and_selectors(subviews_added, selectors, @originated_from, self)
|
54
|
+
opts[:block].call viewq if opts[:block]
|
55
|
+
opts[:raw_block].call viewq.get if opts[:raw_block]
|
56
|
+
viewq
|
57
|
+
end
|
58
|
+
alias :insert :add_subview
|
59
|
+
|
60
|
+
def append_view(view_or_class, style=nil, opts={})
|
61
|
+
opts[:style] = style
|
62
|
+
#opts[:block] = block if block
|
63
|
+
out = self.add_subview(view_or_class, opts)
|
64
|
+
out
|
65
|
+
end
|
66
|
+
|
67
|
+
def append_view!(view_or_class, style=nil, opts={})
|
68
|
+
self.append_view(view_or_class, style, opts).get
|
69
|
+
end
|
70
|
+
|
71
|
+
def create(view_or_constant, style = nil, opts = {}, &block)
|
72
|
+
# TODO, refactor so that add_subview uses create, not backwards like it is now
|
73
|
+
opts[:do_not_add] = true
|
74
|
+
opts[:style] = style
|
75
|
+
opts[:block] = block if block
|
76
|
+
add_subview view_or_constant, opts
|
77
|
+
end
|
78
|
+
|
79
|
+
def create!(view_or_constant, style=nil, opts = {}, &block)
|
80
|
+
opts[:raw_block] = block if block
|
81
|
+
create(view_or_constant, style, opts).get
|
82
|
+
end
|
83
|
+
|
84
|
+
def build(view_or_constant, style = nil, opts = {}, &block)
|
85
|
+
opts[:do_not_add] = true
|
86
|
+
opts[:style] = style
|
87
|
+
opts[:block] = block if block
|
88
|
+
add_subview view_or_constant, opts
|
89
|
+
end
|
90
|
+
|
91
|
+
def build!(view_or_constant, style = nil, opts = {}, &block)
|
92
|
+
opts[:raw_block] = block if block
|
93
|
+
build(view_or_constant, style, opts).get
|
94
|
+
end
|
95
|
+
end
|