Class: MotionPrime::PageViewSection

Inherits:
AbstractCollectionSection show all
Defined in:
motion-prime/sections/page_view.rb

Constant Summary

Constants inherited from Section

Section::DEFAULT_CONTENT_HEIGHT, Section::KEYBOARD_HEIGHT_LANDSCAPE, Section::KEYBOARD_HEIGHT_PORTRAIT

Instance Attribute Summary collapse

Attributes inherited from AbstractCollectionSection

#collection_element, #decelerating, #did_appear

Attributes inherited from Section

#elements, #model, #name, #options, #screen, #section_styles

Attributes included from DrawSectionMixin

#cached_draw_image, #container_element, #container_gesture_recognizers

Instance Method Summary collapse

Methods inherited from AbstractCollectionSection

#cell_for_index, #cell_name, #cell_section_by_index, #cell_section_styles, #cell_sections_for_group, #collection_data, #collection_element_options, #collection_styles, #collection_view, #data, #dealloc, #fixed_collection_data, #height_for_index, #hide, #on_appear, #on_cell_render, #on_click, #refresh_if_needed, #reload, #reload_data, #render_cell, #reset_collection_data, #scroll_view_did_end_decelerating, #scroll_view_did_end_dragging, #scroll_view_did_scroll, #scroll_view_will_begin_dragging, #show, #update_pull_to_refresh_after_scroll

Methods included from HasStyleChainBuilder

#build_styles_chain

Methods inherited from Section

#add_element, after_element_render, #after_element_render, after_initialize, after_render, before_initialize, before_render, bind_keyboard_close, #bind_keyboard_events, #bring_to_front, container, #container_bounds, #container_height, #container_options, #create_elements, #current_input_view_height, #dealloc, #default_name, element, #element, #elements_options, #elements_to_draw, #elements_to_render, #hard_reload_section, #has_container_bounds?, #hide, #hide_keyboard, inherited, #initialize, #keyboard_will_hide, #keyboard_will_show, #on_keyboard_hide, #on_keyboard_show, #reload, #render, #render!, #render_container, #render_element?, #screen?, #show, #strong_references, #view

Methods included from DelegateMixin

#clear_delegated, #delegated_by

Methods included from DrawSectionMixin

#after_element_render, #before_element_render, #bind_gesture_on_container_for, #clear_gesture_for_receiver, #draw_in, #prerender_elements_for_state, #prerender_enabled?

Methods included from SectionWithContainerMixin

#container_view, #init_container_element, #load_container_with_elements

Methods included from FrameCalculatorMixin

#calculate_frame_for

Methods included from HasStyles

#prepare_gradient

Methods included from HasClassFactory

#camelize_factory, #class_factory, #low_camelize_factory, #underscore_factory

Methods included from HasNormalizer

#debug_info, #element?, #normalize_object, #normalize_options, #normalize_value

Methods included from HasAuthorization

#api_client, #current_user, #reset_current_user, #user_signed_in?

Constructor Details

This class inherits a constructor from MotionPrime::Section

Instance Attribute Details

#page_controllerObject

Returns the value of attribute page_controller.



5
6
7
# File 'motion-prime/sections/page_view.rb', line 5

def page_controller
  @page_controller
end

Instance Method Details

#add_pages(sections, follow = false) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
# File 'motion-prime/sections/page_view.rb', line 50

def add_pages(sections, follow = false)
  @data += Array.wrap(sections)
  if follow
    page_index = data.count - 1
    set_page(page_index, true) do |finished|
      BW::Reactor.schedule_on_main { set_page(page_index, false) }
    end
  else
    reload_collection_data
  end
end

#collection_delegateObject



13
14
15
# File 'motion-prime/sections/page_view.rb', line 13

def collection_delegate
  @collection_delegate ||= PageViewDelegate.new(section: self)
end

#collection_styles_baseObject



9
10
11
# File 'motion-prime/sections/page_view.rb', line 9

def collection_styles_base
  :base_page_view
end

#current_page_idObject



62
63
64
# File 'motion-prime/sections/page_view.rb', line 62

def current_page_id
  index_for_page(page_controller.viewControllers.last)
end

#index_for_page(view_controller) ⇒ Object



82
83
84
# File 'motion-prime/sections/page_view.rb', line 82

def index_for_page(view_controller)
  Array.wrap(@view_controllers).index(view_controller)
end

#page_did_set(index) ⇒ Object



47
# File 'motion-prime/sections/page_view.rb', line 47

def page_did_set(index); end

#page_element_optionsObject



17
18
19
# File 'motion-prime/sections/page_view.rb', line 17

def page_element_options
  collection_element_options
end

#page_for_index(index) ⇒ Object

Delegate



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'motion-prime/sections/page_view.rb', line 67

def page_for_index(index)
  return nil if !index || data.length == 0 || index < 0 || index >= data.size
  @view_controllers ||= []
  if @view_controllers[index]
    @view_controllers[index]
  else
    controller = MotionPrime::Screen.new
    controller.parent_screen = self.screen
    section = data[index]
    section.screen = controller.weak_ref
    controller.set_section :main, instance: section
    @view_controllers[index] = controller
  end
end

#page_will_set(index) ⇒ Object



48
# File 'motion-prime/sections/page_view.rb', line 48

def page_will_set(index); end

#reload_collection_dataObject



34
35
36
# File 'motion-prime/sections/page_view.rb', line 34

def reload_collection_data
  set_view_controllers(page_controller.viewControllers, false)
end

#render_collectionObject



21
22
23
# File 'motion-prime/sections/page_view.rb', line 21

def render_collection
  self.collection_element = screen.page_view_controller(page_element_options)
end

#set_first_pageObject



25
26
27
# File 'motion-prime/sections/page_view.rb', line 25

def set_first_page
  set_page(0)
end

#set_page(index, animated = false, &block) ⇒ Object



29
30
31
32
# File 'motion-prime/sections/page_view.rb', line 29

def set_page(index, animated = false, &block)
  page = page_for_index(index)
  set_view_controllers([page], animated, &block)
end

#set_view_controllers(controllers, animated = false, &completion) ⇒ Object



38
39
40
41
42
43
44
45
# File 'motion-prime/sections/page_view.rb', line 38

def set_view_controllers(controllers, animated = false, &completion)
  completion ||= proc{|a|}
  index = index_for_page(controllers.last)
  current_index = index_for_page(page_controller.viewControllers.last).to_i
  direction = current_index <= index ? UIPageViewControllerNavigationDirectionForward : UIPageViewControllerNavigationDirectionReverse
  page_controller.setViewControllers(controllers, direction: direction, animated: animated, completion: completion)
  page_did_set(index)
end