Module: ProMotion::ScreenNavigation

Included in:
ScreenModule
Defined in:
lib/ProMotion/screen/screen_navigation.rb

Instance Method Summary collapse

Instance Method Details

#appObject



35
36
37
# File 'lib/ProMotion/screen/screen_navigation.rb', line 35

def app
  UIApplication.sharedApplication
end

#app_delegateObject



39
40
41
# File 'lib/ProMotion/screen/screen_navigation.rb', line 39

def app_delegate
  UIApplication.sharedApplication.delegate
end

#close_screen(args = {}) ⇒ Object Also known as: close



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ProMotion/screen/screen_navigation.rb', line 43

def close_screen(args = {})
  args ||= {}
  args = { sender: args } unless args.is_a?(Hash)
  args[:animated] = true unless args.has_key?(:animated)

  if self.modal?
    close_nav_screen args if self.navigationController
    close_modal_screen args

  elsif self.navigationController
    close_nav_screen args
    send_on_return(args)

  else
    PM.logger.warn "Tried to close #{self.to_s}; however, this screen isn't modal or in a nav bar."

  end
end

#open_in_split_screen(screen, args) ⇒ Object



21
22
23
24
25
# File 'lib/ProMotion/screen/screen_navigation.rb', line 21

def open_in_split_screen(screen, args)
  self.split_screen.detail_screen = screen if args[:in_detail]
  self.split_screen.master_screen = screen if args[:in_master]
  args[:in_detail] || args[:in_master]
end

#open_modal(screen, args = {}) ⇒ Object



31
32
33
# File 'lib/ProMotion/screen/screen_navigation.rb', line 31

def open_modal(screen, args = {})
  open screen, args.merge({ modal: true })
end

#open_root_screen(screen) ⇒ Object



27
28
29
# File 'lib/ProMotion/screen/screen_navigation.rb', line 27

def open_root_screen(screen)
  app_delegate.open_root_screen(screen)
end

#open_screen(screen, args = {}) ⇒ Object Also known as: open



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/ProMotion/screen/screen_navigation.rb', line 4

def open_screen(screen, args = {})
  args = { animated: true }.merge(args)

  # Apply properties to instance
  screen = set_up_screen_for_open(screen, args)
  ensure_wrapper_controller_in_place(screen, args)

  opened ||= open_in_split_screen(screen, args) if self.split_screen
  opened ||= open_root_screen(screen) if args[:close_all]
  opened ||= present_modal_view_controller(screen, args) if args[:modal]
  opened ||= open_in_tab(screen, args[:in_tab]) if args[:in_tab]
  opened ||= push_view_controller(screen, self.navigationController, !!args[:animated]) if self.navigationController
  opened ||= open_root_screen(screen.navigationController || screen)
  screen
end

#push_view_controller(vc, nav_controller = nil, animated = true) ⇒ Object



73
74
75
76
77
78
79
80
81
# File 'lib/ProMotion/screen/screen_navigation.rb', line 73

def push_view_controller(vc, nav_controller=nil, animated=true)
  unless self.navigationController
    PM.logger.error "You need a nav_bar if you are going to push #{vc.to_s} onto it."
  end
  nav_controller ||= self.navigationController
  return if nav_controller.topViewController == vc
  vc.first_screen = false if vc.respond_to?(:first_screen=)
  nav_controller.pushViewController(vc, animated: animated)
end

#send_on_return(args = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/ProMotion/screen/screen_navigation.rb', line 63

def send_on_return(args = {})
  if self.parent_screen && self.parent_screen.respond_to?(:on_return)
    if args && self.parent_screen.method(:on_return).arity != 0
      self.parent_screen.send(:on_return, args)
    else
      self.parent_screen.send(:on_return)
    end
  end
end