ruby_motion_query 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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: