shoes 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +12 -0
- data/CHANGELOG +29 -0
- data/COPYING +30 -0
- data/README.md +76 -0
- data/README.old +117 -0
- data/Rakefile +130 -0
- data/Rakefile.bk +651 -0
- data/app.yaml +7 -0
- data/bin/main.skel +104 -0
- data/bugs/issue-012e9468ddc7b0cb7e1503413a8a11c4f8707b67.yaml +21 -0
- data/bugs/issue-0711ff8b67baa63586f11d0096fee9dd4436bf58.yaml +23 -0
- data/bugs/issue-07f87998d93eb401e22395c11085676389b935c4.yaml +22 -0
- data/bugs/issue-0bff2d80008803cbc7efbcdacdc60ef2163664d2.yaml +22 -0
- data/bugs/issue-0c66f223d19efbca7b692f3b91961f407ad7abec.yaml +24 -0
- data/bugs/issue-183bc3c7a8f575aff2b24e0bf22aa0dfcc8e4fc2.yaml +29 -0
- data/bugs/issue-1bad1e60a04cb3adb6a8f3ded128af2e16b56ffe.yaml +18 -0
- data/bugs/issue-1f1d43f76bf4de79d7f94adbae6dd506a9d81633.yaml +41 -0
- data/bugs/issue-320924117cadb045cc91f2a6fca922b4d81d4bb5.yaml +20 -0
- data/bugs/issue-33e5c8355fbf65252ea9e939714651df8bd8cb3b.yaml +25 -0
- data/bugs/issue-36f7c8262a72bcd5e28cfa4ed29328b8237ea79b.yaml +20 -0
- data/bugs/issue-39bf04ee50c3bef67b89b8e9beb28657805587ce.yaml +18 -0
- data/bugs/issue-3e28ba7754f73d02ef416eef989af707a8c00f01.yaml +23 -0
- data/bugs/issue-3f638cc03f41f9c3fdf217355321f1563f8fee45.yaml +22 -0
- data/bugs/issue-41e48e14f1ef4f6deb69be68165d7dd3ffd99156.yaml +22 -0
- data/bugs/issue-4c9408166a2aa5dd333bbb05520deebf4ded08e0.yaml +22 -0
- data/bugs/issue-55c687e108ecd5aeb8e0d0aeb4294984f84acd3e.yaml +18 -0
- data/bugs/issue-5811d34692cc292717a58ec1df1f8948cf30d826.yaml +28 -0
- data/bugs/issue-5a7c1f59a0526f9cea7fb366867cf1e6ed8ef69d.yaml +22 -0
- data/bugs/issue-688a2c2566bef6a03efa57a4ae1f7cfa8fc74444.yaml +21 -0
- data/bugs/issue-78b16c7988ade2ef96e716fa8cb9a004bd4ced65.yaml +33 -0
- data/bugs/issue-804ee49f9800154eddf0650690c7a9bb5626253f.yaml +27 -0
- data/bugs/issue-807dd1c610b2e941a5d454e26b2eac27e89a0ab4.yaml +22 -0
- data/bugs/issue-822ee33ec11ebd25f90ea86e8438de7891e63aee.yaml +18 -0
- data/bugs/issue-82ff7152cebb8a1cb065b864cb4fe22de2328146.yaml +29 -0
- data/bugs/issue-856afbdcdd4970ad54b8ce4a6c017fbaab45f49d.yaml +31 -0
- data/bugs/issue-8d49e32fb21522651c67490adb4d80076dbb14e1.yaml +24 -0
- data/bugs/issue-91583359653a9d530c1e32be72d874d847a306e7.yaml +21 -0
- data/bugs/issue-af41a5229613172764e7d3c98431172db337053d.yaml +20 -0
- data/bugs/issue-bd9856b3788dd429c998a5af1b2aae8221cb80b7.yaml +28 -0
- data/bugs/issue-be22aef5c564fb7b5e9938343136a9cd6a2edb7b.yaml +22 -0
- data/bugs/issue-bf8697523c77c326e7e35fc82cf3dd739ae92310.yaml +27 -0
- data/bugs/issue-cdd4b4795f34d6ff46e56ece10f8216a4a5456b2.yaml +25 -0
- data/bugs/issue-d9bfb5581d745ef9deb3b9b2e08ef74d1cd43082.yaml +20 -0
- data/bugs/issue-e0ce2f687cc096f35715d28b0af88589f4ab6cc6.yaml +18 -0
- data/bugs/issue-e4b0aca4a10a574b333aeaecaaf221dbc5ed22c6.yaml +38 -0
- data/bugs/issue-f263746594b95ba778455730478ee8df60ee639d.yaml +22 -0
- data/bugs/project.yaml +72 -0
- data/builddeps.sh +102 -0
- data/fonts/Coolvetica.ttf +0 -0
- data/fonts/Lacuna.ttf +0 -0
- data/gemlib/shoes.rb +1 -0
- data/lib/shoes.rb +548 -0
- data/lib/shoes/cache.rb +54 -0
- data/lib/shoes/chipmunk.rb +35 -0
- data/lib/shoes/data.rb +39 -0
- data/lib/shoes/help.rb +468 -0
- data/lib/shoes/image.rb +25 -0
- data/lib/shoes/inspect.rb +128 -0
- data/lib/shoes/log.rb +48 -0
- data/lib/shoes/minitar.rb +986 -0
- data/lib/shoes/override.rb +38 -0
- data/lib/shoes/pack.rb +543 -0
- data/lib/shoes/search.rb +46 -0
- data/lib/shoes/setup.rb +329 -0
- data/lib/shoes/shy.rb +131 -0
- data/lib/shoes/shybuilder.rb +44 -0
- data/lib/shoes/version.rb +3 -0
- data/make/darwin/deps.vlc +12 -0
- data/make/darwin/dylibs.shoes +22 -0
- data/make/darwin/dylibs.video +11 -0
- data/make/darwin/env.rb +81 -0
- data/make/darwin/tasks.rb +105 -0
- data/make/linux/env.rb +65 -0
- data/make/linux/tasks.rb +61 -0
- data/make/make.rb +85 -0
- data/make/mingw/dlls +19 -0
- data/make/mingw/env.rb +69 -0
- data/make/mingw/tasks.rb +70 -0
- data/make/rakefile_common.rb +8 -0
- data/manual-snapshots/class-book.png +0 -0
- data/manual-snapshots/expert-definr.png +0 -0
- data/manual-snapshots/expert-funnies.png +0 -0
- data/manual-snapshots/expert-irb.png +0 -0
- data/manual-snapshots/expert-minesweeper.png +0 -0
- data/manual-snapshots/expert-othello.png +0 -0
- data/manual-snapshots/expert-pong.png +0 -0
- data/manual-snapshots/expert-tankspank.png +0 -0
- data/manual-snapshots/good-arc.png +0 -0
- data/manual-snapshots/good-clock.png +0 -0
- data/manual-snapshots/good-follow.png +0 -0
- data/manual-snapshots/good-reminder.png +0 -0
- data/manual-snapshots/good-vjot.png +0 -0
- data/manual-snapshots/simple-accordion.png +0 -0
- data/manual-snapshots/simple-anim-shapes.png +0 -0
- data/manual-snapshots/simple-anim-text.png +0 -0
- data/manual-snapshots/simple-arc.png +0 -0
- data/manual-snapshots/simple-bounce.png +0 -0
- data/manual-snapshots/simple-calc.png +0 -0
- data/manual-snapshots/simple-chipmunk.png +0 -0
- data/manual-snapshots/simple-control-sizes.png +0 -0
- data/manual-snapshots/simple-curve.png +0 -0
- data/manual-snapshots/simple-dialogs.png +0 -0
- data/manual-snapshots/simple-downloader.png +0 -0
- data/manual-snapshots/simple-draw.png +0 -0
- data/manual-snapshots/simple-editor.png +0 -0
- data/manual-snapshots/simple-form.png +0 -0
- data/manual-snapshots/simple-mask.png +0 -0
- data/manual-snapshots/simple-menu.png +0 -0
- data/manual-snapshots/simple-menu1.png +0 -0
- data/manual-snapshots/simple-rubygems.png +0 -0
- data/manual-snapshots/simple-slide.png +0 -0
- data/manual-snapshots/simple-sphere.png +0 -0
- data/manual-snapshots/simple-sqlite3.png +0 -0
- data/manual-snapshots/simple-timer.png +0 -0
- data/manual-snapshots/simple-video.png +0 -0
- data/platform/mac/Info.plist +55 -0
- data/platform/mac/build-deps.sh +658 -0
- data/platform/mac/command-manual.rb +1 -0
- data/platform/mac/deps-osx.patch +159 -0
- data/platform/mac/dmg_ds_store +0 -0
- data/platform/mac/pangorc +2 -0
- data/platform/mac/pkg-dmg +1447 -0
- data/platform/mac/shoes +31 -0
- data/platform/mac/shoes-launch +7 -0
- data/platform/mac/stub.m +178 -0
- data/platform/mac/version.plist +14 -0
- data/platform/msw/base.nsi +644 -0
- data/platform/msw/installer-1.bmp +0 -0
- data/platform/msw/installer-2.bmp +0 -0
- data/platform/msw/shoes.exe.manifest +17 -0
- data/platform/msw/shoes.ico +0 -0
- data/platform/msw/stub-inject.c +59 -0
- data/platform/msw/stub.c +271 -0
- data/platform/msw/stub32.h +14 -0
- data/platform/msw/stub32.rc +16 -0
- data/platform/nix/INSTALL +56 -0
- data/platform/nix/Makefile +144 -0
- data/platform/nix/shoes.launch +20 -0
- data/platform/skel.rb +27 -0
- data/rakefile_darwin.rb +7 -0
- data/rakefile_linux.rb +3 -0
- data/rakefile_mingw.rb +7 -0
- data/samples/class-book.rb +43 -0
- data/samples/class-book.yaml +387 -0
- data/samples/expert-definr.rb +23 -0
- data/samples/expert-funnies.rb +51 -0
- data/samples/expert-irb.rb +112 -0
- data/samples/expert-minesweeper.rb +267 -0
- data/samples/expert-othello.rb +319 -0
- data/samples/expert-pong.rb +62 -0
- data/samples/expert-tankspank.rb +385 -0
- data/samples/good-arc.rb +37 -0
- data/samples/good-clock.rb +51 -0
- data/samples/good-follow.rb +26 -0
- data/samples/good-reminder.rb +174 -0
- data/samples/good-vjot.rb +56 -0
- data/samples/simple-accordion.rb +75 -0
- data/samples/simple-anim-shapes.rb +17 -0
- data/samples/simple-anim-text.rb +13 -0
- data/samples/simple-arc.rb +23 -0
- data/samples/simple-bounce.rb +24 -0
- data/samples/simple-calc.rb +70 -0
- data/samples/simple-chipmunk.rb +26 -0
- data/samples/simple-control-sizes.rb +24 -0
- data/samples/simple-curve.rb +26 -0
- data/samples/simple-dialogs.rb +29 -0
- data/samples/simple-downloader.rb +27 -0
- data/samples/simple-draw.rb +13 -0
- data/samples/simple-editor.rb +28 -0
- data/samples/simple-form.rb +28 -0
- data/samples/simple-form.shy +0 -0
- data/samples/simple-mask.rb +21 -0
- data/samples/simple-menu.rb +31 -0
- data/samples/simple-menu1.rb +35 -0
- data/samples/simple-rubygems.rb +29 -0
- data/samples/simple-slide.rb +45 -0
- data/samples/simple-sphere.rb +28 -0
- data/samples/simple-sqlite3.rb +13 -0
- data/samples/simple-timer.rb +13 -0
- data/samples/simple-video.rb +13 -0
- data/shoes.gemspec +21 -0
- data/shoes/app.c +591 -0
- data/shoes/app.h +110 -0
- data/shoes/appwin32.h +13 -0
- data/shoes/appwin32.rc +28 -0
- data/shoes/canvas.c +2202 -0
- data/shoes/canvas.h +682 -0
- data/shoes/code.h +14 -0
- data/shoes/config.h +232 -0
- data/shoes/effects.c +243 -0
- data/shoes/effects.h +7 -0
- data/shoes/http.h +44 -0
- data/shoes/http/common.h +86 -0
- data/shoes/http/curl.c +259 -0
- data/shoes/http/nsurl.m +274 -0
- data/shoes/http/windownload.c +114 -0
- data/shoes/http/winhttp.c +216 -0
- data/shoes/http/winhttp.h +19 -0
- data/shoes/image.c +1020 -0
- data/shoes/internal.c +46 -0
- data/shoes/internal.h +63 -0
- data/shoes/native.h +110 -0
- data/shoes/native/cocoa.h +105 -0
- data/shoes/native/cocoa.m +1557 -0
- data/shoes/native/gtk.c +1257 -0
- data/shoes/native/windows.c +2392 -0
- data/shoes/ruby.c +5221 -0
- data/shoes/ruby.h +299 -0
- data/shoes/world.c +243 -0
- data/shoes/world.h +63 -0
- data/static/Shoes.icns +0 -0
- data/static/avatar.png +0 -0
- data/static/code_highlighter.js +188 -0
- data/static/code_highlighter_ruby.js +26 -0
- data/static/icon-debug.png +0 -0
- data/static/icon-error.png +0 -0
- data/static/icon-info.png +0 -0
- data/static/icon-warn.png +0 -0
- data/static/listbox_button1.png +0 -0
- data/static/listbox_button2.png +0 -0
- data/static/man-app.png +0 -0
- data/static/man-builds.png +0 -0
- data/static/man-builds1.png +0 -0
- data/static/man-editor-notepad.png +0 -0
- data/static/man-editor-osx.png +0 -0
- data/static/man-ele-background.png +0 -0
- data/static/man-ele-border.png +0 -0
- data/static/man-ele-button.png +0 -0
- data/static/man-ele-check.png +0 -0
- data/static/man-ele-editbox.png +0 -0
- data/static/man-ele-editline.png +0 -0
- data/static/man-ele-image.png +0 -0
- data/static/man-ele-listbox.png +0 -0
- data/static/man-ele-progress.png +0 -0
- data/static/man-ele-radio.png +0 -0
- data/static/man-ele-shape.png +0 -0
- data/static/man-ele-textblock.png +0 -0
- data/static/man-ele-video.png +0 -0
- data/static/man-intro-dmg.png +0 -0
- data/static/man-intro-exe.png +0 -0
- data/static/man-look-tiger.png +0 -0
- data/static/man-look-ubuntu.png +0 -0
- data/static/man-look-vista.png +0 -0
- data/static/man-run-osx.png +0 -0
- data/static/man-run-vista.png +0 -0
- data/static/man-run-xp.png +0 -0
- data/static/man-shot1.png +0 -0
- data/static/manual-en.txt +3531 -0
- data/static/manual-ja.txt +2825 -0
- data/static/manual.css +167 -0
- data/static/menu-corner1.png +0 -0
- data/static/menu-corner2.png +0 -0
- data/static/menu-gray.png +0 -0
- data/static/menu-left.png +0 -0
- data/static/menu-right.png +0 -0
- data/static/menu-top.png +0 -0
- data/static/shoes-dmg.jpg +0 -0
- data/static/shoes-icon-blue.png +0 -0
- data/static/shoes-icon.png +0 -0
- data/static/shoes-manual-apps.gif +0 -0
- data/static/shoes_main_window.png +0 -0
- data/static/stripe.png +0 -0
- data/static/stubs/blank.exe +0 -0
- data/static/stubs/blank.hfz +0 -0
- data/static/stubs/blank.run +375 -0
- data/static/stubs/cocoa-install +0 -0
- data/static/stubs/sh-install +49 -0
- data/static/stubs/shoes-stub-inject.exe +0 -0
- data/static/stubs/shoes-stub.exe +0 -0
- data/static/tutor-back.png +0 -0
- data/test/shoes_test.rb +8 -0
- data/test/test_helper.rb +25 -0
- data/use-deps +12 -0
- data/use-tmp-dep +8 -0
- metadata +509 -0
data/samples/good-arc.rb
ADDED
@@ -0,0 +1,37 @@
|
|
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
|
+
stage, wide, sw, basesize, step = 0, 3.0, 1.0, 600, 60
|
7
|
+
stroke gray(127)
|
8
|
+
nofill
|
9
|
+
|
10
|
+
animate 40 do |i|
|
11
|
+
stage = (1...8).rand if i % 40 == 0
|
12
|
+
rotation = -(HALF_PI / wide)
|
13
|
+
clear do
|
14
|
+
background gray(240)
|
15
|
+
10.times do |i|
|
16
|
+
strokewidth sw * i
|
17
|
+
size = (basesize / 3) + ((step / 3) * i)
|
18
|
+
shape do
|
19
|
+
arc self.width / 2, self.height / 2,
|
20
|
+
size, size,
|
21
|
+
rotation * i, rotation * i + TWO_PI - HALF_PI
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
case stage
|
27
|
+
when 1; wide -= 0.1
|
28
|
+
when 2; wide += 0.1
|
29
|
+
when 3; basesize -= 1
|
30
|
+
when 4; basesize += 2
|
31
|
+
when 5; sw += 0.1
|
32
|
+
when 6; sw -= 0.01
|
33
|
+
when 7; step += 2
|
34
|
+
else step -= 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
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
|
@@ -0,0 +1,26 @@
|
|
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
|
@@ -0,0 +1,174 @@
|
|
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
|
@@ -0,0 +1,56 @@
|
|
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
|
@@ -0,0 +1,75 @@
|
|
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
|
@@ -0,0 +1,17 @@
|
|
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
|
@@ -0,0 +1,13 @@
|
|
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
|