green_shoes 0.243.0 → 0.255.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/green_shoes.rb +4 -0
- data/lib/shoes/app.rb +47 -28
- data/lib/shoes/basic.rb +13 -1
- data/lib/shoes/helper_methods.rb +16 -9
- data/lib/shoes/ruby.rb +3 -2
- data/lib/shoes/text.rb +15 -0
- data/samples/sample15.rb +6 -3
- data/samples/sample35.rb +2 -0
- data/snapshots/sample15.png +0 -0
- data/static/manual-en.txt +20 -75
- metadata +29 -48
data/README.md
CHANGED
@@ -35,7 +35,7 @@ Since Green Shoes is a Ruby Gem, all you need to install are:
|
|
35
35
|
|
36
36
|
1. [Ruby](http://ruby-lang.org) 1.9 or above
|
37
37
|
2. [Gems](http://rubygems.org) 1.5 or above
|
38
|
-
3. [
|
38
|
+
3. [ruby-gtk2 package](http://ruby-gnome2.sourceforge.jp/) 0.90.7 or above
|
39
39
|
|
40
40
|
Once you have all three requirements, you can simply install with this command:
|
41
41
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.255.0
|
data/lib/green_shoes.rb
CHANGED
@@ -25,6 +25,10 @@ module Shoes
|
|
25
25
|
parenleft parenright minus asciicircum backslash equal asciitilde bar grave at braceleft
|
26
26
|
bracketleft braceright bracketright plus asterisk semicolon colon less greater question
|
27
27
|
comma period slash backslash space]
|
28
|
+
LINECAP = {curve: Cairo::LineCap::ROUND, rect: Cairo::LineCap::BUTT, project: Cairo::LineCap::SQUARE}
|
29
|
+
SPAN_FORM = {emphasis: :style, family: :font_family, weight: :weight, rise: :rise,
|
30
|
+
strikethrough: :strikethrough, strikecolor: :strikethrough_color, underline: :underline, undercolor: :underline_color}
|
31
|
+
WRAP = {word: Pango::WRAP_WORD, char: Pango::WRAP_CHAR, trim: Pango::ELLIPSIZE_END}
|
28
32
|
end
|
29
33
|
|
30
34
|
class Object
|
data/lib/shoes/app.rb
CHANGED
@@ -29,9 +29,9 @@ class Shoes
|
|
29
29
|
end
|
30
30
|
|
31
31
|
attr_accessor :cslot, :cmask, :top_slot, :contents, :canvas, :app, :mccs, :mrcs, :mmcs,
|
32
|
-
:mhcs, :mlcs, :shcs, :mcs, :win, :swin, :width_pre, :height_pre, :order, :dics, :fronts, :backs
|
32
|
+
:mhcs, :mlcs, :shcs, :mcs, :win, :swin, :width_pre, :height_pre, :order, :dics, :fronts, :backs, :focusables, :focus_ele
|
33
33
|
attr_writer :mouse_button, :mouse_pos
|
34
|
-
attr_reader :link_style, :linkhover_style, :animates, :owner, :textcursors, :textmarkers
|
34
|
+
attr_reader :link_style, :linkhover_style, :animates, :owner, :textcursors, :textmarkers, :location
|
35
35
|
|
36
36
|
def visit url
|
37
37
|
if url =~ /^(http|https):\/\//
|
@@ -45,7 +45,7 @@ class Shoes
|
|
45
45
|
end
|
46
46
|
else
|
47
47
|
timer 0.001 do
|
48
|
-
$urls.each{|k, v| clear{init_app_vars; v.call self, $1} if k =~ url}
|
48
|
+
$urls.each{|k, v| clear{init_app_vars; @location = url; v.call self, $1} if k =~ url}
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -55,7 +55,8 @@ class Shoes
|
|
55
55
|
slot_with_scrollbar Stack, args, &blk
|
56
56
|
else
|
57
57
|
args[:app] = self
|
58
|
-
|
58
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
59
|
+
Stack.new(slot_attributes(args), &blk).tap{|s| s.click &click_proc if click_proc}
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -64,7 +65,8 @@ class Shoes
|
|
64
65
|
slot_with_scrollbar Flow, args, &blk
|
65
66
|
else
|
66
67
|
args[:app] = self
|
67
|
-
|
68
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
69
|
+
Flow.new(slot_attributes(args), &blk).tap{|s| s.click &click_proc if click_proc}
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
@@ -114,6 +116,10 @@ class Shoes
|
|
114
116
|
args[:markup] = msg.map(&:to_s).join
|
115
117
|
args[:markup] = fg(args[:markup], tr_color(args[:stroke])) if args[:stroke]
|
116
118
|
args[:markup] = bg(args[:markup], tr_color(args[:fill])) if args[:fill]
|
119
|
+
form = {}
|
120
|
+
args.each{|k, v| form.merge!({k => v}) if SPAN_FORM[k]}
|
121
|
+
args[:markup] = span(args[:markup], form) unless form.empty?
|
122
|
+
SPAN_FORM.keys.+([:stroke, :fill]).each{|k| args.delete k}
|
117
123
|
text, attr_list = make_pango_attr args[:markup]
|
118
124
|
args[:size] ||= font_size
|
119
125
|
args[:font] ||= (@font_family or 'sans')
|
@@ -132,7 +138,7 @@ class Shoes
|
|
132
138
|
if args[:create_real] or !layout_control
|
133
139
|
args[:width] = 1 if args[:width] <= 0
|
134
140
|
layout, context, surface =
|
135
|
-
make_pango_layout args[:size], args[:width], args[:height], args[:align], args[:font], text, attr_list
|
141
|
+
make_pango_layout args[:size], args[:width], args[:height], args[:align], args[:font], args[:justify], args[:leading], args[:wrap], text, attr_list
|
136
142
|
context.show_pango_layout layout
|
137
143
|
context.show_page
|
138
144
|
|
@@ -163,6 +169,7 @@ class Shoes
|
|
163
169
|
def image name, args={}
|
164
170
|
args = basic_attributes args
|
165
171
|
args[:full_width] = args[:full_height] = 0
|
172
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
166
173
|
if name =~ /^(http|https):\/\//
|
167
174
|
tmpname = File.join(Dir.tmpdir, "__green_shoes_#{Time.now.to_f}.png")
|
168
175
|
d = download name, save: tmpname
|
@@ -183,7 +190,10 @@ class Shoes
|
|
183
190
|
img.show_now
|
184
191
|
@canvas.remove img if args[:hidden]
|
185
192
|
args[:real], args[:app] = img, self
|
186
|
-
Image.new(args).tap
|
193
|
+
Image.new(args).tap do |s|
|
194
|
+
@dics.push([s, d, tmpname]) if downloading
|
195
|
+
s.click &click_proc if click_proc
|
196
|
+
end
|
187
197
|
end
|
188
198
|
|
189
199
|
def imagesize name
|
@@ -192,6 +202,7 @@ class Shoes
|
|
192
202
|
|
193
203
|
def button name, args={}
|
194
204
|
args = basic_attributes args
|
205
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
195
206
|
b = Gtk::Button.new name
|
196
207
|
b.set_size_request args[:width], args[:height] if args[:width] > 0 and args[:height] > 0
|
197
208
|
b.signal_connect "clicked" do
|
@@ -200,11 +211,12 @@ class Shoes
|
|
200
211
|
@canvas.put b, args[:left], args[:top]
|
201
212
|
b.show_now
|
202
213
|
args[:real], args[:text], args[:app] = b, name, self
|
203
|
-
@_b = Button.new
|
214
|
+
@_b = Button.new(args).tap{|s| s.click &click_proc if click_proc}
|
204
215
|
end
|
205
216
|
|
206
217
|
def check args={}
|
207
218
|
args = basic_attributes args
|
219
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
208
220
|
cb = Gtk::CheckButton.new
|
209
221
|
cb.active = true if args[:checked]
|
210
222
|
cb.signal_connect "clicked" do
|
@@ -213,7 +225,7 @@ class Shoes
|
|
213
225
|
@canvas.put cb, args[:left], args[:top]
|
214
226
|
cb.show_now
|
215
227
|
args[:real], args[:app] = cb, self
|
216
|
-
@_cb = Check.new
|
228
|
+
@_cb = Check.new(args).tap{|s| s.click &click_proc if click_proc}
|
217
229
|
end
|
218
230
|
|
219
231
|
def radio *attrs
|
@@ -221,6 +233,7 @@ class Shoes
|
|
221
233
|
group = attrs.first unless attrs.empty?
|
222
234
|
group = group ? (@radio_groups[group] ||= Gtk::RadioButton.new) : cslot.radio_group
|
223
235
|
args = basic_attributes args
|
236
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
224
237
|
rb = Gtk::RadioButton.new group
|
225
238
|
rb.active = true if args[:checked]
|
226
239
|
rb.signal_connect "clicked" do
|
@@ -229,14 +242,16 @@ class Shoes
|
|
229
242
|
@canvas.put rb, args[:left], args[:top]
|
230
243
|
rb.show_now
|
231
244
|
args[:real], args[:app] = rb, self
|
232
|
-
@_rb = Radio.new
|
245
|
+
@_rb = Radio.new(args).tap{|s| s.click &click_proc if click_proc}
|
233
246
|
end
|
234
247
|
|
235
248
|
def edit_line args={}
|
236
249
|
args = basic_attributes args
|
237
250
|
args[:width] = 200 if args[:width].zero?
|
238
251
|
args[:height] = 28 if args[:height].zero?
|
252
|
+
(change_proc = args[:change]; args.delete :change) if args[:change]
|
239
253
|
el = Gtk::Entry.new
|
254
|
+
el.visibility = false if args[:secret]
|
240
255
|
el.text = args[:text].to_s
|
241
256
|
el.set_size_request args[:width], args[:height]
|
242
257
|
el.signal_connect "changed" do
|
@@ -245,13 +260,14 @@ class Shoes
|
|
245
260
|
@canvas.put el, args[:left], args[:top]
|
246
261
|
el.show_now
|
247
262
|
args[:real], args[:app] = el, self
|
248
|
-
@_el = EditLine.new
|
263
|
+
@_el = EditLine.new(args).tap{|s| s.change &change_proc}
|
249
264
|
end
|
250
265
|
|
251
266
|
def edit_box args={}
|
252
267
|
args = basic_attributes args
|
253
268
|
args[:width] = 200 if args[:width].zero?
|
254
269
|
args[:height] = 108 if args[:height].zero?
|
270
|
+
(change_proc = args[:change]; args.delete :change) if args[:change]
|
255
271
|
tv = Gtk::TextView.new
|
256
272
|
tv.wrap_mode = Gtk::TextTag::WRAP_WORD
|
257
273
|
tv.buffer.text = args[:text].to_s
|
@@ -269,13 +285,14 @@ class Shoes
|
|
269
285
|
@canvas.put eb, args[:left], args[:top]
|
270
286
|
eb.show_all
|
271
287
|
args[:real], args[:app], args[:textview] = eb, self, tv
|
272
|
-
@_eb = EditBox.new
|
288
|
+
@_eb = EditBox.new(args).tap{|s| s.change &change_proc}
|
273
289
|
end
|
274
290
|
|
275
291
|
def list_box args={}
|
276
292
|
args = basic_attributes args
|
277
293
|
args[:width] = 200 if args[:width].zero?
|
278
294
|
args[:height] = 28 if args[:height].zero?
|
295
|
+
(change_proc = args[:change]; args.delete :change) if args[:change]
|
279
296
|
cb = Gtk::ComboBox.new
|
280
297
|
args[:items] ||= []
|
281
298
|
args[:items].each{|item| cb.append_text item.to_s}
|
@@ -287,7 +304,7 @@ class Shoes
|
|
287
304
|
@canvas.put cb, args[:left], args[:top]
|
288
305
|
cb.show_now
|
289
306
|
args[:real], args[:app] = cb, self
|
290
|
-
@_lb = ListBox.new
|
307
|
+
@_lb = ListBox.new(args).tap{|s| s.change &change_proc}
|
291
308
|
end
|
292
309
|
|
293
310
|
def animate n=10, repaint=true, &blk
|
@@ -347,6 +364,7 @@ class Shoes
|
|
347
364
|
else args[:left], args[:top], args[:width], args[:height] = attrs
|
348
365
|
end
|
349
366
|
args = basic_attributes args
|
367
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
350
368
|
args[:width].zero? ? (args[:width] = args[:radius] * 2) : (args[:radius] = args[:width]/2.0)
|
351
369
|
args[:height] = args[:width] if args[:height].zero?
|
352
370
|
args[:strokewidth] = ( args[:strokewidth] or strokewidth or 1 )
|
@@ -373,7 +391,7 @@ class Shoes
|
|
373
391
|
context.set_source gp
|
374
392
|
context.set_line_width args[:strokewidth]
|
375
393
|
context.arc args[:radius]+mx, args[:radius]-my, args[:radius]-args[:strokewidth]/2.0, args[:angle1], args[:angle2]
|
376
|
-
context.set_line_cap cap
|
394
|
+
context.set_line_cap(LINECAP[args[:cap]] || cap)
|
377
395
|
context.stroke
|
378
396
|
|
379
397
|
img = create_tmp_png surface
|
@@ -382,11 +400,12 @@ class Shoes
|
|
382
400
|
img.show_now
|
383
401
|
@canvas.remove img if args[:hidden]
|
384
402
|
args[:real], args[:app] = img, self
|
385
|
-
Oval.new
|
403
|
+
Oval.new(args).tap{|s| s.click &click_proc if click_proc}
|
386
404
|
end
|
387
405
|
|
388
|
-
def arc l, t, w, h, a1, a2
|
389
|
-
|
406
|
+
def arc l, t, w, h, a1, a2, args={}
|
407
|
+
args.merge!({angle1: a1, angle2: a2})
|
408
|
+
oval l, t, w, h, args
|
390
409
|
end
|
391
410
|
|
392
411
|
def rect *attrs
|
@@ -403,6 +422,7 @@ class Shoes
|
|
403
422
|
w, h, mx, my = set_rotate_angle(args)
|
404
423
|
|
405
424
|
args = basic_attributes args
|
425
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
406
426
|
surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, w, h
|
407
427
|
context = Cairo::Context.new surface
|
408
428
|
|
@@ -428,7 +448,7 @@ class Shoes
|
|
428
448
|
img.show_now
|
429
449
|
@canvas.remove img if args[:hidden]
|
430
450
|
args[:real], args[:app] = img, self
|
431
|
-
Rect.new
|
451
|
+
Rect.new(args).tap{|s| s.click &click_proc if click_proc}
|
432
452
|
end
|
433
453
|
|
434
454
|
def line *attrs
|
@@ -446,6 +466,7 @@ class Shoes
|
|
446
466
|
args[:height] += cw
|
447
467
|
|
448
468
|
args = basic_attributes args
|
469
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
449
470
|
surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, args[:width]+sw, args[:height]+sw
|
450
471
|
context = Cairo::Context.new surface
|
451
472
|
|
@@ -481,14 +502,14 @@ class Shoes
|
|
481
502
|
args[:top] = sy
|
482
503
|
end
|
483
504
|
|
484
|
-
context.set_line_cap cap
|
505
|
+
context.set_line_cap(LINECAP[args[:cap]] || cap)
|
485
506
|
context.stroke
|
486
507
|
img = create_tmp_png surface
|
487
508
|
@canvas.put img, (args[:left]-=cw), (args[:top]-=cw)
|
488
509
|
img.show_now
|
489
510
|
@canvas.remove img if args[:hidden]
|
490
511
|
args[:real], args[:app] = img, self
|
491
|
-
Line.new
|
512
|
+
Line.new(args).tap{|s| s.click &click_proc if click_proc}
|
492
513
|
end
|
493
514
|
|
494
515
|
def shapebase klass, args
|
@@ -499,10 +520,12 @@ class Shoes
|
|
499
520
|
w, h, mx, my = set_rotate_angle(args)
|
500
521
|
|
501
522
|
args = basic_attributes args
|
523
|
+
(click_proc = args[:click]; args.delete :click) if args[:click]
|
502
524
|
surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, w, h
|
503
525
|
context = Cairo::Context.new surface
|
504
526
|
args[:strokewidth] = ( args[:strokewidth] or strokewidth or 1 )
|
505
527
|
context.set_line_width args[:strokewidth]
|
528
|
+
context.set_line_cap(LINECAP[args[:cap]] || cap)
|
506
529
|
|
507
530
|
context.rotate @context_angle
|
508
531
|
|
@@ -527,7 +550,7 @@ class Shoes
|
|
527
550
|
img.show_now
|
528
551
|
@canvas.remove img if args[:hidden]
|
529
552
|
args[:real], args[:app] = img, self
|
530
|
-
klass.new
|
553
|
+
klass.new(args).tap{|s| s.click &click_proc if click_proc}
|
531
554
|
end
|
532
555
|
|
533
556
|
def shape args={}, &blk
|
@@ -753,14 +776,10 @@ class Shoes
|
|
753
776
|
|
754
777
|
def cap *line_cap
|
755
778
|
@line_cap = case line_cap.first
|
756
|
-
when :curve
|
757
|
-
|
758
|
-
when :rect
|
759
|
-
Cairo::LineCap::BUTT
|
760
|
-
when :project
|
761
|
-
Cairo::LineCap::SQUARE
|
779
|
+
when :curve, :rect, :project
|
780
|
+
LINECAP[line_cap.first]
|
762
781
|
else
|
763
|
-
@line_cap ||=
|
782
|
+
@line_cap ||= LINECAP[:rect]
|
764
783
|
end
|
765
784
|
end
|
766
785
|
end
|
data/lib/shoes/basic.rb
CHANGED
@@ -10,6 +10,7 @@ class Shoes
|
|
10
10
|
(@app.order << self) unless @noorder or self.is_a?(EditBox) or self.is_a?(EditLine)
|
11
11
|
(@app.cslot.contents << self) unless @nocontrol or @app.cmask
|
12
12
|
(@app.cmask.contents << self) if @app.cmask
|
13
|
+
(@app.focusables << self) if self.is_a? Native
|
13
14
|
@parent = @app.cslot
|
14
15
|
|
15
16
|
Basic.class_eval do
|
@@ -247,6 +248,10 @@ class Shoes
|
|
247
248
|
def change obj, &blk
|
248
249
|
obj.signal_connect "changed", &proc{parent.append{blk[self]}} if blk
|
249
250
|
end
|
251
|
+
|
252
|
+
def focus
|
253
|
+
@app.focus_ele = self
|
254
|
+
end
|
250
255
|
end
|
251
256
|
class Button < Native
|
252
257
|
def click &blk
|
@@ -263,7 +268,12 @@ class Shoes
|
|
263
268
|
end
|
264
269
|
end
|
265
270
|
class Check < ToggleButton; end
|
266
|
-
class Radio < ToggleButton
|
271
|
+
class Radio < ToggleButton
|
272
|
+
def focus
|
273
|
+
self.checked = true
|
274
|
+
super
|
275
|
+
end
|
276
|
+
end
|
267
277
|
|
268
278
|
class EditLine < Native
|
269
279
|
def text
|
@@ -330,5 +340,7 @@ class Shoes
|
|
330
340
|
def fraction= n
|
331
341
|
real.fraction = n
|
332
342
|
end
|
343
|
+
|
344
|
+
undef_method :focus
|
333
345
|
end
|
334
346
|
end
|
data/lib/shoes/helper_methods.rb
CHANGED
@@ -36,9 +36,9 @@ class Shoes
|
|
36
36
|
|
37
37
|
module Mod2
|
38
38
|
def init_app_vars
|
39
|
-
@contents, @mccs, @mrcs, @mmcs, @mhcs, @mlcs, @shcs, @mcs, @order, @dics, @animates, @radio_groups, @textcursors, @textmarkers, @fronts, @backs =
|
40
|
-
[], [], [], [], [], [], [], [], [], [], [], {}, {}, {}, [], []
|
41
|
-
@cmask = nil
|
39
|
+
@contents, @mccs, @mrcs, @mmcs, @mhcs, @mlcs, @shcs, @mcs, @order, @dics, @animates, @radio_groups, @textcursors, @textmarkers, @fronts, @backs, @focusables =
|
40
|
+
[], [], [], [], [], [], [], [], [], [], [], {}, {}, {}, [], [], []
|
41
|
+
@cmask, @focus_ele, @location = nil, nil, '/'
|
42
42
|
@mouse_button, @mouse_pos = 0, [0, 0]
|
43
43
|
@fill, @stroke = black, black
|
44
44
|
end
|
@@ -107,10 +107,10 @@ class Shoes
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def make_textcursor_layout tb
|
110
|
-
markup, size, width, height, align, font =
|
111
|
-
%w[@markup @size @width @height @align @font].map{|v| tb.instance_variable_get v}
|
110
|
+
markup, size, width, height, align, font, justify, leading, wrap =
|
111
|
+
%w[@markup @size @width @height @align @font @justify @leading @wrap].map{|v| tb.instance_variable_get v}
|
112
112
|
text, attr_list = make_pango_attr markup
|
113
|
-
make_pango_layout(size, width, height, align, font, text, attr_list)[0]
|
113
|
+
make_pango_layout(size, width, height, align, font, justify, leading, wrap, text, attr_list)[0]
|
114
114
|
end
|
115
115
|
|
116
116
|
def make_pango_attr markup
|
@@ -120,14 +120,19 @@ class Shoes
|
|
120
120
|
return text, attr_list
|
121
121
|
end
|
122
122
|
|
123
|
-
def make_pango_layout size, width, height, align, font, text, attr_list
|
123
|
+
def make_pango_layout size, width, height, align, font, justify, leading, wrap, text, attr_list
|
124
|
+
leading ||= 4
|
125
|
+
wrap ||= 'word'
|
126
|
+
wrap == 'trim' ? (wrap, ellipsize = nil, WRAP[wrap.to_sym]) : (wrap, ellipsize = WRAP[wrap.to_sym], nil)
|
124
127
|
surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, width, height
|
125
128
|
context = Cairo::Context.new surface
|
126
129
|
layout = context.create_pango_layout
|
127
130
|
layout.width = width * Pango::SCALE
|
128
|
-
layout.wrap =
|
129
|
-
layout.
|
131
|
+
layout.wrap = wrap if wrap
|
132
|
+
layout.ellipsize = ellipsize if ellipsize
|
133
|
+
layout.spacing = leading * Pango::SCALE
|
130
134
|
layout.text = text
|
135
|
+
layout.justify = justify
|
131
136
|
layout.alignment = eval "Pango::ALIGN_#{align.upcase}"
|
132
137
|
fd = Pango::FontDescription.new
|
133
138
|
fd.family = font
|
@@ -204,6 +209,8 @@ class Shoes
|
|
204
209
|
repaint_all_by_order app
|
205
210
|
repaint_textcursors app
|
206
211
|
app.canvas.set_size 0, scrollable_height unless(app.prjct or app.trvw)
|
212
|
+
n = app.focusables.index app.focus_ele
|
213
|
+
app.canvas.focus_chain = (app.focusables[n..-1] + app.focusables[0...n]).map(&:real) if n
|
207
214
|
true
|
208
215
|
end
|
209
216
|
|
data/lib/shoes/ruby.rb
CHANGED
@@ -13,7 +13,7 @@ class Object
|
|
13
13
|
Gtk::Dialog::MODAL,
|
14
14
|
Gtk::MessageDialog::INFO,
|
15
15
|
Gtk::MessageDialog::BUTTONS_OK,
|
16
|
-
msg
|
16
|
+
msg.to_s
|
17
17
|
)
|
18
18
|
dialog.title = "Green Shoes says:"
|
19
19
|
dialog.run
|
@@ -36,7 +36,7 @@ class Object
|
|
36
36
|
ret
|
37
37
|
end
|
38
38
|
|
39
|
-
def ask msg
|
39
|
+
def ask msg, args={}
|
40
40
|
dialog = Gtk::Dialog.new(
|
41
41
|
"Green Shoes asks:",
|
42
42
|
get_win,
|
@@ -46,6 +46,7 @@ class Object
|
|
46
46
|
)
|
47
47
|
dialog.vbox.add Gtk::Label.new msg
|
48
48
|
dialog.vbox.add(el = Gtk::Entry.new)
|
49
|
+
el.visibility = false if args[:secret]
|
49
50
|
dialog.set_size_request 300, 100
|
50
51
|
dialog.show_all
|
51
52
|
ret = dialog.run == Gtk::Dialog::RESPONSE_ACCEPT ? el.text : nil
|
data/lib/shoes/text.rb
CHANGED
@@ -22,6 +22,21 @@ class Shoes
|
|
22
22
|
def font name
|
23
23
|
@font_family = name
|
24
24
|
end
|
25
|
+
|
26
|
+
def span str, args={}
|
27
|
+
tmp = args.map do |k, v|
|
28
|
+
v *= 1000 if v.is_a?(Integer) && k != :weight
|
29
|
+
(v = v == 'single' ? 'yes' : 'no') if k == :strikethrough
|
30
|
+
k = SPAN_FORM[k] if SPAN_FORM[k]
|
31
|
+
if k.to_s.index('_color') and v.is_a?(Array)
|
32
|
+
v = v.map{|x| (x * 255).to_i} if v[0].is_a?(Float)
|
33
|
+
v = ("#%2s%2s%2s" % v.map{|x| x.to_s 16}).gsub(' ', '0')
|
34
|
+
end
|
35
|
+
[k, v]
|
36
|
+
end
|
37
|
+
form = tmp.map{|k, v| "#{k}='#{v}'"}.join(' ')
|
38
|
+
"<span #{form}>#{str}</span>"
|
39
|
+
end
|
25
40
|
end
|
26
41
|
|
27
42
|
class Text
|
data/samples/sample15.rb
CHANGED
@@ -3,15 +3,18 @@ require '../lib/green_shoes'
|
|
3
3
|
TEXT =<<EOS
|
4
4
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, \
|
5
5
|
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
6
|
-
|
7
6
|
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris \
|
8
7
|
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in \
|
9
8
|
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
10
|
-
|
11
9
|
Excepteur sint occaecat cupidatat non proident, sunt in \
|
12
10
|
culpa qui officia deserunt mollit anim id est laborum.
|
13
11
|
EOS
|
14
12
|
|
13
|
+
NL = "\n"
|
14
|
+
|
15
15
|
Shoes.app do
|
16
|
-
|
16
|
+
lines = TEXT.split("\n")
|
17
|
+
para lines[0], NL
|
18
|
+
para lines[1], NL, justify: true
|
19
|
+
para lines[2], NL, leading: -5
|
17
20
|
end
|
data/samples/sample35.rb
CHANGED
@@ -17,6 +17,7 @@ class PhotoFrame < Shoes
|
|
17
17
|
para fg(strong('She is Loogink.'), white),
|
18
18
|
'->', link(strong('Cy')){visit '/cy'},
|
19
19
|
margin: 10
|
20
|
+
p app.location
|
20
21
|
end
|
21
22
|
|
22
23
|
def cy
|
@@ -25,6 +26,7 @@ class PhotoFrame < Shoes
|
|
25
26
|
para fg(strong('He is Cy.'), gray), ' ->',
|
26
27
|
link(strong('loogink')){visit '/loogink'},
|
27
28
|
margin: 10
|
29
|
+
p app.location
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
data/snapshots/sample15.png
CHANGED
Binary file
|
data/static/manual-en.txt
CHANGED
@@ -576,8 +576,6 @@ This section covers:
|
|
576
576
|
If you find yourself paging around a lot and not finding something, give the
|
577
577
|
[[Search]] page a try. It's the quickest way to get around.
|
578
578
|
|
579
|
-
'''Note:''' Green Shoes doesn't support Search page so far.
|
580
|
-
|
581
579
|
After this general reference, there are two other more specific sections:
|
582
580
|
|
583
581
|
* [[Slots]] - covering [[Element.stack]] and [[Element.flow]], the two types of slots.
|
@@ -1028,8 +1026,6 @@ library for parsing HTML.
|
|
1028
1026
|
|
1029
1027
|
Gets a string containing the URL of the current app.
|
1030
1028
|
|
1031
|
-
'''Note:''' Green Shoes doesn't support location method so far.
|
1032
|
-
|
1033
1029
|
=== mouse() » an array of numbers: button, left, top ===
|
1034
1030
|
|
1035
1031
|
Identifies the mouse cursor's location, along with which button is being
|
@@ -1052,8 +1048,6 @@ Gets the app which launched this app. In most cases, this will be `nil`. But
|
|
1052
1048
|
if this app was launched using the [[Element.window]] method, the owner will be
|
1053
1049
|
the app which called `window`.
|
1054
1050
|
|
1055
|
-
'''Note:''' Green Shoes doesn't support owner method so far.
|
1056
|
-
|
1057
1051
|
=== started?() » true or false ===
|
1058
1052
|
|
1059
1053
|
Has the window been fully constructed and displayed? This is useful for
|
@@ -1194,13 +1188,11 @@ element so that its bottom edge and the bottom edge of its slot touch.
|
|
1194
1188
|
|
1195
1189
|
=== :cap » :curve or :rect or :project ===
|
1196
1190
|
|
1197
|
-
For: ''arc,
|
1191
|
+
For: ''arc, line, shape''.
|
1198
1192
|
|
1199
1193
|
Sets the shape of the line endpoint, whether curved or square. See the
|
1200
1194
|
[[Art.cap]] method for more explanation.
|
1201
1195
|
|
1202
|
-
'''Note:''' Green Shoes doesn't support `:cap` style.
|
1203
|
-
|
1204
1196
|
=== :center » true or false ===
|
1205
1197
|
|
1206
1198
|
For: ''arc, image, oval, rect, shape''.
|
@@ -1218,8 +1210,6 @@ For: ''edit_box, edit_line, list_box''.
|
|
1218
1210
|
The `change` event handler is stored in this style. See the [[EditBox.change]]
|
1219
1211
|
method for the edit_box, as an example.
|
1220
1212
|
|
1221
|
-
'''Note:''' Green Shoes doesn't support `:change` style.
|
1222
|
-
|
1223
1213
|
=== :checked » true or false ===
|
1224
1214
|
|
1225
1215
|
For: ''check, radio''.
|
@@ -1236,15 +1226,12 @@ Sets the currently chosen item in the list. More information at
|
|
1236
1226
|
|
1237
1227
|
=== :click » a proc ===
|
1238
1228
|
|
1239
|
-
For: ''arc, arrow,
|
1240
|
-
line, link,
|
1241
|
-
tagline, title''.
|
1229
|
+
For: ''arc, arrow, button, check, flow, image,
|
1230
|
+
line, link, oval, radio, rect, shape, stack, star''.
|
1242
1231
|
|
1243
1232
|
The `click` event handler is stored in this style. See the [[Events.click]]
|
1244
1233
|
method for a description.
|
1245
1234
|
|
1246
|
-
'''Note:''' Green Shoes doesn't support `:click` style.
|
1247
|
-
|
1248
1235
|
=== :curve » a number ===
|
1249
1236
|
|
1250
1237
|
For: ''background, border, rect''.
|
@@ -1279,8 +1266,7 @@ be a bit surprising.
|
|
1279
1266
|
|
1280
1267
|
=== :emphasis » a string ===
|
1281
1268
|
|
1282
|
-
For: ''banner, caption,
|
1283
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1269
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1284
1270
|
|
1285
1271
|
Styles the text with an emphasis (commonly italicized.)
|
1286
1272
|
|
@@ -1290,18 +1276,13 @@ This style recognizes three possible settings:
|
|
1290
1276
|
* "oblique" - the font is slanted, but in a roman style.
|
1291
1277
|
* "italic" - the font is slanted in an italic style.
|
1292
1278
|
|
1293
|
-
'''Note:''' Green Shoes doesn't support `:emphasis` style.
|
1294
|
-
|
1295
1279
|
=== :family » a string ===
|
1296
1280
|
|
1297
|
-
For: ''banner, caption,
|
1298
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1281
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1299
1282
|
|
1300
1283
|
Styles the text with a given font family. The string should contain the family
|
1301
1284
|
name or a comma-separated list of families.
|
1302
1285
|
|
1303
|
-
'''Note:''' Green Shoes doesn't support `:family` style.
|
1304
|
-
|
1305
1286
|
=== :fill » a hex code, a rgb array or a range of either ===
|
1306
1287
|
|
1307
1288
|
For: ''background, banner, border, caption, inscription, para, line, oval,
|
@@ -1393,13 +1374,10 @@ for an example.
|
|
1393
1374
|
|
1394
1375
|
=== :justify » true or false ===
|
1395
1376
|
|
1396
|
-
For: ''banner, caption,
|
1397
|
-
strong, sub, sup, subtitle, tagline, title''
|
1377
|
+
For: ''banner, caption, inscription, para, subtitle, tagline, title''.
|
1398
1378
|
|
1399
1379
|
Evenly spaces the text horizontally.
|
1400
1380
|
|
1401
|
-
'''Note:''' Green Shoes doesn't support `:justify` style.
|
1402
|
-
|
1403
1381
|
=== :kerning » a number ===
|
1404
1382
|
|
1405
1383
|
For: ''banner, caption, code, del, em, ins, inscription, link, para, span,
|
@@ -1415,8 +1393,6 @@ For: ''banner, caption, inscription, para, subtitle, tagline, title''.
|
|
1415
1393
|
|
1416
1394
|
Sets the spacing between lines in a text block. Defaults to 4 pixels.
|
1417
1395
|
|
1418
|
-
'''Note:''' Green Shoes doesn't support `:leading` style.
|
1419
|
-
|
1420
1396
|
=== :left » a number ===
|
1421
1397
|
|
1422
1398
|
For: ''all slots and elements''.
|
@@ -1498,15 +1474,12 @@ left of its slot's right edge by twenty pixels.
|
|
1498
1474
|
|
1499
1475
|
=== :rise » a number ===
|
1500
1476
|
|
1501
|
-
For: ''banner, caption,
|
1502
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1477
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1503
1478
|
|
1504
1479
|
Lifts or plunges the font baseline for some text. For example, a
|
1505
1480
|
[[Element.sup]] has a `:rise` of 10 pixels. Conversely, the [[Element.sub]]
|
1506
1481
|
element has a `:rise` of -10 pixels.
|
1507
1482
|
|
1508
|
-
'''Note:''' Green Shoes doesn't support `:rise` style.
|
1509
|
-
|
1510
1483
|
=== :scroll » true or false ===
|
1511
1484
|
|
1512
1485
|
For: ''flow, stack''.
|
@@ -1543,8 +1516,6 @@ Used for password fields, this setting keeps any characters typed in from
|
|
1543
1516
|
becoming visible on the screen. Instead, a replacement character (such as an
|
1544
1517
|
asterisk) is show for each letter typed.
|
1545
1518
|
|
1546
|
-
'''Note:''' Green Shoes doesn't support `:secret` style.
|
1547
|
-
|
1548
1519
|
=== :size » a number ===
|
1549
1520
|
|
1550
1521
|
For: ''banner, caption, inscription, para, subtitle, tagline, title''.
|
@@ -1595,25 +1566,19 @@ Possible settings are:
|
|
1595
1566
|
|
1596
1567
|
=== :strikecolor » a Shoes::Color ===
|
1597
1568
|
|
1598
|
-
For: ''banner, caption,
|
1599
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1569
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1600
1570
|
|
1601
1571
|
The color used to paint any lines stricken through this text.
|
1602
1572
|
|
1603
|
-
'''Note:''' Green Shoes doesn't support `:strikecolor` style.
|
1604
|
-
|
1605
1573
|
=== :strikethrough » a string ===
|
1606
1574
|
|
1607
|
-
For: ''banner, caption,
|
1608
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1575
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1609
1576
|
|
1610
1577
|
Is this text stricken through? Two options here:
|
1611
1578
|
|
1612
1579
|
* "none" - no strikethrough
|
1613
1580
|
* "single" - a single-line strikethrough.
|
1614
1581
|
|
1615
|
-
'''Note:''' Green Shoes doesn't support `:strikethrough` style.
|
1616
|
-
|
1617
1582
|
=== :stroke » a hex code, a rgb array or a range of either ===
|
1618
1583
|
|
1619
1584
|
For: ''background, banner, border, caption, inscription, para, line, oval,
|
@@ -1647,17 +1612,13 @@ of the slot it contains.
|
|
1647
1612
|
|
1648
1613
|
=== :undercolor » a Shoes::Color ===
|
1649
1614
|
|
1650
|
-
For: ''banner, caption,
|
1651
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1615
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1652
1616
|
|
1653
1617
|
The color used to underline text.
|
1654
1618
|
|
1655
|
-
'''Note:''' Green Shoes doesn't support `:undercolor` style.
|
1656
|
-
|
1657
1619
|
=== :underline » a string ===
|
1658
1620
|
|
1659
|
-
For: ''banner, caption,
|
1660
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1621
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1661
1622
|
|
1662
1623
|
Dictates the style of underline used in the text.
|
1663
1624
|
|
@@ -1669,8 +1630,6 @@ The choices for this setting are:
|
|
1669
1630
|
* "low" - a lower underline, beneath the font baseline. (This is generally recommended only for single characters, particularly when showing keyboard accelerators.)
|
1670
1631
|
* "error" - a wavy underline, usually found indicating a misspelling.
|
1671
1632
|
|
1672
|
-
'''Note:''' Green Shoes doesn't support `:underline` style.
|
1673
|
-
|
1674
1633
|
=== :variant » a string ===
|
1675
1634
|
|
1676
1635
|
For: ''banner, caption, code, del, em, ins, inscription, link, para, span,
|
@@ -1685,8 +1644,7 @@ Vary the font for a group of text. Two choices:
|
|
1685
1644
|
|
1686
1645
|
=== :weight » a string ===
|
1687
1646
|
|
1688
|
-
For: ''banner, caption,
|
1689
|
-
strong, sub, sup, subtitle, tagline, title''.
|
1647
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1690
1648
|
|
1691
1649
|
Set the boldness of the text. Commonly, this style is set to one of the
|
1692
1650
|
following strings:
|
@@ -1701,8 +1659,6 @@ following strings:
|
|
1701
1659
|
|
1702
1660
|
However, you may also pass in the numerical weight directly.
|
1703
1661
|
|
1704
|
-
'''Note:''' Green Shoes doesn't support `:weight` style.
|
1705
|
-
|
1706
1662
|
=== :width » a number ===
|
1707
1663
|
|
1708
1664
|
For: ''all slots and elements''.
|
@@ -1713,8 +1669,7 @@ converted to a percentage (with 0.0 being 0% and 1.0 being 100%.) A width of
|
|
1713
1669
|
|
1714
1670
|
=== :wrap » a string ===
|
1715
1671
|
|
1716
|
-
For: ''banner, caption,
|
1717
|
-
strong, sub, sup, subtitle, tagline, title''
|
1672
|
+
For: ''banner, caption, inscription, para, span, subtitle, tagline, title''.
|
1718
1673
|
|
1719
1674
|
How should the text wrap when it fills its width? Possible options are:
|
1720
1675
|
|
@@ -1722,8 +1677,6 @@ How should the text wrap when it fills its width? Possible options are:
|
|
1722
1677
|
* "char" - Break lines between characters, thus breaking some words.
|
1723
1678
|
* "trim" - Cut the line off with an ellipsis if it goes too long.
|
1724
1679
|
|
1725
|
-
'''Note:''' Green Shoes doesn't support `:wrap` style.
|
1726
|
-
|
1727
1680
|
== Classes List ==
|
1728
1681
|
|
1729
1682
|
There is a complete list of all the classes introduced by Green Shoes.
|
@@ -2304,7 +2257,12 @@ any other radio buttons in the same slot.)
|
|
2304
2257
|
|
2305
2258
|
Creates a Span text fragment, unstyled by default.
|
2306
2259
|
|
2307
|
-
|
2260
|
+
{{{
|
2261
|
+
Shoes.app do
|
2262
|
+
tagline "\n", 'hello ' * 5,
|
2263
|
+
span(em('Green Shoes'), size: 8, rise: 15)
|
2264
|
+
end
|
2265
|
+
}}}
|
2308
2266
|
|
2309
2267
|
=== stack(styles) { ... } » Shoes::Stack ===
|
2310
2268
|
|
@@ -3196,8 +3154,6 @@ When a button is clicked, its `click` block is called. The block is handed
|
|
3196
3154
|
Moves focus to the button. The button will be highlighted and, if the user
|
3197
3155
|
hits Enter, the button will be clicked.
|
3198
3156
|
|
3199
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3200
|
-
|
3201
3157
|
== Check ==
|
3202
3158
|
|
3203
3159
|
Check boxes are clickable square boxes than can be either checked or unchecked.
|
@@ -3278,8 +3234,6 @@ Clicks are sent for both checking and unchecking the box.
|
|
3278
3234
|
Moves focus to the check. The check will be highlighted and, if the user hits
|
3279
3235
|
Enter, the check will be toggled between its checked and unchecked states.
|
3280
3236
|
|
3281
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3282
|
-
|
3283
3237
|
== EditBox ==
|
3284
3238
|
|
3285
3239
|
Edit boxes are wide, rectangular boxes for entering text. On the web, they
|
@@ -3329,8 +3283,6 @@ has changed.
|
|
3329
3283
|
Moves focus to the edit box. The edit box will be highlighted and the user will
|
3330
3284
|
be able to type into the edit box.
|
3331
3285
|
|
3332
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3333
|
-
|
3334
3286
|
=== text() » self ===
|
3335
3287
|
|
3336
3288
|
Return a string of characters which have been typed into the box.
|
@@ -3379,8 +3331,6 @@ has changed.
|
|
3379
3331
|
Moves focus to the edit line. The edit line will be highlighted and the user
|
3380
3332
|
will be able to type into the edit line.
|
3381
3333
|
|
3382
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3383
|
-
|
3384
3334
|
=== text() » self ===
|
3385
3335
|
|
3386
3336
|
Return a string of characters which have been typed into the box.
|
@@ -3517,8 +3467,6 @@ Selects the option in the list box that matches the string given by `item`.
|
|
3517
3467
|
Moves focus to the list box. The list box will be highlighted and, if the user
|
3518
3468
|
hits the up and down arrow keys, other options in the list will be selected.
|
3519
3469
|
|
3520
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3521
|
-
|
3522
3470
|
=== items() » an array of strings ===
|
3523
3471
|
|
3524
3472
|
Returns the complete list of strings that the list box presently shows as its options.
|
@@ -3674,10 +3622,7 @@ Clicks are sent for both marking and unmarking the radio.
|
|
3674
3622
|
|
3675
3623
|
=== focus() » self ===
|
3676
3624
|
|
3677
|
-
Moves focus to the radio. The radio will be highlighted
|
3678
|
-
Enter, the radio will be toggled between its marked and unmarked states.
|
3679
|
-
|
3680
|
-
'''Note:''' Green Shoes doesn't support `focus` method.
|
3625
|
+
Moves focus to the radio. The radio will be highlighted.
|
3681
3626
|
|
3682
3627
|
== Shape ==
|
3683
3628
|
|
metadata
CHANGED
@@ -1,45 +1,35 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: green_shoes
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 243
|
8
|
-
- 0
|
9
|
-
version: 0.243.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.255.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- ashbb
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-07-23 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: gtk2
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &14643048 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
31
22
|
type: :runtime
|
32
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *14643048
|
33
25
|
description: Green Shoes is one of colorful Shoes, written in pure Ruby with Ruby/GTK2.
|
34
26
|
email: ashbbb@gmail.com
|
35
27
|
executables: []
|
36
|
-
|
37
28
|
extensions: []
|
38
|
-
|
39
|
-
extra_rdoc_files:
|
29
|
+
extra_rdoc_files:
|
40
30
|
- LICENSE
|
41
31
|
- README.md
|
42
|
-
files:
|
32
|
+
files:
|
43
33
|
- VERSION
|
44
34
|
- lib/ext/bloops.rb
|
45
35
|
- lib/ext/bloops/bloops.so
|
@@ -309,37 +299,28 @@ files:
|
|
309
299
|
- static/shoes-manual-apps.png
|
310
300
|
- LICENSE
|
311
301
|
- README.md
|
312
|
-
has_rdoc: true
|
313
302
|
homepage: http://github.com/ashbb/green_shoes
|
314
303
|
licenses: []
|
315
|
-
|
316
304
|
post_install_message:
|
317
305
|
rdoc_options: []
|
318
|
-
|
319
|
-
require_paths:
|
306
|
+
require_paths:
|
320
307
|
- lib
|
321
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
308
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
322
309
|
none: false
|
323
|
-
requirements:
|
324
|
-
- -
|
325
|
-
- !ruby/object:Gem::Version
|
326
|
-
|
327
|
-
|
328
|
-
version: "0"
|
329
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - ! '>='
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '0'
|
314
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
330
315
|
none: false
|
331
|
-
requirements:
|
332
|
-
- -
|
333
|
-
- !ruby/object:Gem::Version
|
334
|
-
|
335
|
-
- 0
|
336
|
-
version: "0"
|
316
|
+
requirements:
|
317
|
+
- - ! '>='
|
318
|
+
- !ruby/object:Gem::Version
|
319
|
+
version: '0'
|
337
320
|
requirements: []
|
338
|
-
|
339
321
|
rubyforge_project:
|
340
|
-
rubygems_version: 1.
|
322
|
+
rubygems_version: 1.7.2
|
341
323
|
signing_key:
|
342
324
|
specification_version: 3
|
343
325
|
summary: Green Shoes
|
344
326
|
test_files: []
|
345
|
-
|