ruby_motion_query 0.7.1 → 0.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa33d32bc33a3a37c0b275b086ec98e68ad93087
4
- data.tar.gz: 88136c1a620a6f49c3da516941224405627e6bfe
3
+ metadata.gz: 8c13477305c59894c43b5b220acb157aaf32bd34
4
+ data.tar.gz: f2ff2ecd3a1baa31fa47b9499c20711f9bcb7164
5
5
  SHA512:
6
- metadata.gz: 56f9eeeb66eea90c517f495318da1709c3c93262365eef4f64fc1f49a3d2cbc7c375ea9f269e2f8ad51ea65500d8dfbc89f3d206224a3b2fb4abcb160a709bba
7
- data.tar.gz: 715240b7ef7389f0440e5cddf8f9f22955911317544a185634bb46e7b16a66b3c254c72e9bf827b2eb8fb436195168da85b96432ce430bdfd212edd65c3ebb51
6
+ metadata.gz: 54f605689d32c537f42ef60f5d4c7b6cd70d354a9d2c8e6b708faa65616685dd04f21a9240dacf59c353f6eb2a39aadfc23d462205b19cc1f976c429fe83f1e8
7
+ data.tar.gz: 41b7414448a6763a076a5dc18ba98ea171c39d644d2e30e3ef5889605729303de2645da1e3e003027794f5ea51072573a3c3ba0f4023b4295845faf8d9cf2d86
data/README.md CHANGED
@@ -21,6 +21,8 @@ One of RMQ's goal is to have the best [documentation][1] of any RubyMotion UI li
21
21
 
22
22
  <br />
23
23
 
24
+ ### Requires SDK 7 or higher, and iOS 7 or higher
25
+
24
26
  ## Quick Start
25
27
 
