ProMotion 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
1
  source :rubygems
2
2
 
3
3
  # Specify your gem's dependencies in ProMotion.gemspec
4
- gem "motion-table", :path => "~/Code/motion-table"
5
4
  gemspec
6
5
 
data/README.md CHANGED
@@ -41,7 +41,7 @@ class HomeScreen < ProMotion::Screen
41
41
  # Set up the elements in your view with add_element:
42
42
  @label = add_element UILabel.alloc.initWithFrame(CGRectMake(5, 5, 20, 20)), {
43
43
  text: "This is awesome!",
44
- font: UIFont.UIFont.systemFontOfSize(18)
44
+ font: UIFont.systemFontOfSize(18)
45
45
  }
46
46
  end
47
47
 
@@ -93,6 +93,12 @@ def settings_button_tapped
93
93
  end
94
94
  ```
95
95
 
96
+ Open a new screen as a modal:
97
+
98
+ ```ruby
99
+ open_screen SettingsScreen, modal: true
100
+ ```
101
+
96
102
  You can pass in arguments to other screens if they have accessors:
97
103
 
98
104
  ```ruby
@@ -147,7 +153,19 @@ def on_load
147
153
  end
148
154
  ```
149
155
 
150
- The helper add_element takes a
156
+ The helper add_element takes any view object and adds it to the current view. You can also use
157
+ the helper ProMotion::ViewHelper.set_attributes(view, attributes) to do the same thing without adding
158
+ it to the current view. Screens include this helper by default.
159
+
160
+ ```ruby
161
+ @element = add_element UIView.alloc.initWithFrame(CGRectMake(0, 0, 20, 20)), {
162
+ backgroundColor: UIColor.whiteColor
163
+ }
164
+
165
+ @element = set_attributes(UIView.alloc.initWithFrame(CGRectMake(0, 0, 20, 20)), {
166
+ backgroundColor: UIColor.whiteColor
167
+ }
168
+ ```
151
169
 
152
170
  You can create sectioned table screens easily. TableScreen, SectionedTableScreen, GroupedTableScreen
153
171
 
Binary file
File without changes
File without changes
File without changes
@@ -0,0 +1,31 @@
1
+ module ProMotion
2
+ module ScreenElements
3
+ include ProMotion::ViewHelper
4
+
5
+ def add_element(view, attrs = {})
6
+ if attrs.length > 0
7
+ set_attributes(view, attrs)
8
+ end
9
+ self.view_controller.view.addSubview(view)
10
+ view
11
+ end
12
+
13
+ def remove_element(view)
14
+ view.removeFromSuperview
15
+ view = nil
16
+ nil
17
+ end
18
+
19
+ def bounds
20
+ return self.view_controller.view.bounds
21
+ end
22
+
23
+ def frame
24
+ return self.view_controller.view.frame
25
+ end
26
+
27
+ def view
28
+ return self.view_controller.view
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,92 @@
1
+ module ProMotion
2
+ module ScreenNavigation
3
+ def open_screen(screen, args = {})
4
+ # Instantiate screen if given a class instead
5
+ screen = screen.new if screen.respond_to? :new
6
+ screen.add_nav_bar if args[:nav_bar]
7
+ screen.parent_screen = self
8
+
9
+ screen.main_controller.hidesBottomBarWhenPushed = true if args[:hide_tab_bar]
10
+
11
+ if args[:close_all]
12
+ fresh_start(screen)
13
+ elsif args[:modal]
14
+ screen.modal = true
15
+ self.view_controller.presentModalViewController(screen.main_controller, animated:true)
16
+ elsif self.navigation_controller
17
+ screen.navigation_controller = self.navigation_controller
18
+ push_view_controller screen.view_controller
19
+ else
20
+ open_view_controller screen.main_controller
21
+ end
22
+
23
+ screen.send(:on_opened) if screen.respond_to?(:on_opened)
24
+ end
25
+
26
+ def fresh_start(screen)
27
+ app_delegate.fresh_start(screen)
28
+ end
29
+
30
+ def app_delegate
31
+ UIApplication.sharedApplication.delegate
32
+ end
33
+
34
+ def close_screen(args = {})
35
+ # Pop current view, maybe with arguments, if in navigation controller
36
+ if self.is_modal?
37
+ self.parent_screen.view_controller.dismissModalViewControllerAnimated(true)
38
+ elsif self.navigation_controller
39
+ self.navigation_controller.popViewControllerAnimated(true)
40
+ else
41
+ # What do we do now? Nothing to "pop". For now, don't do anything.
42
+ end
43
+ end
44
+
45
+ def tab_bar_controller(*screens)
46
+ tab_bar_controller = UITabBarController.alloc.init
47
+
48
+ view_controllers = []
49
+ screens.each do |s|
50
+ if s.is_a? Screen
51
+ s = s.new if s.respond_to? :new
52
+ view_controllers << s.main_controller
53
+ else
54
+ Console.log("Non-Screen passed into tab_bar_controller: #{s.to_s}", withColor: Console::RED_COLOR)
55
+ end
56
+ end
57
+
58
+ tab_bar_controller.viewControllers = view_controllers
59
+ tab_bar_controller
60
+ end
61
+
62
+ def open_tab_bar(*screens)
63
+ tab_bar = tab_bar_controller(*screens)
64
+ open_view_controller tab_bar
65
+ screens.each do |s|
66
+ s.on_opened if s.respond_to? :on_opened
67
+ s.parent_screen = self if s.respond_to? "parent_screen="
68
+ end
69
+ tab_bar
70
+ end
71
+
72
+ def push_tab_bar(*screens)
73
+ tab_bar = tab_bar_controller(*screens)
74
+ push_view_controller tab_bar
75
+ screens.each do |s|
76
+ s.on_opened if s.respond_to? :on_opened
77
+ s.parent_screen = self if s.respond_to? "parent_screen="
78
+ end
79
+ tab_bar
80
+ end
81
+
82
+ def open_view_controller(vc)
83
+ UIApplication.sharedApplication.delegate.load_root_view vc
84
+ end
85
+
86
+ def push_view_controller(vc)
87
+ # vc.hidesBottomBarWhenPushed = true if args[:hide_tab_bar]
88
+ Console.log(" You need a nav_bar if you are going to push #{vc.to_s} onto it.", withColor: Console::RED_COLOR) unless self.navigation_controller
89
+ self.navigation_controller.pushViewController(vc, animated: true)
90
+ end
91
+ end
92
+ end
Binary file
@@ -1,137 +1,10 @@
1
- module ProMotion
2
- module ScreenElements
3
- def add_element(view, attrs = {})
4
- if attrs.length > 0
5
- set_attributes(view, attrs)
6
- end
7
- self.view_controller.view.addSubview(view)
8
- view
9
- end
10
-
11
- def remove_element(view)
12
- view.removeFromSuperview
13
- view = nil
14
- nil
15
- end
16
-
17
- def bounds
18
- return self.view_controller.view.bounds
19
- end
20
-
21
- def frame
22
- return self.view_controller.view.frame
23
- end
24
-
25
- def view
26
- return self.view_controller.view
27
- end
28
-
29
- def set_attributes(element, args = {})
30
- args.each do |k, v|
31
- element.send("#{k}=", v) if element.respond_to? "#{k}="
32
- end
33
- element
34
- end
35
- end
36
-
37
- module ScreenNavigation
38
- def open_screen(screen, args = {})
39
- # Instantiate screen if given a class instead
40
- screen = screen.new if screen.respond_to? :new
41
- screen.add_nav_bar if args[:nav_bar]
42
- screen.parent_screen = self
43
-
44
- screen.main_controller.hidesBottomBarWhenPushed = true if args[:hide_tab_bar]
45
-
46
- if args[:close_all]
47
- fresh_start(screen)
48
- elsif self.navigation_controller
49
- screen.navigation_controller = self.navigation_controller
50
- push_view_controller screen.view_controller
51
- else
52
- open_view_controller screen.main_controller
53
- end
54
-
55
- screen.on_opened if screen.respond_to? :on_opened
56
- end
57
-
58
- def fresh_start(screen)
59
- app_delegate.fresh_start(screen)
60
- end
61
-
62
- def app_delegate
63
- UIApplication.sharedApplication.delegate
64
- end
65
-
66
- def close_screen(args = {})
67
- # Pop current view, maybe with arguments, if in navigation controller
68
- if self.navigation_controller
69
- self.navigation_controller.popViewControllerAnimated(true)
70
- else
71
- # What do we do now? Nothing to "pop"
72
- end
73
- end
74
-
75
- def tab_bar_controller(*screens)
76
- tab_bar_controller = UITabBarController.alloc.init
77
-
78
- view_controllers = []
79
- screens.each do |s|
80
- if s.is_a? Screen
81
- s = s.new if s.respond_to? :new
82
- view_controllers << s.main_controller
83
- else
84
- Console.log("Non-Screen passed into tab_bar_controller: #{s.to_s}", withColor: Console::RED_COLOR)
85
- end
86
- end
87
-
88
- tab_bar_controller.viewControllers = view_controllers
89
- tab_bar_controller
90
- end
91
-
92
- def open_tab_bar(*screens)
93
- tab_bar = tab_bar_controller(*screens)
94
- open_view_controller tab_bar
95
- screens.each do |s|
96
- s.on_opened if s.respond_to? :on_opened
97
- s.parent_screen = self if s.respond_to? "parent_screen="
98
- end
99
- tab_bar
100
- end
101
-
102
- def push_tab_bar(*screens)
103
- tab_bar = tab_bar_controller(*screens)
104
- push_view_controller tab_bar
105
- screens.each do |s|
106
- s.on_opened if s.respond_to? :on_opened
107
- s.parent_screen = self if s.respond_to? "parent_screen="
108
- end
109
- tab_bar
110
- end
111
-
112
- def open_view_controller(vc)
113
- UIApplication.sharedApplication.delegate.load_root_view vc
114
- end
115
-
116
- def push_view_controller(vc)
117
- # vc.hidesBottomBarWhenPushed = true if args[:hide_tab_bar]
118
- Console.log(" You need a nav_bar if you are going to push #{vc.to_s} onto it.", withColor: Console::RED_COLOR) unless self.navigation_controller
119
- self.navigation_controller.pushViewController(vc, animated: true)
120
- end
121
- end
122
- end
123
-
124
1
  module ProMotion
125
2
  # Instance methods
126
3
  class Screen
127
4
  include ProMotion::ScreenNavigation
128
5
  include ProMotion::ScreenElements
129
6
 
130
- attr_accessor :view_controller
131
- attr_accessor :navigation_controller
132
- attr_accessor :parent_screen
133
- attr_accessor :first_screen
134
- attr_accessor :tab_bar_item
7
+ attr_accessor :view_controller, :navigation_controller, :parent_screen, :first_screen, :tab_bar_item, :modal
135
8
 
136
9
  def initialize(attrs = {})
137
10
  attrs.each do |k, v|
@@ -149,6 +22,10 @@ module ProMotion
149
22
  self
150
23
  end
151
24
 
25
+ def is_modal?
26
+ self.modal
27
+ end
28
+
152
29
  def load_view_controller
153
30
  self.view_controller ||= ViewController
154
31
  end
@@ -200,6 +77,7 @@ module ProMotion
200
77
  end
201
78
 
202
79
  def view_will_appear(animated)
80
+ self.will_appear if self.respond_to? :will_appear
203
81
  end
204
82
 
205
83
  def view_did_appear(animated)
@@ -0,0 +1,16 @@
1
+ module ProMotion
2
+ module ViewHelper
3
+ def set_attributes(element, args = {})
4
+ args.each do |k, v|
5
+ element.send("#{k}=", v) if element.respond_to? "#{k}="
6
+ end
7
+ element
8
+ end
9
+
10
+ def frame_from_array(array)
11
+ return CGRectMake(array[0], array[1], array[2], array[3]) if array.length == 4
12
+ Console.log(" - frame_from_array expects an array with four elements.", withColor: Console::RED_COLOR)
13
+ CGRectZero
14
+ end
15
+ end
16
+ end
@@ -44,18 +44,26 @@ module ProMotion::MotionTable
44
44
  tableCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
45
45
  unless tableCell
46
46
  tableCell = UITableViewCell.alloc.initWithStyle(dataCell[:cellStyle], reuseIdentifier:cellIdentifier)
47
- tableCell.accessoryView = dataCell[:accessoryView] if dataCell[:accessoryView]
48
-
49
- if dataCell[:accessory] && dataCell[:accessory] == :switch
50
- switchView = UISwitch.alloc.initWithFrame(CGRectZero)
51
- switchView.addTarget(self, action: "accessoryToggledSwitch:", forControlEvents:UIControlEventValueChanged);
52
- switchView.on = true if dataCell[:accessoryDefault]
53
- tableCell.accessoryView = switchView
54
- end
47
+ end
55
48
 
56
- if dataCell[:subtitle]
57
- tableCell.detailTextLabel.text = dataCell[:subtitle]
58
- end
49
+ tableCell.accessoryView = dataCell[:accessoryView] if dataCell[:accessoryView]
50
+
51
+ if dataCell[:accessory] && dataCell[:accessory] == :switch
52
+ switchView = UISwitch.alloc.initWithFrame(CGRectZero)
53
+ switchView.addTarget(self, action: "accessoryToggledSwitch:", forControlEvents:UIControlEventValueChanged);
54
+ switchView.on = true if dataCell[:accessoryDefault]
55
+ tableCell.accessoryView = switchView
56
+ end
57
+
58
+ if dataCell[:subtitle]
59
+ tableCell.detailTextLabel.text = dataCell[:subtitle]
60
+ end
61
+
62
+
63
+ if dataCell[:image]
64
+ tableCell.imageView.layer.masksToBounds = true
65
+ tableCell.imageView.image = dataCell[:image][:image]
66
+ tableCell.imageView.layer.cornerRadius = dataCell[:image][:radius] if dataCell[:image][:radius]
59
67
  end
60
68
 
61
69
  tableCell.text = dataCell[:title]
@@ -1,3 +1,3 @@
1
1
  module ProMotion
2
- VERSION = "0.1.0" unless defined?(ProMotion::VERSION)
2
+ VERSION = "0.1.1" unless defined?(ProMotion::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ProMotion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-09-06 00:00:00.000000000 Z
14
+ date: 2012-09-11 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description: ProMotion is a new way to organize RubyMotion apps.
17
17
  email:
@@ -30,22 +30,27 @@ files:
30
30
  - app/screens/home_screen.rb
31
31
  - app/screens/test_screen.rb
32
32
  - lib/ProMotion.rb
33
+ - lib/ProMotion/.DS_Store
33
34
  - lib/ProMotion/AppDelegate.rb
34
35
  - lib/ProMotion/Console.rb
35
36
  - lib/ProMotion/ProMotion.rb
37
+ - lib/ProMotion/_ext/NavigationController.rb
38
+ - lib/ProMotion/_ext/TableViewController.rb
39
+ - lib/ProMotion/_ext/ViewController.rb
40
+ - lib/ProMotion/_modules/ScreenElements.rb
41
+ - lib/ProMotion/_modules/ScreenNavigation.rb
42
+ - lib/ProMotion/classes/.DS_Store
36
43
  - lib/ProMotion/classes/Element.rb
37
44
  - lib/ProMotion/classes/Screen.rb
38
45
  - lib/ProMotion/classes/TableScreen.rb
39
- - lib/ProMotion/ext/NavigationController.rb
40
- - lib/ProMotion/ext/TableViewController.rb
41
- - lib/ProMotion/ext/ViewController.rb
42
46
  - lib/ProMotion/helpers/MeasureHelper.rb
43
47
  - lib/ProMotion/helpers/TabBar.rb
48
+ - lib/ProMotion/helpers/ViewHelper.rb
49
+ - lib/ProMotion/helpers/motion-table/1st/searchable_table.rb
50
+ - lib/ProMotion/helpers/motion-table/1st/sectioned_table.rb
51
+ - lib/ProMotion/helpers/motion-table/2nd/grouped_table.rb
52
+ - lib/ProMotion/helpers/motion-table/2nd/plain_table.rb
44
53
  - lib/ProMotion/helpers/motion-table/console.rb
45
- - lib/ProMotion/helpers/motion-table/first/searchable_table.rb
46
- - lib/ProMotion/helpers/motion-table/first/sectioned_table.rb
47
- - lib/ProMotion/helpers/motion-table/grouped_table.rb
48
- - lib/ProMotion/helpers/motion-table/plain_table.rb
49
54
  - lib/ProMotion/version.rb
50
55
  homepage: https://github.com/clearsightstudio/ProMotion
51
56
  licenses: []