scarpe 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/.yardopts +11 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +112 -0
- data/README.md +31 -24
- data/Rakefile +13 -1
- data/docs/yard/catscradle.md +44 -0
- data/docs/yard/template/default/fulldoc/html/setup.rb +13 -0
- data/docs/yard/template/default/layout/html/setup.rb +9 -0
- data/examples/background_with_image.rb +16 -0
- data/examples/bloopsaphone/working/bronx_army_knife.rb +66 -0
- data/examples/bloopsaphone/working/morning_serenity.rb +21 -0
- data/examples/bloopsaphone/working/simpsons_theme_song_by_why.rb +6 -4
- data/examples/button_go_away.rb +1 -1
- data/examples/check.rb +18 -0
- data/examples/clear_and_append.rb +24 -0
- data/examples/download_and_show_image.rb +28 -0
- data/examples/edit_box.rb +3 -5
- data/examples/fonts.rb +2 -2
- data/examples/get_headers.rb +10 -0
- data/examples/highlander.rb +2 -0
- data/examples/link.rb +2 -2
- data/examples/local_fonts.rb +4 -0
- data/examples/local_images.rb +4 -0
- data/examples/motion_events.rb +20 -0
- data/examples/parse_xl_funnies.rb +58 -0
- data/examples/radio/radio.rb +16 -0
- data/examples/radio/radio_groups.rb +18 -0
- data/examples/radio/radio_same_slot.rb +6 -0
- data/examples/ruby_racer.rb +13 -15
- data/examples/selfitude.rb +18 -0
- data/examples/shapes/shapes_fill.rb +4 -3
- data/examples/shoes_school.rb +2 -4
- data/examples/show_hide.rb +6 -0
- data/examples/skip_ci/change_my_audio_source.rb +21 -0
- data/examples/skip_ci/guitar_fretboard.rb +137 -0
- data/examples/video.rb +10 -0
- data/exe/scarpe +42 -66
- data/fonts/Pacifico.ttf +0 -0
- data/lacci/Gemfile +22 -0
- data/lacci/Gemfile.lock +72 -0
- data/lacci/Rakefile +12 -0
- data/lacci/lacci.gemspec +37 -0
- data/lacci/lib/lacci/scarpe_cli.rb +70 -0
- data/lacci/lib/lacci/scarpe_core.rb +21 -0
- data/lacci/lib/lacci/version.rb +13 -0
- data/lacci/lib/shoes/app.rb +264 -0
- data/{lib/scarpe → lacci/lib/shoes}/background.rb +1 -1
- data/{lib/scarpe → lacci/lib/shoes}/border.rb +1 -1
- data/{lib/scarpe → lacci/lib/shoes}/colors.rb +1 -1
- data/lacci/lib/shoes/constants.rb +29 -0
- data/{lib/scarpe → lacci/lib/shoes}/display_service.rb +40 -45
- data/lacci/lib/shoes/download.rb +123 -0
- data/lacci/lib/shoes/log.rb +71 -0
- data/lacci/lib/shoes/spacing.rb +9 -0
- data/{lib/scarpe → lacci/lib/shoes}/widget.rb +63 -43
- data/{lib/scarpe → lacci/lib/shoes/widgets}/alert.rb +3 -3
- data/{lib/scarpe → lacci/lib/shoes/widgets}/arc.rb +7 -5
- data/{lib/scarpe → lacci/lib/shoes/widgets}/button.rb +3 -3
- data/lacci/lib/shoes/widgets/check.rb +28 -0
- data/lacci/lib/shoes/widgets/document_root.rb +20 -0
- data/{lib/scarpe → lacci/lib/shoes/widgets}/edit_box.rb +10 -5
- data/{lib/scarpe → lacci/lib/shoes/widgets}/edit_line.rb +2 -2
- data/lacci/lib/shoes/widgets/flow.rb +22 -0
- data/lacci/lib/shoes/widgets/font.rb +14 -0
- data/{lib/scarpe → lacci/lib/shoes/widgets}/image.rb +3 -7
- data/lacci/lib/shoes/widgets/line.rb +18 -0
- data/{lib/scarpe → lacci/lib/shoes/widgets}/link.rb +2 -2
- data/{lib/scarpe → lacci/lib/shoes/widgets}/list_box.rb +2 -2
- data/{lib/scarpe → lacci/lib/shoes/widgets}/para.rb +4 -26
- data/lacci/lib/shoes/widgets/radio.rb +35 -0
- data/lacci/lib/shoes/widgets/shape.rb +37 -0
- data/lacci/lib/shoes/widgets/slot.rb +75 -0
- data/{lib/scarpe → lacci/lib/shoes/widgets}/span.rb +2 -2
- data/lacci/lib/shoes/widgets/stack.rb +24 -0
- data/{lib/scarpe → lacci/lib/shoes/widgets}/star.rb +6 -9
- data/lacci/lib/shoes/widgets/subscription_item.rb +60 -0
- data/lacci/lib/shoes/widgets/text_widget.rb +51 -0
- data/lacci/lib/shoes/widgets/video.rb +15 -0
- data/lacci/lib/shoes/widgets.rb +29 -0
- data/lacci/lib/shoes.rb +127 -0
- data/lacci/test/test_colors.rb +39 -0
- data/lacci/test/test_helper.rb +9 -0
- data/lacci/test/test_lacci.rb +9 -0
- data/lib/scarpe/cats_cradle.rb +249 -0
- data/lib/scarpe/evented_assertions.rb +88 -0
- data/lib/scarpe/version.rb +1 -1
- data/lib/scarpe/wv/alert.rb +3 -2
- data/lib/scarpe/wv/app.rb +30 -8
- data/lib/scarpe/wv/arc.rb +5 -6
- data/lib/scarpe/wv/background.rb +10 -1
- data/lib/scarpe/wv/border.rb +5 -3
- data/lib/scarpe/wv/button.rb +11 -9
- data/lib/scarpe/wv/check.rb +29 -0
- data/lib/scarpe/wv/control_interface.rb +14 -20
- data/lib/scarpe/wv/control_interface_test.rb +13 -28
- data/lib/scarpe/wv/document_root.rb +3 -45
- data/lib/scarpe/wv/edit_box.rb +5 -7
- data/lib/scarpe/wv/edit_line.rb +2 -2
- data/lib/scarpe/wv/flow.rb +10 -20
- data/lib/scarpe/wv/font.rb +36 -0
- data/lib/scarpe/wv/html.rb +3 -2
- data/lib/scarpe/wv/image.rb +7 -2
- data/lib/scarpe/wv/line.rb +4 -7
- data/lib/scarpe/wv/link.rb +1 -0
- data/lib/scarpe/wv/list_box.rb +3 -3
- data/lib/scarpe/wv/para.rb +16 -14
- data/lib/scarpe/wv/radio.rb +34 -0
- data/lib/scarpe/wv/shape.rb +44 -8
- data/lib/scarpe/wv/slot.rb +81 -0
- data/lib/scarpe/wv/spacing.rb +1 -1
- data/lib/scarpe/wv/span.rb +10 -8
- data/lib/scarpe/wv/stack.rb +10 -30
- data/lib/scarpe/wv/star.rb +11 -12
- data/lib/scarpe/wv/subscription_item.rb +50 -0
- data/lib/scarpe/wv/video.rb +34 -0
- data/lib/scarpe/wv/web_wrangler.rb +238 -58
- data/lib/scarpe/wv/webview_local_display.rb +27 -5
- data/lib/scarpe/wv/webview_relay_display.rb +18 -119
- data/lib/scarpe/wv/webview_relay_util.rb +143 -0
- data/lib/scarpe/wv/widget.rb +80 -11
- data/lib/scarpe/wv/wv_display_worker.rb +17 -4
- data/lib/scarpe/wv.rb +33 -4
- data/lib/scarpe/wv_local.rb +1 -1
- data/lib/scarpe/wv_relay.rb +1 -1
- data/lib/scarpe.rb +3 -32
- data/scarpe-components/.gitignore +1 -0
- data/scarpe-components/Gemfile +22 -0
- data/scarpe-components/README.md +35 -0
- data/scarpe-components/Rakefile +12 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +29 -0
- data/scarpe-components/lib/scarpe/components/file_helpers.rb +65 -0
- data/scarpe-components/lib/scarpe/components/modular_logger.rb +113 -0
- data/scarpe-components/lib/scarpe/components/print_logger.rb +43 -0
- data/{lib/scarpe → scarpe-components/lib/scarpe/components}/promises.rb +102 -35
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +170 -0
- data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +217 -0
- data/scarpe-components/lib/scarpe/components/version.rb +7 -0
- data/scarpe-components/scarpe-components.gemspec +38 -0
- data/scarpe-components/test/test_components.rb +9 -0
- data/scarpe-components/test/test_helper.rb +23 -0
- data/scarpe-components/test/test_promises.rb +260 -0
- data/scarpe-components/test/test_segmented_app_files.rb +182 -0
- data/{lib/scarpe → spikes}/glibui/widget.rb +2 -2
- data/{lib/scarpe → spikes}/glibui.rb +1 -1
- data/templates/basic_class_template.erb +1 -1
- data/templates/class_template_with_event_bind.erb +1 -1
- data/templates/class_template_with_shapes.erb +1 -1
- data/templates/webview_template.erb +0 -3
- metadata +151 -118
- data/examples/fill.rb +0 -25
- data/examples/legacy/not_checked/shoes-contrib/basic/class-book.yaml +0 -387
- data/examples/legacy/not_checked/shoes-contrib/good/good-clock.rb +0 -51
- data/examples/legacy/not_checked/shoes-contrib/good/good-follow.rb +0 -26
- data/examples/legacy/not_checked/shoes-contrib/good/good-reminder.rb +0 -174
- data/examples/legacy/not_checked/shoes-contrib/good/good-vjot.rb +0 -56
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-timer.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/good-clock.rb +0 -51
- data/examples/legacy/not_checked/shoes-dep-samples/good-follow.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/good-reminder.rb +0 -174
- data/examples/legacy/not_checked/shoes-dep-samples/good-vjot.rb +0 -56
- data/examples/legacy/not_checked/shoes-dep-samples/simple-accordion.rb +0 -75
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-shapes.rb +0 -17
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-text.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-arc.rb +0 -23
- data/examples/legacy/not_checked/shoes-dep-samples/simple-bounce.rb +0 -24
- data/examples/legacy/not_checked/shoes-dep-samples/simple-calc.rb +0 -70
- data/examples/legacy/not_checked/shoes-dep-samples/simple-chipmunk.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/simple-control-sizes.rb +0 -24
- data/examples/legacy/not_checked/shoes-dep-samples/simple-curve.rb +0 -26
- data/examples/legacy/not_checked/shoes-dep-samples/simple-dialogs.rb +0 -29
- data/examples/legacy/not_checked/shoes-dep-samples/simple-draw.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-editor.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.shy +0 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-mask.rb +0 -21
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu.rb +0 -31
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu1.rb +0 -35
- data/examples/legacy/not_checked/shoes-dep-samples/simple-rubygems.rb +0 -29
- data/examples/legacy/not_checked/shoes-dep-samples/simple-slide.rb +0 -45
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sphere.rb +0 -28
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sqlite3.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-timer.rb +0 -13
- data/examples/legacy/not_checked/shoes-dep-samples/simple-video.rb +0 -13
- data/examples/legacy/not_checked/simple/anim-text.rb +0 -13
- data/examples/legacy/not_checked/simple/arc.rb +0 -23
- data/examples/legacy/not_checked/simple/bounce.rb +0 -24
- data/examples/legacy/not_checked/simple/chipmunk.rb +0 -26
- data/examples/legacy/not_checked/simple/curve.rb +0 -26
- data/examples/legacy/not_checked/simple/dialogs.rb +0 -29
- data/examples/legacy/not_checked/simple/downloader.rb +0 -40
- data/examples/legacy/not_checked/simple/draw.rb +0 -13
- data/examples/legacy/not_checked/simple/mask.rb +0 -21
- data/examples/legacy/not_checked/simple/slide.rb +0 -45
- data/examples/legacy/not_checked/simple/sphere.rb +0 -28
- data/lib/constants.rb +0 -5
- data/lib/scarpe/app.rb +0 -78
- data/lib/scarpe/document_root.rb +0 -20
- data/lib/scarpe/fill.rb +0 -23
- data/lib/scarpe/flow.rb +0 -19
- data/lib/scarpe/line.rb +0 -25
- data/lib/scarpe/logger.rb +0 -155
- data/lib/scarpe/shape.rb +0 -19
- data/lib/scarpe/spacing.rb +0 -9
- data/lib/scarpe/stack.rb +0 -70
- data/lib/scarpe/text_widget.rb +0 -42
- data/lib/scarpe/unit_test_helpers.rb +0 -163
- data/lib/scarpe/widgets.rb +0 -30
- data/lib/scarpe/wv/fill.rb +0 -30
- data/lib/scarpe/wv/shape_helper.rb +0 -44
- data/scarpe-0.2.0.gem +0 -0
- /data/{lib/scarpe → spikes}/glibui/README.md +0 -0
- /data/{lib/scarpe → spikes}/glibui/alert.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/app.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/background.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/border.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/button.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/dimensions.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/document_root.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/edit_box.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/edit_line.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/flow.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/html.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/image.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/link.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/local_display.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/para.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/spacing.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/stack.rb +0 -0
- /data/{lib/scarpe → spikes}/glibui/text_widget.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/alert.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/button.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/colors.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/core.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/flow.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/libui.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/notepad.md +0 -0
- /data/{lib/scarpe → spikes}/libui/para.rb +0 -0
- /data/{lib/scarpe → spikes}/libui/stack.rb +0 -0
@@ -1,174 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
Shoes.app :title => "A Gentle Reminder",
|
4
|
-
:width => 370, :height => 560, :resizable => false do
|
5
|
-
|
6
|
-
background white
|
7
|
-
background tan, :height => 40
|
8
|
-
|
9
|
-
caption "A Gentle Reminder", :margin => 8, :stroke => white
|
10
|
-
|
11
|
-
stack :margin => 10, :margin_top => 50 do
|
12
|
-
para "You need to", :stroke => red, :fill => yellow
|
13
|
-
|
14
|
-
stack :margin_left => 5, :margin_right => 10, :width => 1.0, :height => 200, :scroll => true do
|
15
|
-
background white
|
16
|
-
border white, :strokewidth => 3
|
17
|
-
@gui_todo = para
|
18
|
-
end
|
19
|
-
|
20
|
-
flow :margin_top => 10 do
|
21
|
-
para "Remember to"
|
22
|
-
@add = edit_line(:margin_left => 10, :width => 180)
|
23
|
-
button("Add", :margin_left => 5) { add_todo(@add.text); @add.text = '' }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
stack :margin_top => 10 do
|
28
|
-
background darkgray
|
29
|
-
para strong('Completed'), :stroke => white
|
30
|
-
end
|
31
|
-
|
32
|
-
@gui_completed = stack :width => 1.0, :height => 207, :margin_right => 20
|
33
|
-
|
34
|
-
|
35
|
-
def data_path
|
36
|
-
if RUBY_PLATFORM =~ /win32/
|
37
|
-
if ENV['USERPROFILE']
|
38
|
-
if File.exist?(File.join(File.expand_path(ENV['USERPROFILE']), "Application Data"))
|
39
|
-
user_data_directory = File.join File.expand_path(ENV['USERPROFILE']), "Application Data", "GentleReminder"
|
40
|
-
else
|
41
|
-
user_data_directory = File.join File.expand_path(ENV['USERPROFILE']), "GentleReminder"
|
42
|
-
end
|
43
|
-
else
|
44
|
-
user_data_directory = File.join File.expand_path(Dir.getwd), "data"
|
45
|
-
end
|
46
|
-
else
|
47
|
-
user_data_directory = File.expand_path(File.join("~", ".gentlereminder"))
|
48
|
-
end
|
49
|
-
|
50
|
-
unless File.exist?(user_data_directory)
|
51
|
-
Dir.mkdir(user_data_directory)
|
52
|
-
end
|
53
|
-
|
54
|
-
return File.join(user_data_directory, "data.yaml")
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def refresh_todo
|
59
|
-
@gui_todo.replace *(
|
60
|
-
@todo.map { |item|
|
61
|
-
[ item, ' ' ] + [ link('Done') { complete_todo item } ] + [ ' ' ] +
|
62
|
-
[ link('Forget it') { forget_todo item } ] + [ "\n" ]
|
63
|
-
}.flatten
|
64
|
-
)
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
def refresh
|
69
|
-
refresh_todo
|
70
|
-
|
71
|
-
@gui_completed.clear
|
72
|
-
|
73
|
-
@gui_completed.append do
|
74
|
-
background white
|
75
|
-
|
76
|
-
@completed.keys.sort.reverse.each { |day|
|
77
|
-
stack do
|
78
|
-
background lightgrey
|
79
|
-
para strong(Time.at(day).strftime('%B %d, %Y')), :stroke => white
|
80
|
-
end
|
81
|
-
|
82
|
-
stack do
|
83
|
-
inscription *(
|
84
|
-
@completed[day].map { |item|
|
85
|
-
[ item ] + [ ' ' ] + [ link('Not Done') { undo_todo day, item } ] +
|
86
|
-
(@completed[day].index(item) == @completed[day].length - 1 ? [ '' ] : [ "\n" ])
|
87
|
-
}.flatten
|
88
|
-
)
|
89
|
-
end
|
90
|
-
|
91
|
-
}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
def complete_todo(item)
|
97
|
-
day = Time.today.to_i
|
98
|
-
|
99
|
-
if @completed.keys.include? day
|
100
|
-
@completed[day] << item
|
101
|
-
else
|
102
|
-
@completed[day] = [ item ]
|
103
|
-
end
|
104
|
-
|
105
|
-
@todo.delete(item)
|
106
|
-
|
107
|
-
save
|
108
|
-
|
109
|
-
refresh
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
def undo_todo(day, item)
|
114
|
-
@completed[day].delete item
|
115
|
-
|
116
|
-
@completed.delete(day) if @completed[day].empty?
|
117
|
-
|
118
|
-
@todo << item unless @todo.include? item
|
119
|
-
|
120
|
-
save
|
121
|
-
|
122
|
-
refresh
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
def add_todo(item)
|
127
|
-
item = item.strip
|
128
|
-
|
129
|
-
return if item == ''
|
130
|
-
|
131
|
-
if @todo.include? item
|
132
|
-
alert('You have already added that to the list!')
|
133
|
-
return
|
134
|
-
end
|
135
|
-
|
136
|
-
@todo << item
|
137
|
-
|
138
|
-
save
|
139
|
-
|
140
|
-
refresh_todo
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
def forget_todo(item)
|
145
|
-
@todo.delete item
|
146
|
-
|
147
|
-
save
|
148
|
-
|
149
|
-
refresh_todo
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
|
-
def load
|
154
|
-
if File.exist?(data_path)
|
155
|
-
@todo, @completed = YAML::load(File.open(data_path, 'r'))
|
156
|
-
else
|
157
|
-
@todo = []
|
158
|
-
@completed = {}
|
159
|
-
end
|
160
|
-
|
161
|
-
refresh
|
162
|
-
end
|
163
|
-
|
164
|
-
|
165
|
-
def save
|
166
|
-
File.open(data_path, 'w') { |f|
|
167
|
-
f.write [ @todo, @completed ].to_yaml
|
168
|
-
}
|
169
|
-
end
|
170
|
-
|
171
|
-
|
172
|
-
load
|
173
|
-
|
174
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
NOTES = [['Welcome to the vJot Clone', <<-'END']]
|
2
|
-
This sample app is a notetaker, a clone of PJ Hyett's vjot.com.
|
3
|
-
|
4
|
-
Creating
|
5
|
-
----------
|
6
|
-
Click "Add a New Note" and the jot will be loaded into the editor for reading or editing.
|
7
|
-
|
8
|
-
Editing
|
9
|
-
---------
|
10
|
-
Click a jot's title to load it.
|
11
|
-
|
12
|
-
Saving
|
13
|
-
--------
|
14
|
-
There is no save button, the jot is saved as you edit.
|
15
|
-
|
16
|
-
END
|
17
|
-
|
18
|
-
Shoes.app :title => "vJot",
|
19
|
-
:width => 420, :height => 560, :resizable => false do
|
20
|
-
|
21
|
-
@note = NOTES.first
|
22
|
-
background "#C7EAFB"
|
23
|
-
stack :width => 400, :margin => 20 do
|
24
|
-
background "#eee", :curve => 12
|
25
|
-
border "#00D0FF", :strokewidth => 3, :curve => 12
|
26
|
-
stack :margin => 20 do
|
27
|
-
caption "vJot"
|
28
|
-
@title = edit_line @note[0], :width => 1.0 do
|
29
|
-
@note[0] = @title.text
|
30
|
-
load_list
|
31
|
-
end
|
32
|
-
stack :width => 1.0, :height => 200, :scroll => true do
|
33
|
-
@list = para
|
34
|
-
end
|
35
|
-
@jot = edit_box @note[1], :width => 1.0, :height => 200, :margin_bottom => 20 do
|
36
|
-
@note[1] = @jot.text
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def load_list
|
42
|
-
@list.replace *(NOTES.map { |note|
|
43
|
-
[link(note.first) { @note = load_note(note); load_list }, "\n"]
|
44
|
-
}.flatten +
|
45
|
-
[link("+ Add a new Note") { NOTES << (@note = load_note); load_list }])
|
46
|
-
end
|
47
|
-
|
48
|
-
def load_note(note = ['New Note', ''])
|
49
|
-
@note = note
|
50
|
-
@title.text = note[0]
|
51
|
-
@jot.text = note[1]
|
52
|
-
note
|
53
|
-
end
|
54
|
-
|
55
|
-
load_list
|
56
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
Shoes.app :height => 150, :width => 250 do
|
2
|
-
background rgb(240, 250, 208)
|
3
|
-
stack :margin => 10 do
|
4
|
-
button "Start" do
|
5
|
-
@time = Time.now
|
6
|
-
@label.replace "Stop watch started at #@time"
|
7
|
-
end
|
8
|
-
button "Stop" do
|
9
|
-
@label.replace "Stopped, ", strong("#{Time.now - @time}"), " seconds elapsed."
|
10
|
-
end
|
11
|
-
@label = para "Press ", strong("start"), " to begin timing."
|
12
|
-
end
|
13
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Shoes Clock by Thomas Bell
|
3
|
-
# posted to the Shoes mailing list on 04 Dec 2007
|
4
|
-
#
|
5
|
-
Shoes.app :height => 260, :width => 250 do
|
6
|
-
@radius, @centerx, @centery = 90, 126, 140
|
7
|
-
animate(8) do
|
8
|
-
@time = Time.now
|
9
|
-
clear do
|
10
|
-
draw_background
|
11
|
-
stack do
|
12
|
-
background black
|
13
|
-
para @time.strftime("%a"),
|
14
|
-
span(@time.strftime(" %b %d, %Y "), :stroke => "#ccc"),
|
15
|
-
strong(@time.strftime("%I:%M"), :stroke => white),
|
16
|
-
@time.strftime(".%S"), :align => "center", :stroke => "#666",
|
17
|
-
:margin => 4
|
18
|
-
end
|
19
|
-
clock_hand @time.sec + (@time.usec * 0.000001),2,30,red
|
20
|
-
clock_hand @time.min + (@time.sec / 60.0),5
|
21
|
-
clock_hand @time.hour + (@time.min / 60.0),8,6
|
22
|
-
end
|
23
|
-
end
|
24
|
-
def draw_background
|
25
|
-
background rgb(230, 240, 200)
|
26
|
-
|
27
|
-
fill white
|
28
|
-
stroke black
|
29
|
-
strokewidth 4
|
30
|
-
oval @centerx - 102, @centery - 102, 204, 204
|
31
|
-
|
32
|
-
fill black
|
33
|
-
nostroke
|
34
|
-
oval @centerx - 5, @centery - 5, 10, 10
|
35
|
-
|
36
|
-
stroke black
|
37
|
-
strokewidth 1
|
38
|
-
line(@centerx, @centery - 102, @centerx, @centery - 95)
|
39
|
-
line(@centerx - 102, @centery, @centerx - 95, @centery)
|
40
|
-
line(@centerx + 95, @centery, @centerx + 102, @centery)
|
41
|
-
line(@centerx, @centery + 95, @centerx, @centery + 102)
|
42
|
-
end
|
43
|
-
def clock_hand(time, sw, unit=30, color=black)
|
44
|
-
radius_local = unit == 30 ? @radius : @radius - 15
|
45
|
-
_x = radius_local * Math.sin( time * Math::PI / unit )
|
46
|
-
_y = radius_local * Math.cos( time * Math::PI / unit )
|
47
|
-
stroke color
|
48
|
-
strokewidth sw
|
49
|
-
line(@centerx, @centery, @centerx + _x, @centery - _y)
|
50
|
-
end
|
51
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
trails = [[0, 0]] * 60
|
2
|
-
Shoes.app :width => 200, :height => 200, :resizable => false do
|
3
|
-
nostroke
|
4
|
-
fill rgb(0x3, 0x1, 0x3, 0.6)
|
5
|
-
|
6
|
-
# animation at 100 frames per second
|
7
|
-
animate(60) do
|
8
|
-
trails.shift
|
9
|
-
trails << self.mouse[1, 2]
|
10
|
-
|
11
|
-
clear do
|
12
|
-
# change the background based on where the pointer is
|
13
|
-
background rgb(
|
14
|
-
20 + (70 * (trails.last[0].to_f / self.width)).to_i,
|
15
|
-
20 + (70 * (trails.last[1].to_f / self.height)).to_i,
|
16
|
-
51)
|
17
|
-
|
18
|
-
# draw circles progressively bigger
|
19
|
-
trails.each_with_index do |(x, y), i|
|
20
|
-
i += 1
|
21
|
-
oval :left => x, :top => y, :radius => (i*0.5), :center => true
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
@@ -1,174 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
Shoes.app :title => "A Gentle Reminder",
|
4
|
-
:width => 370, :height => 560, :resizable => false do
|
5
|
-
|
6
|
-
background white
|
7
|
-
background tan, :height => 40
|
8
|
-
|
9
|
-
caption "A Gentle Reminder", :margin => 8, :stroke => white
|
10
|
-
|
11
|
-
stack :margin => 10, :margin_top => 50 do
|
12
|
-
para "You need to", :stroke => red, :fill => yellow
|
13
|
-
|
14
|
-
stack :margin_left => 5, :margin_right => 10, :width => 1.0, :height => 200, :scroll => true do
|
15
|
-
background white
|
16
|
-
border white, :strokewidth => 3
|
17
|
-
@gui_todo = para
|
18
|
-
end
|
19
|
-
|
20
|
-
flow :margin_top => 10 do
|
21
|
-
para "Remember to"
|
22
|
-
@add = edit_line(:margin_left => 10, :width => 180)
|
23
|
-
button("Add", :margin_left => 5) { add_todo(@add.text); @add.text = '' }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
stack :margin_top => 10 do
|
28
|
-
background darkgray
|
29
|
-
para strong('Completed'), :stroke => white
|
30
|
-
end
|
31
|
-
|
32
|
-
@gui_completed = stack :width => 1.0, :height => 207, :margin_right => 20
|
33
|
-
|
34
|
-
|
35
|
-
def data_path
|
36
|
-
if RUBY_PLATFORM =~ /win32/
|
37
|
-
if ENV['USERPROFILE']
|
38
|
-
if File.exist?(File.join(File.expand_path(ENV['USERPROFILE']), "Application Data"))
|
39
|
-
user_data_directory = File.join File.expand_path(ENV['USERPROFILE']), "Application Data", "GentleReminder"
|
40
|
-
else
|
41
|
-
user_data_directory = File.join File.expand_path(ENV['USERPROFILE']), "GentleReminder"
|
42
|
-
end
|
43
|
-
else
|
44
|
-
user_data_directory = File.join File.expand_path(Dir.getwd), "data"
|
45
|
-
end
|
46
|
-
else
|
47
|
-
user_data_directory = File.expand_path(File.join("~", ".gentlereminder"))
|
48
|
-
end
|
49
|
-
|
50
|
-
unless File.exist?(user_data_directory)
|
51
|
-
Dir.mkdir(user_data_directory)
|
52
|
-
end
|
53
|
-
|
54
|
-
return File.join(user_data_directory, "data.yaml")
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def refresh_todo
|
59
|
-
@gui_todo.replace *(
|
60
|
-
@todo.map { |item|
|
61
|
-
[ item, ' ' ] + [ link('Done') { complete_todo item } ] + [ ' ' ] +
|
62
|
-
[ link('Forget it') { forget_todo item } ] + [ "\n" ]
|
63
|
-
}.flatten
|
64
|
-
)
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
def refresh
|
69
|
-
refresh_todo
|
70
|
-
|
71
|
-
@gui_completed.clear
|
72
|
-
|
73
|
-
@gui_completed.append do
|
74
|
-
background white
|
75
|
-
|
76
|
-
@completed.keys.sort.reverse.each { |day|
|
77
|
-
stack do
|
78
|
-
background lightgrey
|
79
|
-
para strong(Time.at(day).strftime('%B %d, %Y')), :stroke => white
|
80
|
-
end
|
81
|
-
|
82
|
-
stack do
|
83
|
-
inscription *(
|
84
|
-
@completed[day].map { |item|
|
85
|
-
[ item ] + [ ' ' ] + [ link('Not Done') { undo_todo day, item } ] +
|
86
|
-
(@completed[day].index(item) == @completed[day].length - 1 ? [ '' ] : [ "\n" ])
|
87
|
-
}.flatten
|
88
|
-
)
|
89
|
-
end
|
90
|
-
|
91
|
-
}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
def complete_todo(item)
|
97
|
-
day = Time.today.to_i
|
98
|
-
|
99
|
-
if @completed.keys.include? day
|
100
|
-
@completed[day] << item
|
101
|
-
else
|
102
|
-
@completed[day] = [ item ]
|
103
|
-
end
|
104
|
-
|
105
|
-
@todo.delete(item)
|
106
|
-
|
107
|
-
save
|
108
|
-
|
109
|
-
refresh
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
def undo_todo(day, item)
|
114
|
-
@completed[day].delete item
|
115
|
-
|
116
|
-
@completed.delete(day) if @completed[day].empty?
|
117
|
-
|
118
|
-
@todo << item unless @todo.include? item
|
119
|
-
|
120
|
-
save
|
121
|
-
|
122
|
-
refresh
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
def add_todo(item)
|
127
|
-
item = item.strip
|
128
|
-
|
129
|
-
return if item == ''
|
130
|
-
|
131
|
-
if @todo.include? item
|
132
|
-
alert('You have already added that to the list!')
|
133
|
-
return
|
134
|
-
end
|
135
|
-
|
136
|
-
@todo << item
|
137
|
-
|
138
|
-
save
|
139
|
-
|
140
|
-
refresh_todo
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
def forget_todo(item)
|
145
|
-
@todo.delete item
|
146
|
-
|
147
|
-
save
|
148
|
-
|
149
|
-
refresh_todo
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
|
-
def load
|
154
|
-
if File.exist?(data_path)
|
155
|
-
@todo, @completed = YAML::load(File.open(data_path, 'r'))
|
156
|
-
else
|
157
|
-
@todo = []
|
158
|
-
@completed = {}
|
159
|
-
end
|
160
|
-
|
161
|
-
refresh
|
162
|
-
end
|
163
|
-
|
164
|
-
|
165
|
-
def save
|
166
|
-
File.open(data_path, 'w') { |f|
|
167
|
-
f.write [ @todo, @completed ].to_yaml
|
168
|
-
}
|
169
|
-
end
|
170
|
-
|
171
|
-
|
172
|
-
load
|
173
|
-
|
174
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
NOTES = [['Welcome to the vJot Clone', <<-'END']]
|
2
|
-
This sample app is a notetaker, a clone of PJ Hyett's vjot.com.
|
3
|
-
|
4
|
-
Creating
|
5
|
-
----------
|
6
|
-
Click "Add a New Note" and the jot will be loaded into the editor for reading or editing.
|
7
|
-
|
8
|
-
Editing
|
9
|
-
---------
|
10
|
-
Click a jot's title to load it.
|
11
|
-
|
12
|
-
Saving
|
13
|
-
--------
|
14
|
-
There is no save button, the jot is saved as you edit.
|
15
|
-
|
16
|
-
END
|
17
|
-
|
18
|
-
Shoes.app :title => "vJot",
|
19
|
-
:width => 420, :height => 560, :resizable => false do
|
20
|
-
|
21
|
-
@note = NOTES.first
|
22
|
-
background "#C7EAFB"
|
23
|
-
stack :width => 400, :margin => 20 do
|
24
|
-
background "#eee", :curve => 12
|
25
|
-
border "#00D0FF", :strokewidth => 3, :curve => 12
|
26
|
-
stack :margin => 20 do
|
27
|
-
caption "vJot"
|
28
|
-
@title = edit_line @note[0], :width => 1.0 do
|
29
|
-
@note[0] = @title.text
|
30
|
-
load_list
|
31
|
-
end
|
32
|
-
stack :width => 1.0, :height => 200, :scroll => true do
|
33
|
-
@list = para
|
34
|
-
end
|
35
|
-
@jot = edit_box @note[1], :width => 1.0, :height => 200, :margin_bottom => 20 do
|
36
|
-
@note[1] = @jot.text
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def load_list
|
42
|
-
@list.replace *(NOTES.map { |note|
|
43
|
-
[link(note.first) { @note = load_note(note); load_list }, "\n"]
|
44
|
-
}.flatten +
|
45
|
-
[link("+ Add a new Note") { NOTES << (@note = load_note); load_list }])
|
46
|
-
end
|
47
|
-
|
48
|
-
def load_note(note = ['New Note', ''])
|
49
|
-
@note = note
|
50
|
-
@title.text = note[0]
|
51
|
-
@jot.text = note[1]
|
52
|
-
note
|
53
|
-
end
|
54
|
-
|
55
|
-
load_list
|
56
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
module Accordion
|
2
|
-
def open_page stack
|
3
|
-
active = app.slot.contents.map { |x| x.contents[1] }.
|
4
|
-
detect { |x| x.height > 0 }
|
5
|
-
return if active == stack
|
6
|
-
a = animate 60 do
|
7
|
-
stack.height += 20
|
8
|
-
active.height = 240 - stack.height if active
|
9
|
-
a.stop if stack.height == 240
|
10
|
-
end
|
11
|
-
end
|
12
|
-
def page title, text
|
13
|
-
@pages ||= []
|
14
|
-
@pages <<
|
15
|
-
stack do
|
16
|
-
page_text = nil
|
17
|
-
stack :width => "100%" do
|
18
|
-
background "#fff".."#eed"
|
19
|
-
hi = background "#ddd".."#ba9", :hidden => true
|
20
|
-
para link(title) {}, :size => 26
|
21
|
-
hover { hi.show }
|
22
|
-
leave { hi.hide }
|
23
|
-
click { open_page page_text }
|
24
|
-
end
|
25
|
-
page_text =
|
26
|
-
stack :width => "100%", :height => (@pages.empty? ? 240 : 0) do
|
27
|
-
stack :margin => 10 do
|
28
|
-
text.split(/\n{2,}/).each do |pg|
|
29
|
-
para pg
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
Shoes.app do
|
38
|
-
extend Accordion
|
39
|
-
style(Link, :stroke => black, :underline => nil, :weight => "strong")
|
40
|
-
style(LinkHover, :stroke => black, :fill => nil, :underline => nil)
|
41
|
-
|
42
|
-
page "0.0", <<-'END'
|
43
|
-
There is a thought
|
44
|
-
I have just had
|
45
|
-
Which I don’t care to pass to
|
46
|
-
Anyone at all at this time.
|
47
|
-
|
48
|
-
I have even forgotten it now,
|
49
|
-
But kept only the pleasures
|
50
|
-
Of my property
|
51
|
-
And of my controlled mental slippage.
|
52
|
-
END
|
53
|
-
page "0.1", <<-'END'
|
54
|
-
My eyes have blinked again
|
55
|
-
And I have just realized
|
56
|
-
This upright world
|
57
|
-
I have been in.
|
58
|
-
|
59
|
-
My eyelids wipe
|
60
|
-
My eyes hundreds of times
|
61
|
-
Reseting and renovating
|
62
|
-
The scenery.
|
63
|
-
END
|
64
|
-
page "0.2", <<-'END'
|
65
|
-
Sister, without you,
|
66
|
-
The universe would
|
67
|
-
Have such a hole through it,
|
68
|
-
Where infinity has been shot.
|
69
|
-
|
70
|
-
This cannot be, though.
|
71
|
-
There will always be room
|
72
|
-
For you—all of us are
|
73
|
-
Holding the way open.
|
74
|
-
END
|
75
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
Shoes.app do
|
2
|
-
background rgb(0, 0, 0)
|
3
|
-
fill rgb(255, 255, 255)
|
4
|
-
rects = [
|
5
|
-
rect(0, 0, 50, 50),
|
6
|
-
rect(0, 0, 100, 100),
|
7
|
-
rect(0, 0, 75, 75)
|
8
|
-
]
|
9
|
-
animate(24) do |i|
|
10
|
-
rects.each do |r|
|
11
|
-
r.move((0..400).rand, (0..400).rand)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
button "OK", :top => 0.5, :left => 0.5 do
|
15
|
-
quit unless confirm "You ARE sure you're OK??"
|
16
|
-
end
|
17
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
Shoes.app do
|
2
|
-
stack :top => 0.5, :left => 0.5 do
|
3
|
-
para "Counting up:"
|
4
|
-
l = para "0"
|
5
|
-
animate(24) do |i|
|
6
|
-
f = ['Arial 14px', 'Serif 34px', 'Monospace 18px', 'Arial 48px'][rand(3)]
|
7
|
-
l.replace "#{i}", :font => f
|
8
|
-
end
|
9
|
-
motion do |x, y|
|
10
|
-
Shoes.p [x, y]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# a translation from a processing example
|
3
|
-
# http://vormplus.be/weging/an-introduction-to-processing/
|
4
|
-
#
|
5
|
-
Shoes.app :width => 420, :height => 420, :resizable => false do
|
6
|
-
rotation = -(Shoes::HALF_PI / 3)
|
7
|
-
step = 20
|
8
|
-
|
9
|
-
background gray(240)
|
10
|
-
stroke gray(127)
|
11
|
-
cap :curve
|
12
|
-
nofill
|
13
|
-
|
14
|
-
10.times do |i|
|
15
|
-
strokewidth i
|
16
|
-
size = 200 + (step * i)
|
17
|
-
shape do
|
18
|
-
arc self.width / 2, self.height / 2,
|
19
|
-
size, size,
|
20
|
-
rotation * i, rotation * i + Shoes::TWO_PI - Shoes::HALF_PI
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
xspeed, yspeed = 8.4, 6.6
|
2
|
-
xdir, ydir = 1, 1
|
3
|
-
|
4
|
-
Shoes.app do
|
5
|
-
background "#DFA"
|
6
|
-
border black, :strokewidth => 6
|
7
|
-
|
8
|
-
nostroke
|
9
|
-
@icon = image "#{DIR}/static/shoes-icon.png", :left => 100, :top => 100 do
|
10
|
-
alert "You're soooo quick."
|
11
|
-
end
|
12
|
-
|
13
|
-
x, y = self.width / 2, self.height / 2
|
14
|
-
size = @icon.size
|
15
|
-
animate(30) do
|
16
|
-
x += xspeed * xdir
|
17
|
-
y += yspeed * ydir
|
18
|
-
|
19
|
-
xdir *= -1 if x > self.width - size[0] or x < 0
|
20
|
-
ydir *= -1 if y > self.height - size[1] or y < 0
|
21
|
-
|
22
|
-
@icon.move x.to_i, y.to_i
|
23
|
-
end
|
24
|
-
end
|