26
28
  ```
data/motion/ext.rb CHANGED
@@ -16,6 +16,7 @@ class UIView
16
16
  # @deprecated No longer needed, use rmq_build
17
17
  def rmq_did_create(self_in_rmq)
18
18
  end
19
+
19
20
  def rmq_created
20
21
  end
21
22
 
@@ -26,6 +27,9 @@ class UIView
26
27
  def rmq_appended
27
28
  end
28
29
 
30
+ def rmq_style_applied
31
+ end
32
+
29
33
  # Technically my_view.rmq is the same as rmq(my_view), so it may seem enticing to use,
30
34
  # but the really nice thing about rmq is its consistent API, and doing this
31
35
  # for one view: my_view.rmq and this for two views: rmq(my_view, my_other_view) sucks
@@ -16,8 +16,8 @@ module RubyMotionQuery
16
16
  # For example, text for UILabel, image for UIImageView
17
17
  #
18
18
  # @return [RMQ]
19
- def data(new_data = nil)
20
- if new_data
19
+ def data(new_data = :rmq_not_provided)
20
+ if new_data != :rmq_not_provided
21
21
  selected.each do |view|
22
22
  case view
23
23
  when UILabel then view.setText new_data # set is faster than =
@@ -33,8 +33,8 @@ module RubyMotionQuery
33
33
  #when UIStepper then
34
34
  #when UITabBar then
35
35
  #when UITableViewCell then
36
- when UITextView then view.setText new_data
37
- when UITextField then view.setText new_data
36
+ when UITextView then view.text = new_data
37
+ when UITextField then view.text = new_data
38
38
  #when UINavigationBar then
39
39
  #when UIScrollView then
40
40
 
@@ -80,7 +80,7 @@ module RubyMotionQuery
80
80
  # @example
81
81
  # rmq(my_view).data = 'some data'
82
82
  def data=(new_data)
83
- data(new_data)
83
+ self.data(new_data)
84
84
  end
85
85
 
86
86
  # @return [RMQ]
@@ -46,7 +46,7 @@ module RubyMotionQuery
46
46
 
47
47
  UIView.animateWithDuration(
48
48
  opts[:duration] || 0.3,
49
- delay: opts[:delay] || 0,
49
+ delay: opts[:delay] || 0.0,
50
50
  options: opts[:options] || UIViewAnimationOptionCurveEaseInOut,
51
51
  animations: animations_lambda,
52
52
  completion: after_lambda
@@ -85,11 +85,13 @@ module RubyMotionQuery
85
85
  root_view_controller.visibleViewController
86
86
  when UITabBarController
87
87
  current_view_controller(root_view_controller.selectedViewController)
88
- else
88
+ else
89
89
  if root_view_controller.respond_to?(:visibleViewController)
90
90
  current_view_controller(root_view_controller.visibleViewController)
91
91
  elsif root_view_controller.respond_to?(:topViewController)
92
92
  current_view_controller(root_view_controller.topViewController)
93
+ elsif root_view_controller.respond_to?(:frontViewController)
94
+ current_view_controller(root_view_controller.frontViewController)
93
95
  elsif root_view_controller.childViewControllers.count > 0
94
96
  current_view_controller(root_view_controller.childViewControllers.first)
95
97
  else
@@ -1,6 +1,6 @@
1
1
  module RubyMotionQuery
2
2
  class ViewData
3
- attr_accessor :events, :style_name
3
+ attr_accessor :events, :style_name, :built
4
4
 
5
5
  # @return [Hash] Array of tag names assigned to to this view
6
6
  def tags
@@ -13,27 +13,64 @@ module RubyMotionQuery
13
13
 
14
14
  class Device
15
15
  class << self
16
+ def ios_eight?
17
+ @_ios_eight ||= screen.respond_to?(:coordinateSpace)
18
+ end
19
+
20
+ # Find out what version of iOS you're using.
21
+ # `rmq.device.is_version? 8`
22
+ # `rmq.device.is_version? "7.1"`
23
+ #
24
+ # @return [Boolean]
25
+ def is_version? version
26
+ !!ios_version.match("^#{version}")
27
+ end
28
+
29
+ def ios_version
30
+ UIDevice.currentDevice.systemVersion
31
+ end
32
+
16
33
  # @return [UIScreen]
17
34
  def screen
18
35
  UIScreen.mainScreen
19
36
  end
20
37
 
38
+ def size_a
39
+ @_size_a ||= screen.bounds.size.to_a.sort
40
+ end
41
+
42
+ # Width is the width of the device, regardless of its orientation.
43
+ # This is static. If you want the width with the correct orientation, use
44
+ # screen_width
45
+ #
21
46
  # @return [Numeric]
22
47
  def width
23
- @_width ||= Device.screen.bounds.size.width
48
+ size_a[0]
49
+ end
50
+ def width_landscape
51
+ size_a[1]
24
52
  end
25
53
 
54
+ # Height is the height of the device, regardless of its orientation.
55
+ # This is static. If you want the height with the correct orientation, use
56
+ # screen_height
57
+ #
26
58
  # @return [Numeric]
27
59
  def height
28
- @_height ||= Device.screen.bounds.size.height
60
+ size_a[1]
61
+ end
62
+ def height_landscape
63
+ size_a[0]
29
64
  end
30
65
 
66
+ # @return [Numeric]
31
67
  def screen_width
32
- portrait? ? screen.bounds.size.width : screen.bounds.size.height
68
+ portrait? ? width : width_landscape
33
69
  end
34
70
 
71
+ # @return [Numeric]
35
72
  def screen_height
36
- portrait? ? screen.bounds.size.height : screen.bounds.size.width
73
+ portrait? ? height : height_landscape
37
74
  end
38
75
 
39
76
  def ipad?
@@ -51,11 +88,26 @@ module RubyMotionQuery
51
88
  @_simulator
52
89
  end
53
90
 
91
+ def three_point_five_inch?
92
+ @_three_point_five_inch = (Device.height == 480.0) if @_three_point_five_inch.nil?
93
+ @_three_point_five_inch
94
+ end
95
+
54
96
  def four_inch?
55
97
  @_four_inch = (Device.height == 568.0) if @_four_inch.nil?
56
98
  @_four_inch
57
99
  end
58
100
 
101
+ def four_point_seven_inch?
102
+ @_four_point_seven_inch = (Device.height == 667.0) if @_four_point_seven_inch.nil?
103
+ @_four_point_seven_inch
104
+ end
105
+
106
+ def five_point_five_inch?
107
+ @_five_point_five_inch = (Device.height == 736.0) if @_five_point_five_inch.nil?
108
+ @_five_point_five_inch
109
+ end
110
+
59
111
  def retina?
60
112
  if @_retina.nil?
61
113
  main_screen = Device.screen
@@ -67,16 +119,41 @@ module RubyMotionQuery
67
119
 
68
120
  # @return :unknown or from ORIENTATIONS
69
121
  def orientation
70
- orientation = UIApplication.sharedApplication.statusBarOrientation
71
- ORIENTATIONS[orientation] || :unknown
122
+ if @custom_orientation
123
+ @custom_orientation
124
+ else
125
+ orientation = UIApplication.sharedApplication.statusBarOrientation
126
+ ORIENTATIONS[orientation] || :unknown
127
+ end
128
+ end
129
+
130
+ # You can manually set the orientation, if set it RMQ won't automatically get the
131
+ # orientation from the sharedApplication. If you want the automatic orientation to work again
132
+ # set this to nil
133
+ #
134
+ # For options of what to set it to, see RubyMotionQuery::Device::ORIENTATIONS
135
+ #
136
+ # You can set this to :landscape, which isn't real option, but it will automatically
137
+ # get converted to :landscape_left
138
+ def orientation=(value)
139
+ if value
140
+ if value == :landscape
141
+ value = :landscape_left
142
+ elsif !value.is_a?(Symbol)
143
+ value = ORIENTATIONS[value] || :unknown
144
+ end
145
+ end
146
+ @custom_orientation = value
72
147
  end
73
148
 
74
149
  def landscape?
75
- Device.orientation == :landscape_left || Device.orientation == :landscape_right
150
+ orientated = orientation
151
+ orientated == :landscape || orientated == :landscape_left || orientated == :landscape_right
76
152
  end
77
153
 
78
154
  def portrait?
79
- Device.orientation == :portrait || Device.orientation == :unknown
155
+ orientated = orientation
156
+ orientated == :portrait || orientated == :unknown
80
157
  end
81
158
 
82
159
  def orientations
@@ -1,6 +1,6 @@
1
- module RubyMotionQuery
1
+ module RubyMotionQuery
2
2
  class RMQ
3
- # I'm purposly not including Enumerable,
3
+ # I'm purposly not including Enumerable,
4
4
  # please use to_a if you want one
5
5
 
6
6
 
@@ -67,10 +67,12 @@ module RubyMotionQuery
67
67
 
68
68
  # @return [RMQ]
69
69
  def first
70
+ # TODO, check if it fails with nil
70
71
  RMQ.create_with_array_and_selectors([selected.first], @selectors, @context)
71
72
  end
72
73
  # @return [RMQ]
73
74
  def last
75
+ # TODO, check if it fails with nil
74
76
  RMQ.create_with_array_and_selectors([selected.last], @selectors, @context)
75
77
  end
76
78
 
@@ -134,6 +134,8 @@ module RubyMotionQuery
134
134
  raise "[RMQ Error] Event already exists on this object: #{event}. Remove first, using .off" if @event_set[event]
135
135
 
136
136
  if rmqe = event_instance(view, event, block)
137
+ view.userInteractionEnabled = true
138
+
137
139
  rmqe.set_options(args) if rmqe.respond_to? :set_options
138
140
 
139
141
  @event_set[event] = rmqe
@@ -116,6 +116,7 @@ module RubyMotionQuery
116
116
 
117
117
  def initialize(params)
118
118
  @grid_hash = {}
119
+ @grid_hash_landscape = {}
119
120
 
120
121
  self.num_columns = params[:num_columns]
121
122
  self.num_rows = params[:num_rows]
@@ -185,84 +186,90 @@ module RubyMotionQuery
185
186
  #
186
187
  # @return hash with any combination of l:, t:, w:, or :h. Or nil if invalid
187
188
  def [](coord)
188
- @grid_hash[coord] ||= begin
189
- if coord.is_a?(Array)
189
+ if Device.landscape?
190
+ @grid_hash_landscape[coord] ||= calc_coord(coord)
191
+ else
192
+ @grid_hash[coord] ||= calc_coord(coord)
193
+ end
194
+ end
190
195
 
191
- l = column_lefts[coord[0]]
192
- t = row_tops[coord[1]]
193
- case coord.length
194
- when 2
195
- RubyMotionQuery::Rect.new([l, t, column_width, row_height])
196
- when 4
197
- RubyMotionQuery::Rect.new([l, t, coord[2], coord[3]])
198
- else
199
- nil
200
- end
196
+ private def calc_coord(coord)
197
+ if coord.is_a?(Array)
201
198
 
199
+ l = column_lefts[coord[0]]
200
+ t = row_tops[coord[1]]
201
+ case coord.length
202
+ when 2
203
+ RubyMotionQuery::Rect.new([l, t, column_width, row_height])
204
+ when 4
205
+ RubyMotionQuery::Rect.new([l, t, coord[2], coord[3]])
202
206
  else
203
- return nil unless coord
204
-
205
- # TODO this needs refactoring once the full tests are done
206
- coord.gsub!(/\s/, '')
207
- is_end_coord = coord.start_with?(':')
208
- parts = coord.split(':')
209
- parts.reject!{|o| o == ''}
207
+ nil
208
+ end
210
209
 
211
- case parts.length
212
- when 0
213
- nil
214
- when 1
215
- lefts = column_lefts
216
- tops = row_tops
217
-
218
- p1 = parts.first
219
- digits = p1.gsub(/\D/, '')
220
- if digits == ''
221
- digits = nil
222
- else
223
- top_i = digits.to_i
224
- top_i = (tops.length - 1) if top_i >= tops.length
225
- end
210
+ else
211
+ return nil unless coord
226
212
 
227
- letter = p1.gsub(/\d/, '')
228
- if letter == ''
229
- letter = nil
230
- else
231
- letter.downcase!
232
- left_i = (letter.ord - 97)
233
- left_i = (lefts.length - 1) if left_i >= lefts.length
234
- end
213
+ # TODO this needs refactoring once the full tests are done
214
+ coord.gsub!(/\s/, '')
215
+ is_end_coord = coord.start_with?(':')
216
+ parts = coord.split(':')
217
+ parts.reject!{|o| o == ''}
235
218
 
236
- if digits && letter
237
- if lefts.length > left_i && tops.length > top_i
238
- if is_end_coord
239
- {r: lefts[left_i] + column_width, b: tops[top_i] + row_height}
240
- else
241
- {l: lefts[left_i], t: tops[top_i]}
242
- end
243
- else
244
- nil
245
- end
246
- elsif digits
247
- if is_end_coord
248
- {b: tops[top_i] + row_height}
249
- else
250
- {t: tops[top_i]}
251
- end
252
- elsif letter
219
+ case parts.length
220
+ when 0
221
+ nil
222
+ when 1
223
+ lefts = column_lefts
224
+ tops = row_tops
225
+
226
+ p1 = parts.first
227
+ digits = p1.gsub(/\D/, '')
228
+ if digits == ''
229
+ digits = nil
230
+ else
231
+ top_i = digits.to_i
232
+ top_i = (tops.length - 1) if top_i >= tops.length
233
+ end
234
+
235
+ letter = p1.gsub(/\d/, '')
236
+ if letter == ''
237
+ letter = nil
238
+ else
239
+ letter.downcase!
240
+ left_i = (letter.ord - 97)
241
+ left_i = (lefts.length - 1) if left_i >= lefts.length
242
+ end
243
+
244
+ if digits && letter
245
+ if lefts.length > left_i && tops.length > top_i
253
246
  if is_end_coord
254
- {r: lefts[left_i] + column_width}
247
+ {r: lefts[left_i] + column_width, b: tops[top_i] + row_height}
255
248
  else
256
- {l: lefts[left_i]}
249
+ {l: lefts[left_i], t: tops[top_i]}
257
250
  end
258
251
  else
259
252
  nil
260
253
  end
261
- when 2
262
- self[parts.first].merge(self[":#{parts.last}"])
263
- end
264
- end.freeze
265
- end
254
+ elsif digits
255
+ if is_end_coord
256
+ {b: tops[top_i] + row_height}
257
+ else
258
+ {t: tops[top_i]}
259
+ end
260
+ elsif letter
261
+ if is_end_coord
262
+ {r: lefts[left_i] + column_width}
263
+ else
264
+ {l: lefts[left_i]}
265
+ end
266
+ else
267
+ nil
268
+ end
269
+ when 2
270
+ self[parts.first].merge(self[":#{parts.last}"])
271
+ end
272
+ end.freeze
266
273
  end
267
274
 
268
275
  # TODO, do this when orientation changes
@@ -272,6 +279,12 @@ module RubyMotionQuery
272
279
  @_column_width = nil
273
280
  @_usable_height = nil
274
281
  @_row_height = nil
282
+
283
+ @grid_hash_landscape = {}
284
+ @_usable_width_landscape = nil
285
+ @_column_width_landscape = nil
286
+ @_usable_height_landscape = nil
287
+ @_row_height_landscape = nil
275
288
  end
276
289
 
277
290
  def to_h
@@ -331,11 +344,16 @@ module RubyMotionQuery
331
344
  end
332
345
 
333
346
  def usable_width
334
- @_usable_width ||= (RMQ.device.screen_width - (@column_gutter * (@num_columns - 1)) - @content_left_margin - @content_right_margin)
347
+ unless @_usable_width
348
+ unusable = (@column_gutter * (@num_columns - 1)) + @content_left_margin + @content_right_margin
349
+ @_usable_width_landscape = Device.width_landscape - unusable
350
+ @_usable_width = Device.width - unusable
351
+ end
352
+ Device.landscape? ? @_usable_width_landscape : @_usable_width
335
353
  end
336
354
 
337
355
  def column_width
338
- @_column_width ||= usable_width / @num_columns
356
+ usable_width / @num_columns
339
357
  end
340
358
 
341
359
  def column_lefts
@@ -353,11 +371,16 @@ module RubyMotionQuery
353
371
  end
354
372
 
355
373
  def usable_height
356
- @_usable_height ||= (RMQ.device.screen_height - (@row_gutter * (@num_rows - 1)) - @content_top_margin - @content_bottom_margin)
374
+ unless @_usable_height
375
+ unusable = (@row_gutter * (@num_rows - 1)) + @content_top_margin + @content_bottom_margin
376
+ @_usable_height_landscape = Device.height_landscape - unusable
377
+ @_usable_height = Device.height - unusable
378
+ end
379
+ Device.landscape? ? @_usable_height_landscape : @_usable_height
357
380
  end
358
381
 
359
382
  def row_height
360
- @_row_height ||= usable_height / @num_rows
383
+ usable_height / @num_rows
361
384
  end
362
385
 
363
386
  def row_tops
@@ -46,12 +46,12 @@ module RubyMotionQuery
46
46
  # rmq(my_view).frame = "a1:b5"
47
47
  # rmq(my_view, my_other_view).frame = {grid: "b2", w: 100, h: 200}
48
48
  # rmq(my_view, my_other_view).frame = {g: "b2", w: 100, h: 200}
49
- #
49
+ #
50
50
  # @example with padding
51
51
  # rmq(my_view).frame = {grid: "b2:d14", padding: 5}
52
52
  # rmq(my_view).frame = {grid: "b2:d14", padding: {l: 5, t: 0, r: 5, b:0}}
53
53
  def frame=(value)
54
- selected.each do |view|
54
+ selected.each do |view|
55
55
  RubyMotionQuery::Rect.update_view_frame(view, value)
56
56
  end
57
57
  end
@@ -65,7 +65,7 @@ module RubyMotionQuery
65
65
  end
66
66
 
67
67
  def bounds=(value)
68
- selected.each do |view|
68
+ selected.each do |view|
69
69
  RubyMotionQuery::Rect.bounds_for_view(view).update(value, self.grid).apply_to_bounds
70
70
  end
71
71
  end
@@ -73,7 +73,7 @@ module RubyMotionQuery
73
73
  end
74
74
 
75
75
 
76
- # RMQ Rect
76
+ # RMQ Rect
77
77
  #
78
78
  # *******************---*******---*************************** value options
79
79
  # * | | * -------------
@@ -81,31 +81,31 @@ module RubyMotionQuery
81
81
  # * | | * signed Integer
82
82
  # * top | * Float
83
83
  # * | | * String
84
- # * | | *
85
- # * --- | * also
84
+ # * | | *
85
+ # * --- | * also
86
86
  # * ***************|***** --- * -----------------------
87
87
  # * * view | * | * :full
88
- # * * | * | * :right_of_prev (:rop)
88
+ # * * | * | * :right_of_prev (:rop)
89
89
  # * * bottom * | * :left_of_prev (:lop)
90
- # * * | * | * :below_prev (:bp)
90
+ # * * | * | * :below_prev (:bp)
91
91
  # *|--- left ---|* | * | * :above_prev (:ap)
92
92
  # * * | * height * :grid (:g)
93
93
  # * * | * | * :padding (:p)
94
- # * * | * | * int or hash: l,t,b,r
95
- # *|-------------------- right -+---|* | *
96
- # * * | * | * abbreviations
94
+ # * * | * | * int or hash: l,t,b,r
95
+ # *|-------------------- right -+---|* | *
96
+ # * * | * | * abbreviations
97
97
  # * * | * |--+--from_right----|* -----------------------
98
- # * * --- * | * :l, :t, :w, :h
98
+ # * * --- * | * :l, :t, :w, :h
99
99
  # * ***************---*** --- * :r, :b
100
100
  # * | * :fr, fb
101
- # * |------ width - + -| *
101
+ # * |------ width - + -| *
102
102
  # * | * :centered options
103
103
  # * | * -----------------------
104
104
  # * from_bottom * :horizontal
105
105
  # * | * :vertical
106
- # * | * :both
107
- # * --- *
108
- # ***********************************************************
106
+ # * | * :both
107
+ # * --- *
108
+ # ***********************************************************
109
109
  #
110
110
  class Rect
111
111
  attr_reader :view
@@ -148,14 +148,14 @@ module RubyMotionQuery
148
148
  a = rect_hash_to_rect_array(view, existing_rect, o, grid)
149
149
  CGRectMake(a[0], a[1], a[2], a[3])
150
150
  elsif o == :full
151
- if view
152
- view.superview.bounds
151
+ if view && (sv = view.superview)
152
+ sv.bounds
153
153
  else
154
- rmq.rootview.bounds
154
+ rmq.root_view.bounds
155
155
  end
156
156
  elsif o.is_a?(RubyMotionQuery::Rect)
157
157
  o.to_cgrect
158
- elsif grid && o.is_a?(String)
158
+ elsif grid && o.is_a?(String)
159
159
  a = rect_hash_to_rect_array(view, existing_rect, {grid: o}, grid)
160
160
  CGRectMake(a[0], a[1], a[2], a[3])
161
161
  elsif o.is_a?(Array)
@@ -215,7 +215,7 @@ module RubyMotionQuery
215
215
 
216
216
  # Previous
217
217
  if prev_view = previous_view(view)
218
- if params_g && (prev_sv = prev_view.superview)
218
+ if params_g && (prev_sv = prev_view.superview)
219
219
 
220
220
  previous_root_view_point = vc.view.convertPoint(prev_view.origin, fromView: prev_sv)
221
221
 
@@ -252,13 +252,13 @@ module RubyMotionQuery
252
252
  # Horrible horrible hack, TODO fix. This is here because
253
253
  # the root_view's height isn't changed until after viewDidLoad when
254
254
  # vc.edgesForExtendedLayout = UIRectEdgeNone.
255
- # Not sure how often people use UIRectEdgeNone as I never do,
255
+ # Not sure how often people use UIRectEdgeNone as I never do,
256
256
  # perhaps an edge case that should be isolated in some wayo
257
257
  # I hate to have to check and calc this every time
258
258
  if vc && !not_in_root_view && (vc.edgesForExtendedLayout == UIRectEdgeNone)
259
- sv_size = CGSizeMake(sv.size.width, rmq.device.screen_height - 64)
259
+ sv_size = CGSizeMake(sv.bounds.size.width, rmq.device.screen_height - 64)
260
260
  else
261
- sv_size = sv.size
261
+ sv_size = sv.bounds.size
262
262
  end
263
263
  end
264
264
  end
@@ -349,10 +349,10 @@ module RubyMotionQuery
349
349
  end
350
350
 
351
351
  def update(params, grid = nil)
352
- # Doing all of the updates to the Rect in singleton for performance.
352
+ # Doing all of the updates to the Rect in singleton for performance.
353
353
  # It would be better to be done inside an actual Rect instance, but that
354
354
  # would require creating a lot of temporary objects.
355
- # TODO performance and see if there is any real loss bringing
355
+ # TODO performance and see if there is any real loss bringing
356
356
  # object_to_cg_rect into Rect instance
357
357
  #
358
358
  # If we did it that way, then we'd create a new instance, then appy the
@@ -404,7 +404,7 @@ module RubyMotionQuery
404
404
 
405
405
  def from_bottom
406
406
  if @view && (sv = @view.superview)
407
- sv.size.height - bottom
407
+ sv.bounds.size.height - bottom
408
408
  end
409
409
  end
410
410
  alias :fb :from_bottom
@@ -413,15 +413,15 @@ module RubyMotionQuery
413
413
  @width
414
414
  end
415
415
  alias :w :width
416
-
416
+
417
417
  def height
418
418
  @height
419
419
  end
420
420
  alias :h :height
421
421
 
422
422
  def z_order
423
- if @view
424
- @view.superview.subviews.to_a.index(@view) # is there a better way??
423
+ if @view && (sv = @view.superview)
424
+ sv.subviews.to_a.index(@view) # is there a better way??
425
425
  end
426
426
  end
427
427
 
@@ -515,17 +515,17 @@ module RubyMotionQuery
515
515
  wh = i_f_to_s(rmq.app.window.size.height.round(2))
516
516
 
517
517
  if @view && (sv = @view.superview)
518
- sw = i_f_to_s(sv.size.width.round(2))
519
- sh = i_f_to_s(sv.size.height.round(2))
518
+ sw = i_f_to_s(sv.bounds.size.width.round(2))
519
+ sh = i_f_to_s(sv.bounds.size.height.round(2))
520
520
  end
521
521
 
522
522
  out = %(
523
- *****************---*******---**************************
523
+ *****************---*******---**************************
524
524
  * | | * window
525
525
  * #{ t} top | * {w: #{ww}, h: #{wh}}
526
526
  * | | *
527
- * --- | * superview
528
- * ***************|***** --- * {w: #{sw}, h: #{sh}}
527
+ * --- | * superview
528
+ * ***************|***** --- * {w: #{sw}, h: #{sh}}
529
529
  * * | * | *
530
530
  * * | * | *
531
531
  * * #{ b} bottom * | * view
@@ -19,6 +19,13 @@ module RubyMotionQuery
19
19
  @view.titleColor
20
20
  end
21
21
 
22
+ def color_highlighted=(value)
23
+ @view.setTitleColor(value, forState: UIControlStateHighlighted)
24
+ end
25
+ def color_highlighted
26
+ @view.titleColorforState(UIControlStateHighlighted)
27
+ end
28
+
22
29
  def tint_color=(value)
23
30
  @view.tintColor = value
24
31
  end
@@ -1,9 +1,20 @@
1
1
  module RubyMotionQuery
2
2
  module Stylers
3
- class UITextViewStyler < UIViewStyler
3
+ class UITextViewStyler < UIScrollViewStyler
4
4
 
5
- def font=(value) ; @view.font = value ; end
6
- def font ; @view.font ; end
5
+ def text ; view.text ; end
6
+ def text=(v) ; view.text = v ; end
7
+
8
+ def attributed_text ; view.attributedText ; end
9
+ def attributed_text=(v) ; view.attributedText = v ; end
10
+
11
+ def font ; view.font ; end
12
+ def font=(v) ; view.font = v ; end
13
+
14
+ def text_color ; view.textColor ; end
15
+ def text_color=(v) ; view.textColor = v ; end
16
+ alias :color :text_color
17
+ alias :color= :text_color=
7
18
 
8
19
  end
9
20
  end
@@ -77,11 +77,19 @@ module RubyMotionQuery
77
77
  alias :parent :superview
78
78
 
79
79
  def super_height
80
- @view.superview.frame.size.height
80
+ if @view.superview
81
+ @view.superview.frame.size.height
82
+ else
83
+ 0
84
+ end
81
85
  end
82
86
 
83
87
  def super_width
84
- @view.superview.frame.size.width
88
+ if @view.superview
89
+ @view.superview.frame.size.width
90
+ else
91
+ 0
92
+ end
85
93
  end
86
94
 
87
95
  def tag(tags)
@@ -363,6 +371,7 @@ module RubyMotionQuery
363
371
  end
364
372
 
365
373
  def corner_radius=(value = 2)
374
+ @view.clipsToBounds = true
366
375
  @view.layer.cornerRadius = value
367
376
  end
368
377
 
@@ -387,6 +396,9 @@ module RubyMotionQuery
387
396
  @view.rmq_data.validation_errors = values
388
397
  end
389
398
 
399
+ def alpha ; view.alpha ; end
400
+ def alpha=(v) ; view.alpha = v ; end
401
+
390
402
  end
391
403
  end
392
404
  end
@@ -75,9 +75,17 @@ module RubyMotionQuery
75
75
  when UINavigationBar then Stylers::UINavigationBarStyler.new(view)
76
76
  when UIScrollView then Stylers::UIScrollViewStyler.new(view)
77
77
  # TODO, all the controls are done, but missing some views, add
78
- when UIControl then Stylers::UIControlStyler.new(view)
79
78
  else
80
- Stylers::UIViewStyler.new(view)
79
+ if view.respond_to?(:rmq_styler)
80
+ # If you're creating an RMQ plug-in that is a view you can set your styler by adding this method
81
+ view.rmq_styler
82
+ else
83
+ if view.is_a?(UIControl)
84
+ Stylers::UIControlStyler.new(view)
85
+ else
86
+ Stylers::UIViewStyler.new(view)
87
+ end
88
+ end
81
89
  end
82
90
  end
83
91
  end
@@ -92,6 +100,7 @@ module RubyMotionQuery
92
100
  begin
93
101
  stylesheet.public_send(style_name, styler_for(view))
94
102
  view.rmq_data.style_name = style_name
103
+ view.rmq_style_applied
95
104
  rescue NoMethodError => e
96
105
  if e.message =~ /.*#{style_name.to_s}.*/
97
106
  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"
@@ -171,43 +180,45 @@ module RubyMotionQuery
171
180
  end
172
181
 
173
182
  def four_inch?
174
- RMQ.device.four_inch?
183
+ device.four_inch?
175
184
  end
176
185
 
177
186
  def retina?
178
- RMQ.device.retina?
187
+ device.retina?
179
188
  end
180
189
 
181
190
  def window
182
191
  RMQ.app.window
183
192
  end
184
193
 
185
- # TODO, cache, then clear when orientation changes
194
+ # @deprecated - use device_width
186
195
  def app_width
187
- portrait? ? app_size.width : app_size.height
196
+ device.width
188
197
  end
198
+ alias :device_width :app_width
189
199
 
190
- # TODO, cache, then clear when orientation changes
200
+ # @deprecated - use device_height
191
201
  def app_height
192
- portrait? ? app_size.height : app_size.width
202
+ device.height
193
203
  end
204
+ alias :device_width :app_width
194
205
 
206
+ # @deprecated - use device_width and device_height in your stylesheets
195
207
  def app_size
196
- device.screen.applicationFrame.size
208
+ CGSizeMake(device.width, device.height)
197
209
  end
198
210
 
199
- # TODO, cache, then clear when orientation changes
200
211
  def screen_width
201
- portrait? ? screen_size.width : screen_size.height
212
+ device.screen_width
202
213
  end
203
214
 
204
- # TODO, cache, then clear when orientation changes
205
215
  def screen_height
206
- portrait? ? screen_size.height : screen_size.width
216
+ device.screen_height
207
217
  end
208
218
 
219
+ # @deprecated - use screen_width and screen_height in your stylesheets
209
220
  def screen_size
210
- device.screen.bounds.size
221
+ CGSizeMake(screen_width, screen_height)
211
222
  end
212
223
 
213
224
  def content_width
@@ -24,7 +24,7 @@ module RubyMotionQuery
24
24
  selected.each do |selected_view|
25
25
  created = false
26
26
  appended = false
27
-
27
+ built = false
28
28
 
29
29
  if view_or_constant.is_a?(UIView)
30
30
  new_view = view_or_constant
@@ -33,7 +33,14 @@ module RubyMotionQuery
33
33
  new_view = create_view(view_or_constant, opts)
34
34
  end
35
35
 
36
- new_view.rmq_data.view_controller = self.weak_view_controller
36
+ rmq_data = new_view.rmq_data
37
+
38
+ unless rmq_data.built
39
+ rmq_data.built = true # build only once
40
+ built = true
41
+ end
42
+
43
+ rmq_data.view_controller = self.weak_view_controller
37
44
 
38
45
  subviews_added << new_view
39
46
 
@@ -53,7 +60,7 @@ module RubyMotionQuery
53
60
  new_view.rmq_did_create(self.wrap(new_view))
54
61
  new_view.rmq_created
55
62
  end
56
- new_view.rmq_build
63
+ new_view.rmq_build if built
57
64
  new_view.rmq_appended if appended
58
65
 
59
66
  if self.stylesheet
@@ -1,5 +1,5 @@
1
1
  module RubyMotionQuery
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
 
4
4
  class RMQ
5
5
  def version
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_motion_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Werth
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-13 00:00:00.000000000 Z
12
+ date: 2014-10-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon
@@ -151,4 +151,3 @@ signing_key:
151
151
  specification_version: 4
152
152
  summary: RubyMotionQuery - RMQ
153
153
  test_files: []
154
- has_rdoc: