ProMotion 1.2.1 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -10
- data/lib/ProMotion.rb +11 -2
- data/lib/ProMotion/cocoatouch/ns_string.rb +5 -0
- data/lib/ProMotion/cocoatouch/ns_url.rb +5 -0
- data/lib/ProMotion/cocoatouch/tab_bar_controller.rb +5 -7
- data/lib/ProMotion/cocoatouch/table_view_cell.rb +0 -16
- data/lib/ProMotion/cocoatouch/table_view_controller.rb +2 -3
- data/lib/ProMotion/cocoatouch/view_controller.rb +3 -6
- data/lib/ProMotion/delegate/delegate.rb +0 -3
- data/lib/ProMotion/delegate/delegate_module.rb +24 -20
- data/lib/ProMotion/{containers → ipad}/split_screen.rb +30 -32
- data/lib/ProMotion/{logger.rb → logger/logger.rb} +6 -5
- data/lib/ProMotion/screen/nav_bar_module.rb +126 -0
- data/lib/ProMotion/screen/screen.rb +0 -3
- data/lib/ProMotion/screen/screen_module.rb +54 -177
- data/lib/ProMotion/screen/screen_navigation.rb +29 -40
- data/lib/ProMotion/{view → styling}/styling.rb +17 -47
- data/lib/ProMotion/table/cell/table_view_cell_module.rb +76 -123
- data/lib/ProMotion/table/data/table_data.rb +1 -1
- data/lib/ProMotion/table/extensions/longpressable.rb +24 -0
- data/lib/ProMotion/table/extensions/refreshable.rb +1 -0
- data/lib/ProMotion/table/grouped_table_screen.rb +0 -5
- data/lib/ProMotion/table/table.rb +63 -83
- data/lib/ProMotion/table/table_screen.rb +0 -4
- data/lib/ProMotion/{containers → tabs}/tabs.rb +20 -21
- data/lib/ProMotion/version.rb +1 -1
- data/lib/ProMotion/web/web_screen.rb +0 -4
- data/lib/ProMotion/web/web_screen_module.rb +8 -5
- data/spec/functional/func_screen_spec.rb +14 -18
- data/spec/functional/func_split_screen_spec.rb +2 -2
- data/spec/functional/func_table_screen_spec.rb +54 -40
- data/spec/functional/func_web_screen_spec.rb +12 -17
- data/spec/helpers/test_helper.rb +27 -0
- data/spec/unit/delegate_spec.rb +4 -67
- data/spec/unit/image_title_screen.rb +9 -0
- data/spec/unit/image_view_title_screen.rb +9 -0
- data/spec/unit/load_view_spec.rb +27 -0
- data/spec/unit/main_spec.rb +0 -6
- data/spec/unit/screen_helpers_spec.rb +23 -17
- data/spec/unit/screen_spec.rb +21 -17
- data/spec/unit/searchable_table_spec.rb +55 -0
- data/spec/unit/split_screen_in_tab_bar_spec.rb +5 -5
- data/spec/unit/split_screen_spec.rb +4 -4
- data/spec/unit/tab_bar_spec.rb +79 -0
- data/spec/unit/tab_spec.rb +11 -5
- data/spec/unit/tables/table_module_spec.rb +22 -8
- data/spec/unit/tables/table_screen_spec.rb +1 -1
- data/spec/unit/tables/table_view_cell_spec.rb +16 -16
- data/spec/unit/view_helper_spec.rb +6 -81
- data/spec/unit/view_title_screen.rb +10 -0
- data/spec/unit/web_spec.rb +31 -37
- metadata +37 -111
- data/.gitignore +0 -33
- data/.travis.yml +0 -4
- data/CONTRIBUTING.md +0 -20
- data/Gemfile +0 -5
- data/LICENSE +0 -22
- data/ProMotion.gemspec +0 -30
- data/Rakefile +0 -66
- data/app/app_delegate.rb +0 -7
- data/app/screens/basic_screen.rb +0 -15
- data/lib/ProMotion/delegate/delegate_notifications.rb +0 -70
- data/lib/ProMotion/extensions/conversions.rb +0 -20
- data/lib/ProMotion/map/map_screen.rb +0 -10
- data/lib/ProMotion/map/map_screen_annotation.rb +0 -65
- data/lib/ProMotion/map/map_screen_module.rb +0 -212
- data/lib/ProMotion/push_notification/push_notification.rb +0 -58
- data/resources/WebScreen.html +0 -6
- data/resources/list.png +0 -0
- data/resources/test.png +0 -0
- data/spec/functional/func_image_title_screen.rb +0 -20
- data/spec/functional/func_image_view_title_screen.rb +0 -20
- data/spec/functional/func_map_screen_spec.rb +0 -162
- data/spec/functional/func_searchable_table_spec.rb +0 -56
- data/spec/functional/func_tab_bar_spec.rb +0 -78
- data/spec/functional/func_view_title_screen.rb +0 -21
- data/spec/helpers/basic_screen.rb +0 -3
- data/spec/helpers/custom_title_view.rb +0 -4
- data/spec/helpers/detail_screen.rb +0 -3
- data/spec/helpers/dummy_class.rb +0 -3
- data/spec/helpers/functional_screen.rb +0 -15
- data/spec/helpers/home_screen.rb +0 -19
- data/spec/helpers/image_title_screen.rb +0 -15
- data/spec/helpers/image_view_title_screen.rb +0 -15
- data/spec/helpers/map_screen.rb +0 -53
- data/spec/helpers/master_screen.rb +0 -3
- data/spec/helpers/present_screen.rb +0 -26
- data/spec/helpers/screen_module_view_controller.rb +0 -55
- data/spec/helpers/tab_screen.rb +0 -4
- data/spec/helpers/table_screen.rb +0 -117
- data/spec/helpers/table_screen_indexable.rb +0 -18
- data/spec/helpers/table_screen_refreshable.rb +0 -11
- data/spec/helpers/table_screen_searchable.rb +0 -72
- data/spec/helpers/test_delegate.rb +0 -34
- data/spec/helpers/test_delegate_colors.rb +0 -17
- data/spec/helpers/view_title_screen.rb +0 -15
- data/spec/helpers/web_screen.rb +0 -23
- data/spec/unit/map_spec.rb +0 -71
@@ -0,0 +1,126 @@
|
|
1
|
+
module ProMotion
|
2
|
+
module NavBarModule
|
3
|
+
|
4
|
+
def nav_bar?
|
5
|
+
!!self.navigationController
|
6
|
+
end
|
7
|
+
|
8
|
+
def navigation_controller
|
9
|
+
self.navigationController
|
10
|
+
end
|
11
|
+
|
12
|
+
def navigation_controller=(nav)
|
13
|
+
self.navigationController = nav
|
14
|
+
end
|
15
|
+
|
16
|
+
def navigationController=(nav)
|
17
|
+
@navigationController = nav
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_nav_bar_button(side, args={})
|
21
|
+
button = create_toolbar_button(args)
|
22
|
+
button.setTintColor args[:tint_color] if args[:tint_color]
|
23
|
+
|
24
|
+
self.navigationItem.leftBarButtonItem = button if side == :left
|
25
|
+
self.navigationItem.rightBarButtonItem = button if side == :right
|
26
|
+
self.navigationItem.backBarButtonItem = button if side == :back
|
27
|
+
|
28
|
+
button
|
29
|
+
end
|
30
|
+
|
31
|
+
# TODO: In PM 2.1+, entirely remove this deprecated method.
|
32
|
+
def set_nav_bar_left_button(title, args={})
|
33
|
+
PM.logger.deprecated "set_nav_bar_right_button and set_nav_bar_left_button have been removed. Use set_nav_bar_button :right/:left instead."
|
34
|
+
end
|
35
|
+
alias_method :set_nav_bar_right_button, :set_nav_bar_left_button
|
36
|
+
|
37
|
+
def set_toolbar_items(buttons = [], animated = true)
|
38
|
+
self.toolbarItems = Array(buttons).map{|b| b.is_a?(UIBarButtonItem) ? b : create_toolbar_button(b) }
|
39
|
+
navigationController.setToolbarHidden(false, animated:animated)
|
40
|
+
end
|
41
|
+
alias_method :set_toolbar_buttons, :set_toolbar_items
|
42
|
+
alias_method :set_toolbar_button, :set_toolbar_items
|
43
|
+
|
44
|
+
def add_nav_bar(args = {})
|
45
|
+
self.navigationController ||= begin
|
46
|
+
self.first_screen = true if self.respond_to?(:first_screen=)
|
47
|
+
nav = NavigationController.alloc.initWithRootViewController(self)
|
48
|
+
nav.setModalTransitionStyle(args[:transition_style]) if args[:transition_style]
|
49
|
+
nav.setModalPresentationStyle(args[:presentation_style]) if args[:presentation_style]
|
50
|
+
nav
|
51
|
+
end
|
52
|
+
self.navigationController.toolbarHidden = !args[:toolbar] unless args[:toolbar].nil?
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def create_toolbar_button(args = {})
|
58
|
+
button_type = args[:image] || args[:button] || args[:custom_view] || args[:title] || "Button"
|
59
|
+
bar_button_item button_type, args
|
60
|
+
end
|
61
|
+
|
62
|
+
def bar_button_item(button_type, args)
|
63
|
+
return PM.logger.deprecated("`system_icon:` no longer supported. Use `system_item:` instead.") if args[:system_icon]
|
64
|
+
return button_type if button_type.is_a?(UIBarButtonItem)
|
65
|
+
return bar_button_item_system_item(args) if args[:system_item]
|
66
|
+
return bar_button_item_image(button_type, args) if button_type.is_a?(UIImage)
|
67
|
+
return bar_button_item_string(button_type, args) if button_type.is_a?(String)
|
68
|
+
return bar_button_item_custom(button_type) if button_type.is_a?(UIView)
|
69
|
+
PM.logger.error("Please supply a title string, a UIImage or :system.") && nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def bar_button_item_image(img, args)
|
73
|
+
UIBarButtonItem.alloc.initWithImage(img, style: map_bar_button_item_style(args[:style]), target: args[:target] || self, action: args[:action])
|
74
|
+
end
|
75
|
+
|
76
|
+
def bar_button_item_string(str, args)
|
77
|
+
UIBarButtonItem.alloc.initWithTitle(str, style: map_bar_button_item_style(args[:style]), target: args[:target] || self, action: args[:action])
|
78
|
+
end
|
79
|
+
|
80
|
+
def bar_button_item_system_item(args)
|
81
|
+
UIBarButtonItem.alloc.initWithBarButtonSystemItem(map_bar_button_system_item(args[:system_item]), target: args[:target] || self, action: args[:action])
|
82
|
+
end
|
83
|
+
|
84
|
+
def bar_button_item_custom(custom_view)
|
85
|
+
UIBarButtonItem.alloc.initWithCustomView(custom_view)
|
86
|
+
end
|
87
|
+
|
88
|
+
def map_bar_button_system_item(symbol)
|
89
|
+
{
|
90
|
+
done: UIBarButtonSystemItemDone,
|
91
|
+
cancel: UIBarButtonSystemItemCancel,
|
92
|
+
edit: UIBarButtonSystemItemEdit,
|
93
|
+
save: UIBarButtonSystemItemSave,
|
94
|
+
add: UIBarButtonSystemItemAdd,
|
95
|
+
flexible_space: UIBarButtonSystemItemFlexibleSpace,
|
96
|
+
fixed_space: UIBarButtonSystemItemFixedSpace,
|
97
|
+
compose: UIBarButtonSystemItemCompose,
|
98
|
+
reply: UIBarButtonSystemItemReply,
|
99
|
+
action: UIBarButtonSystemItemAction,
|
100
|
+
organize: UIBarButtonSystemItemOrganize,
|
101
|
+
bookmarks: UIBarButtonSystemItemBookmarks,
|
102
|
+
search: UIBarButtonSystemItemSearch,
|
103
|
+
refresh: UIBarButtonSystemItemRefresh,
|
104
|
+
stop: UIBarButtonSystemItemStop,
|
105
|
+
camera: UIBarButtonSystemItemCamera,
|
106
|
+
trash: UIBarButtonSystemItemTrash,
|
107
|
+
play: UIBarButtonSystemItemPlay,
|
108
|
+
pause: UIBarButtonSystemItemPause,
|
109
|
+
rewind: UIBarButtonSystemItemRewind,
|
110
|
+
fast_forward: UIBarButtonSystemItemFastForward,
|
111
|
+
undo: UIBarButtonSystemItemUndo,
|
112
|
+
redo: UIBarButtonSystemItemRedo,
|
113
|
+
page_curl: UIBarButtonSystemItemPageCurl
|
114
|
+
}[symbol] || UIBarButtonSystemItemDone
|
115
|
+
end
|
116
|
+
|
117
|
+
def map_bar_button_item_style(symbol)
|
118
|
+
{
|
119
|
+
plain: UIBarButtonItemStylePlain,
|
120
|
+
bordered: UIBarButtonItemStyleBordered,
|
121
|
+
done: UIBarButtonItemStyleDone
|
122
|
+
}[symbol] || UIBarButtonItemStyleDone
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
@@ -1,141 +1,35 @@
|
|
1
|
-
motion_require 'screen_navigation'
|
2
|
-
motion_require '../view/styling'
|
3
|
-
motion_require '../containers/tabs'
|
4
|
-
motion_require '../containers/split_screen'
|
5
|
-
|
6
1
|
module ProMotion
|
7
2
|
module ScreenModule
|
8
3
|
include ProMotion::ScreenNavigation
|
9
4
|
include ProMotion::Styling
|
5
|
+
include ProMotion::NavBarModule
|
10
6
|
include ProMotion::Tabs
|
11
|
-
include ProMotion::SplitScreen if
|
7
|
+
include ProMotion::SplitScreen if UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad
|
12
8
|
|
13
9
|
attr_accessor :parent_screen, :first_screen, :modal, :split_screen
|
14
10
|
|
15
|
-
def
|
16
|
-
|
17
|
-
raise StandardError.new("ERROR: Screens must extend UIViewController or a subclass of UIViewController.")
|
18
|
-
end
|
19
|
-
|
11
|
+
def screen_init(args = {})
|
12
|
+
check_ancestry
|
20
13
|
resolve_title
|
21
|
-
|
22
|
-
self
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
self.add_nav_bar(args) if args[:nav_bar]
|
29
|
-
self.navigationController.toolbarHidden = !args[:toolbar] unless args[:toolbar].nil?
|
30
|
-
self.screen_setup
|
31
|
-
self.on_init if self.respond_to?(:on_init)
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
def screen_setup
|
14
|
+
tab_bar_setup
|
15
|
+
set_attributes self, args
|
16
|
+
add_nav_bar(args) if args[:nav_bar]
|
17
|
+
try :screen_setup
|
18
|
+
try :on_init
|
19
|
+
PM.logger.deprecated "In #{self.class.to_s}, #on_create has been deprecated and removed. Use #screen_init instead." if respond_to?(:on_create)
|
36
20
|
end
|
37
21
|
|
38
22
|
def modal?
|
39
23
|
self.modal == true
|
40
24
|
end
|
41
25
|
|
42
|
-
def nav_bar?
|
43
|
-
!!self.navigationController
|
44
|
-
end
|
45
|
-
|
46
|
-
def navigation_controller
|
47
|
-
self.navigationController
|
48
|
-
end
|
49
|
-
|
50
|
-
def navigation_controller=(nav)
|
51
|
-
@navigationController = nav
|
52
|
-
end
|
53
|
-
|
54
|
-
def navigationController=(nav)
|
55
|
-
@navigationController = nav
|
56
|
-
end
|
57
|
-
|
58
26
|
def resolve_title
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
elsif self.class.send(:get_title).kind_of? UIImage
|
64
|
-
self.navigationItem.titleView = UIImageView.alloc.initWithImage(self.class.send(:get_title))
|
65
|
-
else
|
66
|
-
PM.logger.warn("title expects string, UIView, or UIImage, but #{self.class.send(:get_title).class.to_s} given.")
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def add_nav_bar(args = {})
|
71
|
-
self.navigationController ||= begin
|
72
|
-
self.first_screen = true if self.respond_to?(:first_screen=)
|
73
|
-
nav = NavigationController.alloc.initWithRootViewController(self)
|
74
|
-
nav.setModalTransitionStyle(args[:transition_style]) if args[:transition_style]
|
75
|
-
nav.setModalPresentationStyle(args[:presentation_style]) if args[:presentation_style]
|
76
|
-
nav
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def set_nav_bar_right_button(title, args={})
|
81
|
-
args[:title] = title
|
82
|
-
set_nav_bar_button :right, args
|
83
|
-
end
|
84
|
-
|
85
|
-
def set_nav_bar_left_button(title, args={})
|
86
|
-
args[:title] = title
|
87
|
-
set_nav_bar_button :left, args
|
88
|
-
end
|
89
|
-
|
90
|
-
def set_nav_bar_button(side, args={})
|
91
|
-
button = create_toolbar_button(args)
|
92
|
-
|
93
|
-
self.navigationItem.leftBarButtonItem = button if side == :left
|
94
|
-
self.navigationItem.rightBarButtonItem = button if side == :right
|
95
|
-
self.navigationItem.backBarButtonItem = button if side == :back
|
96
|
-
|
97
|
-
button
|
98
|
-
end
|
99
|
-
|
100
|
-
def create_toolbar_button(args = {})
|
101
|
-
args[:style] = map_bar_button_item_style(args[:style])
|
102
|
-
args[:target] ||= self
|
103
|
-
args[:action] ||= nil
|
104
|
-
args[:custom_view] = args[:custom_view] if args[:custom_view]
|
105
|
-
args[:system_item] ||= args[:system_icon] # backwards compatibility
|
106
|
-
args[:system_item] = map_bar_button_system_item(args[:system_item]) if args[:system_item] && args[:system_item].is_a?(Symbol)
|
107
|
-
|
108
|
-
button_type = args[:image] || args[:button] || args[:system_item] || args[:custom_view] || args[:title] || "Button"
|
109
|
-
|
110
|
-
bar_button_item button_type, args
|
111
|
-
end
|
112
|
-
|
113
|
-
def set_toolbar_items(buttons = [], animated = true)
|
114
|
-
buttons = Array(buttons)
|
115
|
-
self.toolbarItems = buttons.map{|b| b.is_a?(UIBarButtonItem) ? b : create_toolbar_button(b) }
|
116
|
-
navigation_controller.setToolbarHidden(false, animated:animated)
|
117
|
-
end
|
118
|
-
alias_method :set_toolbar_buttons, :set_toolbar_items
|
119
|
-
alias_method :set_toolbar_button, :set_toolbar_items
|
120
|
-
|
121
|
-
# TODO: Make this better. Not able to do image: "logo", for example.
|
122
|
-
def bar_button_item(button_type, args)
|
123
|
-
case button_type
|
124
|
-
when UIBarButtonItem
|
125
|
-
button_type
|
126
|
-
when UIImage
|
127
|
-
UIBarButtonItem.alloc.initWithImage(button_type, style: args[:style], target: args[:target], action: args[:action])
|
128
|
-
when String
|
129
|
-
UIBarButtonItem.alloc.initWithTitle(button_type, style: args[:style], target: args[:target], action: args[:action])
|
27
|
+
case self.class.title_type
|
28
|
+
when :text then self.title = self.class.title
|
29
|
+
when :view then self.navigationItem.titleView = self.class.title
|
30
|
+
when :image then self.navigationItem.titleView = UIImageView.alloc.initWithImage(UIImage.imageNamed(self.class.title))
|
130
31
|
else
|
131
|
-
|
132
|
-
UIBarButtonItem.alloc.initWithCustomView(args[:custom_view])
|
133
|
-
elsif args[:system_item]
|
134
|
-
UIBarButtonItem.alloc.initWithBarButtonSystemItem(args[:system_item], target: args[:target], action: args[:action])
|
135
|
-
else
|
136
|
-
PM.logger.error("Please supply a title string, a UIImage or :system.")
|
137
|
-
nil
|
138
|
-
end
|
32
|
+
PM.logger.warn("title expects string, UIView, or UIImage, but #{self.class.title.class.to_s} given.")
|
139
33
|
end
|
140
34
|
end
|
141
35
|
|
@@ -147,7 +41,9 @@ module ProMotion
|
|
147
41
|
self.first_screen == true
|
148
42
|
end
|
149
43
|
|
150
|
-
def view_did_load
|
44
|
+
def view_did_load
|
45
|
+
self.send(:on_load) if self.respond_to?(:on_load)
|
46
|
+
end
|
151
47
|
|
152
48
|
def view_will_appear(animated)
|
153
49
|
self.will_appear
|
@@ -206,10 +102,6 @@ module ProMotion
|
|
206
102
|
def on_rotate
|
207
103
|
end
|
208
104
|
|
209
|
-
def supported_orientation?(orientation)
|
210
|
-
NSBundle.mainBundle.infoDictionary["UISupportedInterfaceOrientations"].include?(orientation)
|
211
|
-
end
|
212
|
-
|
213
105
|
def supported_orientations
|
214
106
|
orientations = 0
|
215
107
|
NSBundle.mainBundle.infoDictionary["UISupportedInterfaceOrientations"].each do |ori|
|
@@ -227,15 +119,16 @@ module ProMotion
|
|
227
119
|
orientations
|
228
120
|
end
|
229
121
|
|
122
|
+
def supported_orientation?(orientation)
|
123
|
+
NSBundle.mainBundle.infoDictionary["UISupportedInterfaceOrientations"].include?(orientation)
|
124
|
+
end
|
125
|
+
|
230
126
|
def supported_device_families
|
231
127
|
NSBundle.mainBundle.infoDictionary["UIDeviceFamily"].map do |m|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
when "2"
|
237
|
-
:ipad
|
238
|
-
end
|
128
|
+
{
|
129
|
+
"1" => :iphone,
|
130
|
+
"2" => :ipad
|
131
|
+
}[m] || :unknown_device
|
239
132
|
end
|
240
133
|
end
|
241
134
|
|
@@ -251,63 +144,47 @@ module ProMotion
|
|
251
144
|
return self.view_or_self.frame
|
252
145
|
end
|
253
146
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
147
|
+
private
|
148
|
+
|
149
|
+
def tab_bar_setup
|
150
|
+
self.tab_bar_item = self.class.send(:get_tab_bar_item)
|
151
|
+
self.refresh_tab_bar_item if self.tab_bar_item
|
152
|
+
end
|
153
|
+
|
154
|
+
def check_ancestry
|
155
|
+
unless self.is_a?(UIViewController)
|
156
|
+
raise StandardError.new("ERROR: Screens must extend UIViewController or a subclass of UIViewController.")
|
157
|
+
end
|
261
158
|
end
|
262
159
|
|
263
|
-
def
|
264
|
-
|
265
|
-
done: UIBarButtonSystemItemDone,
|
266
|
-
cancel: UIBarButtonSystemItemCancel,
|
267
|
-
edit: UIBarButtonSystemItemEdit,
|
268
|
-
save: UIBarButtonSystemItemSave,
|
269
|
-
add: UIBarButtonSystemItemAdd,
|
270
|
-
flexible_space: UIBarButtonSystemItemFlexibleSpace,
|
271
|
-
fixed_space: UIBarButtonSystemItemFixedSpace,
|
272
|
-
compose: UIBarButtonSystemItemCompose,
|
273
|
-
reply: UIBarButtonSystemItemReply,
|
274
|
-
action: UIBarButtonSystemItemAction,
|
275
|
-
organize: UIBarButtonSystemItemOrganize,
|
276
|
-
bookmarks: UIBarButtonSystemItemBookmarks,
|
277
|
-
search: UIBarButtonSystemItemSearch,
|
278
|
-
refresh: UIBarButtonSystemItemRefresh,
|
279
|
-
stop: UIBarButtonSystemItemStop,
|
280
|
-
camera: UIBarButtonSystemItemCamera,
|
281
|
-
trash: UIBarButtonSystemItemTrash,
|
282
|
-
play: UIBarButtonSystemItemPlay,
|
283
|
-
pause: UIBarButtonSystemItemPause,
|
284
|
-
rewind: UIBarButtonSystemItemRewind,
|
285
|
-
fast_forward: UIBarButtonSystemItemFastForward,
|
286
|
-
undo: UIBarButtonSystemItemUndo,
|
287
|
-
redo: UIBarButtonSystemItemRedo,
|
288
|
-
page_curl: UIBarButtonSystemItemPageCurl
|
289
|
-
}[symbol] || UIBarButtonSystemItemDone
|
160
|
+
def try(method, *args)
|
161
|
+
send(method, *args) if respond_to?(method)
|
290
162
|
end
|
291
163
|
|
292
164
|
# Class methods
|
293
165
|
module ClassMethods
|
294
|
-
def
|
295
|
-
|
166
|
+
def title(t=nil)
|
167
|
+
if t && t.is_a?(String) == false
|
168
|
+
PM.logger.deprecated "You're trying to set the title of #{self.to_s} to an instance of #{t.class.to_s}. In ProMotion 2+, you must use `title_image` or `title_view` instead."
|
169
|
+
return raise StandardError
|
170
|
+
end
|
171
|
+
@title = t if t
|
172
|
+
@title_type = :text if t
|
173
|
+
@title ||= self.to_s
|
296
174
|
end
|
297
175
|
|
298
|
-
def
|
299
|
-
@
|
176
|
+
def title_type
|
177
|
+
@title_type || :text
|
300
178
|
end
|
301
179
|
|
302
|
-
def
|
180
|
+
def title_image(t)
|
303
181
|
@title = t
|
182
|
+
@title_type = :image
|
304
183
|
end
|
305
|
-
|
184
|
+
|
185
|
+
def title_view(t)
|
306
186
|
@title = t
|
307
|
-
|
308
|
-
|
309
|
-
def get_title
|
310
|
-
@title ||= self.to_s
|
187
|
+
@title_type = :view
|
311
188
|
end
|
312
189
|
end
|
313
190
|
|
@@ -2,39 +2,28 @@ module ProMotion
|
|
2
2
|
module ScreenNavigation
|
3
3
|
|
4
4
|
def open_screen(screen, args = {})
|
5
|
-
args = {
|
5
|
+
args = { animated: true }.merge(args)
|
6
6
|
|
7
7
|
# Apply properties to instance
|
8
8
|
screen = set_up_screen_for_open(screen, args)
|
9
9
|
ensure_wrapper_controller_in_place(screen, args)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
elsif args[:close_all]
|
18
|
-
open_root_screen screen
|
19
|
-
|
20
|
-
elsif args[:modal]
|
21
|
-
present_modal_view_controller screen, args[:animated], args[:completion]
|
22
|
-
|
23
|
-
elsif args[:in_tab] && self.tab_bar
|
24
|
-
present_view_controller_in_tab_bar_controller screen, args[:in_tab]
|
25
|
-
|
26
|
-
elsif self.navigationController
|
27
|
-
push_view_controller screen, self.navigationController, args[:animated].nil? ? true : args[:animated]
|
28
|
-
|
29
|
-
else
|
30
|
-
open_root_screen (screen.navigationController || screen)
|
31
|
-
|
32
|
-
end
|
33
|
-
|
11
|
+
opened ||= open_in_split_screen(screen, args) if self.split_screen
|
12
|
+
opened ||= open_root_screen(screen) if args[:close_all]
|
13
|
+
opened ||= present_modal_view_controller(screen, args) if args[:modal]
|
14
|
+
opened ||= open_in_tab(screen, args[:in_tab]) if args[:in_tab]
|
15
|
+
opened ||= push_view_controller(screen, self.navigationController, !!args[:animated]) if self.navigationController
|
16
|
+
opened ||= open_root_screen(screen.navigationController || screen)
|
34
17
|
screen
|
35
18
|
end
|
36
19
|
alias :open :open_screen
|
37
20
|
|
21
|
+
def open_in_split_screen(screen, args)
|
22
|
+
self.split_screen.detail_screen = screen if args[:in_detail]
|
23
|
+
self.split_screen.master_screen = screen if args[:in_master]
|
24
|
+
args[:in_detail] || args[:in_master]
|
25
|
+
end
|
26
|
+
|
38
27
|
def open_root_screen(screen)
|
39
28
|
app_delegate.open_root_screen(screen)
|
40
29
|
end
|
@@ -81,11 +70,12 @@ module ProMotion
|
|
81
70
|
PM.logger.error "You need a nav_bar if you are going to push #{vc.to_s} onto it."
|
82
71
|
end
|
83
72
|
nav_controller ||= self.navigationController
|
73
|
+
return if nav_controller.topViewController == vc
|
84
74
|
vc.first_screen = false if vc.respond_to?(:first_screen=)
|
85
75
|
nav_controller.pushViewController(vc, animated: animated)
|
86
76
|
end
|
87
77
|
|
88
|
-
|
78
|
+
protected
|
89
79
|
|
90
80
|
def set_up_screen_for_open(screen, args={})
|
91
81
|
|
@@ -117,24 +107,23 @@ module ProMotion
|
|
117
107
|
end
|
118
108
|
end
|
119
109
|
|
120
|
-
def present_modal_view_controller(screen,
|
121
|
-
self.presentViewController((screen.navigationController || screen), animated:animated, completion:completion)
|
110
|
+
def present_modal_view_controller(screen, args={})
|
111
|
+
self.presentViewController((screen.navigationController || screen), animated: args[:animated], completion: args[:completion])
|
122
112
|
end
|
123
113
|
|
124
|
-
def
|
125
|
-
vc = open_tab
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
push_view_controller(screen, vc)
|
130
|
-
else
|
131
|
-
# TODO: This should probably open the vc, shouldn't it?
|
132
|
-
# This isn't well tested and needs to work better.
|
133
|
-
self.tab_bar.selectedIndex = vc.tabBarItem.tag
|
134
|
-
end
|
135
|
-
|
114
|
+
def open_in_tab(screen, tab_name)
|
115
|
+
vc = open_tab(tab_name)
|
116
|
+
return PM.logger.error("No tab bar item '#{tab_name}'") && nil unless vc
|
117
|
+
if vc.is_a?(UINavigationController)
|
118
|
+
push_view_controller(screen, vc)
|
136
119
|
else
|
137
|
-
|
120
|
+
replace_view_controller(screen, vc)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def replace_view_controller(new_vc, old_vc)
|
125
|
+
self.tab_bar.viewControllers = self.tab_bar.viewControllers.map do |vc|
|
126
|
+
vc == old_vc ? new_vc : vc
|
138
127
|
end
|
139
128
|
end
|
140
129
|
|