lacci 0.2.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.
- checksums.yaml +7 -0
- data/.rubocop.yml +85 -0
- data/.ruby-version +1 -0
- data/.vscode/extensions.json +5 -0
- data/.yardopts +12 -0
- data/CHANGELOG.md +19 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/CONTRIBUTING.md +20 -0
- data/Gemfile +24 -0
- data/LICENSE.txt +21 -0
- data/README.md +178 -0
- data/Rakefile +15 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/dev.yml +7 -0
- data/docs/static/PKGBUILD +47 -0
- data/docs/static/Shoes.icns +0 -0
- data/docs/static/avatar.png +0 -0
- data/docs/static/code_highlighter.js +188 -0
- data/docs/static/code_highlighter_ruby.js +26 -0
- data/docs/static/icon-debug.png +0 -0
- data/docs/static/icon-error.png +0 -0
- data/docs/static/icon-info.png +0 -0
- data/docs/static/icon-warn.png +0 -0
- data/docs/static/listbox_button1.png +0 -0
- data/docs/static/listbox_button2.png +0 -0
- data/docs/static/man-app.png +0 -0
- data/docs/static/man-builds.png +0 -0
- data/docs/static/man-builds1.png +0 -0
- data/docs/static/man-editor-notepad.png +0 -0
- data/docs/static/man-editor-osx.png +0 -0
- data/docs/static/man-ele-background.png +0 -0
- data/docs/static/man-ele-border.png +0 -0
- data/docs/static/man-ele-button.png +0 -0
- data/docs/static/man-ele-check.png +0 -0
- data/docs/static/man-ele-editbox.png +0 -0
- data/docs/static/man-ele-editline.png +0 -0
- data/docs/static/man-ele-image.png +0 -0
- data/docs/static/man-ele-listbox.png +0 -0
- data/docs/static/man-ele-progress.png +0 -0
- data/docs/static/man-ele-radio.png +0 -0
- data/docs/static/man-ele-shape.png +0 -0
- data/docs/static/man-ele-textblock.png +0 -0
- data/docs/static/man-ele-video.png +0 -0
- data/docs/static/man-intro-dmg.png +0 -0
- data/docs/static/man-intro-exe.png +0 -0
- data/docs/static/man-look-tiger.png +0 -0
- data/docs/static/man-look-ubuntu.png +0 -0
- data/docs/static/man-look-vista.png +0 -0
- data/docs/static/man-run-osx.png +0 -0
- data/docs/static/man-run-vista.png +0 -0
- data/docs/static/man-run-xp.png +0 -0
- data/docs/static/man-shot1.png +0 -0
- data/docs/static/manual-en.txt +3529 -0
- data/docs/static/manual-ja.txt +2829 -0
- data/docs/static/manual.css +171 -0
- data/docs/static/manual.md +3528 -0
- data/docs/static/menu-corner1.png +0 -0
- data/docs/static/menu-corner2.png +0 -0
- data/docs/static/menu-gray.png +0 -0
- data/docs/static/menu-left.png +0 -0
- data/docs/static/menu-right.png +0 -0
- data/docs/static/menu-top.png +0 -0
- data/docs/static/shoes-dmg.jpg +0 -0
- data/docs/static/shoes-icon-blue.png +0 -0
- data/docs/static/shoes-icon.png +0 -0
- data/docs/static/shoes-manual-apps.gif +0 -0
- data/docs/static/shoes_main_window.png +0 -0
- data/docs/static/stripe.png +0 -0
- data/docs/static/stubs/blank.exe +0 -0
- data/docs/static/stubs/blank.hfz +0 -0
- data/docs/static/stubs/blank.run +375 -0
- data/docs/static/stubs/cocoa-install +0 -0
- data/docs/static/stubs/sh-install +49 -0
- data/docs/static/stubs/shoes-stub-inject.exe +0 -0
- data/docs/static/stubs/shoes-stub.exe +0 -0
- data/docs/static/tutor-back.png +0 -0
- 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/backdround_with_image.rb +16 -0
- data/examples/bloopsaphone/working/1901_by_Aanand_Prasad.rb +478 -0
- data/examples/bloopsaphone/working/b1.rb +64 -0
- data/examples/bloopsaphone/working/b2.rb +36 -0
- data/examples/bloopsaphone/working/bloops_test.rb +41 -0
- data/examples/bloopsaphone/working/bloopsaphone_theme_song_by_why.rb +31 -0
- data/examples/bloopsaphone/working/feepogram.rb +67 -0
- data/examples/bloopsaphone/working/simpsons_theme_song_by_why.rb +14 -0
- data/examples/bloopsaphone/working/tune_cheeky_drat.rb +210 -0
- data/examples/button.rb +10 -0
- data/examples/button_alert.rb +6 -0
- data/examples/button_go_away.rb +6 -0
- data/examples/button_with_position_and_size.rb +7 -0
- data/examples/coffee.rb +14 -0
- data/examples/download.rb +5 -0
- data/examples/download_and_show_image.rb +28 -0
- data/examples/edit_box.rb +8 -0
- data/examples/edit_line.rb +8 -0
- data/examples/fill.rb +25 -0
- data/examples/flow.rb +11 -0
- data/examples/fonts.rb +6 -0
- data/examples/gen.rb +140 -0
- data/examples/get_headers.rb +10 -0
- data/examples/hello_world.rb +3 -0
- data/examples/highlander.rb +87 -0
- data/examples/image/clickable_image.rb +5 -0
- data/examples/image/image.rb +3 -0
- data/examples/image/image_size.rb +7 -0
- data/examples/image/image_with_position_and_size.rb +3 -0
- data/examples/info.rb +9 -0
- data/examples/legacy/not_checked/expert/colours.rb +105 -0
- data/examples/legacy/not_checked/expert/curve-animation.rb +31 -0
- data/examples/legacy/not_checked/expert/curve-control-point.rb +51 -0
- data/examples/legacy/not_checked/expert/custom-list-box.rb +53 -0
- data/examples/legacy/not_checked/expert/definr.rb +23 -0
- data/examples/legacy/not_checked/expert/funnies.rb +56 -0
- data/examples/legacy/not_checked/expert/minesweeper.rb +267 -0
- data/examples/legacy/not_checked/expert/othello.rb +318 -0
- data/examples/legacy/not_checked/expert/pong.rb +62 -0
- data/examples/legacy/not_checked/expert/tankspank.rb +385 -0
- data/examples/legacy/not_checked/expert/tooltips.rb +45 -0
- data/examples/legacy/not_checked/expert/url.rb +37 -0
- data/examples/legacy/not_checked/expert/video-player.rb +256 -0
- data/examples/legacy/not_checked/good/_why-stories.rb +44 -0
- data/examples/legacy/not_checked/good/_why-stories.yaml +387 -0
- data/examples/legacy/not_checked/good/arc.rb +37 -0
- data/examples/legacy/not_checked/good/cardflip.rb +141 -0
- data/examples/legacy/not_checked/good/clock.rb +51 -0
- data/examples/legacy/not_checked/good/console.rb +21 -0
- data/examples/legacy/not_checked/good/follow.rb +26 -0
- data/examples/legacy/not_checked/good/image-rotate.rb +14 -0
- data/examples/legacy/not_checked/good/paris.svg +7236 -0
- data/examples/legacy/not_checked/good/path-animation.rb +46 -0
- data/examples/legacy/not_checked/good/plots.rb +100 -0
- data/examples/legacy/not_checked/good/reminder.rb +174 -0
- data/examples/legacy/not_checked/good/svgview.rb +113 -0
- data/examples/legacy/not_checked/good/vjot.rb +56 -0
- data/examples/legacy/not_checked/shoes-contrib/.gitignore +2 -0
- data/examples/legacy/not_checked/shoes-contrib/README.md +34 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/animate-ovals.rb +21 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/flowers.rb +59 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/happy-trails.rb +31 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/mice-satellites.rb +27 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/oval-motion.rb +12 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/pink-bubbles.rb +34 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/pulsate.rb +18 -0
- data/examples/legacy/not_checked/shoes-contrib/animation/rotating-star.rb +18 -0
- data/examples/legacy/not_checked/shoes-contrib/app/download-and-save.rb +11 -0
- data/examples/legacy/not_checked/shoes-contrib/app/download.rb +10 -0
- data/examples/legacy/not_checked/shoes-contrib/app/get-google.rb +11 -0
- data/examples/legacy/not_checked/shoes-contrib/app/mouse-detection.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/app/resizeable-false.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/art/bubble-bullseye.rb +23 -0
- data/examples/legacy/not_checked/shoes-contrib/art/faded.rb +17 -0
- data/examples/legacy/not_checked/shoes-contrib/art/fill-oval.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/art/mask.rb +15 -0
- data/examples/legacy/not_checked/shoes-contrib/art/oval-gradient.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/art/star-gradient.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/basic-edit-box.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/basic-new-window.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-image.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-shape.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/class-book.rb +43 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/class-book.yaml +387 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/clock.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/edit-stack +14 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/gradient-shoes.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/list_box-shape-report.rb +19 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/rect-arrow.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/scribble.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/search.rb +32 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +16 -0
- data/examples/legacy/not_checked/shoes-contrib/basic/url-shoes-subclassing.rb +24 -0
- data/examples/legacy/not_checked/shoes-contrib/browser.rb +21 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/background-column.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/background.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/basic-fps.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/border-cat.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/button-block.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/check-mate.rb +15 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/common-styles.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/displace-animation.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/edit_box-character-count.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/edit_line-character-count.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/list_box-select-class.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/list_box.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/move-flow-animate.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/phat-button.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/popup.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/progress-bar.rb +10 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/radio-dreamcast-favs.rb +17 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/timer.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/elements/width-introspec.rb +8 -0
- data/examples/legacy/not_checked/shoes-contrib/events/background-hover.rb +11 -0
- data/examples/legacy/not_checked/shoes-contrib/events/motion-detect.rb +9 -0
- data/examples/legacy/not_checked/shoes-contrib/events/pressed-key.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/expert/expert-funnies.rb +51 -0
- data/examples/legacy/not_checked/shoes-contrib/expert/expert-irb.rb +112 -0
- data/examples/legacy/not_checked/shoes-contrib/expert/expert-othello.rb +319 -0
- data/examples/legacy/not_checked/shoes-contrib/good/good-arc.rb +37 -0
- data/examples/legacy/not_checked/shoes-contrib/good/good-clock.rb +51 -0
- data/examples/legacy/not_checked/shoes-contrib/good/good-follow.rb +26 -0
- data/examples/legacy/not_checked/shoes-contrib/good/good-reminder.rb +174 -0
- data/examples/legacy/not_checked/shoes-contrib/good/good-vjot.rb +56 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/ask.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/ask_color.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/ask_open_file.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/ask_save_file.rb +7 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/confirm.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/debug.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/exit.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/font.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/kernel/fonts.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/manipulation/append-slot.rb +9 -0
- data/examples/legacy/not_checked/shoes-contrib/manipulation/clear-slot.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/manipulation/prepend-slot.rb +6 -0
- data/examples/legacy/not_checked/shoes-contrib/manipulation/roll.rb +17 -0
- data/examples/legacy/not_checked/shoes-contrib/position/gutter-margin.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/position/stack-width.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-accordion.rb +75 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-shapes.rb +17 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-text.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-arc.rb +23 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-bounce.rb +24 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-calc.rb +70 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-chipmunk.rb +26 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-control-sizes.rb +24 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-curve.rb +26 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-dialogs.rb +29 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-downloader.rb +27 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-draw.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-editor.rb +28 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.rb +28 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.shy +0 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-mask.rb +21 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu.rb +31 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu1.rb +35 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-rubygems.rb +29 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-slide.rb +45 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-sphere.rb +28 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-sqlite3.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-timer.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/simple/simple-video.rb +13 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/alignment.rb +4 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/attachment.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/emphasis.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/gradient-angle.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/para-methods.rb +5 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/para-red-underlined.rb +3 -0
- data/examples/legacy/not_checked/shoes-contrib/styles/para-style-method.rb +4 -0
- data/examples/legacy/not_checked/shoes-dep-samples/expert-game-of-life.rb +243 -0
- data/examples/legacy/not_checked/shoes-dep-samples/expert-othello.rb +319 -0
- data/examples/legacy/not_checked/shoes-dep-samples/good-clock.rb +51 -0
- data/examples/legacy/not_checked/shoes-dep-samples/good-follow.rb +26 -0
- data/examples/legacy/not_checked/shoes-dep-samples/good-reminder.rb +174 -0
- data/examples/legacy/not_checked/shoes-dep-samples/good-vjot.rb +56 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-accordion.rb +75 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-shapes.rb +17 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-text.rb +13 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-arc.rb +23 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-bounce.rb +24 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-calc.rb +70 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-chipmunk.rb +26 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-control-sizes.rb +24 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-curve.rb +26 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-dialogs.rb +29 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-draw.rb +13 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-editor.rb +28 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.rb +28 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-form.shy +0 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-mask.rb +21 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu.rb +31 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-menu1.rb +35 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-rubygems.rb +29 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-slide.rb +45 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sphere.rb +28 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-sqlite3.rb +13 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-timer.rb +13 -0
- data/examples/legacy/not_checked/shoes-dep-samples/simple-video.rb +13 -0
- data/examples/legacy/not_checked/shoes3-tests/AnemicCinema1926marcelDuchampCut.mp4 +0 -0
- data/examples/legacy/not_checked/shoes3-tests/button/button.rb +53 -0
- data/examples/legacy/not_checked/shoes3-tests/cache/cache.rb +41 -0
- data/examples/legacy/not_checked/shoes3-tests/combo/combo.rb +24 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/bare.rb +34 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/downloader.rb +40 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/m1.rb +11 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/m2.rb +12 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/m3.rb +11 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/m4.rb +5 -0
- data/examples/legacy/not_checked/shoes3-tests/curl/typ.rb +30 -0
- data/examples/legacy/not_checked/shoes3-tests/cursor/c1.rb +21 -0
- data/examples/legacy/not_checked/shoes3-tests/decoration.rb +14 -0
- data/examples/legacy/not_checked/shoes3-tests/dialogs/ask.rb +6 -0
- data/examples/legacy/not_checked/shoes3-tests/dialogs/confirm.rb +6 -0
- data/examples/legacy/not_checked/shoes3-tests/editbox/editbox.rb +36 -0
- data/examples/legacy/not_checked/shoes3-tests/editline/editline.rb +27 -0
- data/examples/legacy/not_checked/shoes3-tests/events/button.rb +32 -0
- data/examples/legacy/not_checked/shoes3-tests/events/button.yaml +40 -0
- data/examples/legacy/not_checked/shoes3-tests/events/capture.rb +57 -0
- data/examples/legacy/not_checked/shoes3-tests/events/chipmunk.yaml +47 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event0.rb +8 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event1.rb +51 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event1.yaml +26 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event2.rb +46 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event3.rb +44 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event4.rb +65 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event5.rb +17 -0
- data/examples/legacy/not_checked/shoes3-tests/events/event6.rb +51 -0
- data/examples/legacy/not_checked/shoes3-tests/events/replay.rb +60 -0
- data/examples/legacy/not_checked/shoes3-tests/gapp/fullscreen.rb +38 -0
- data/examples/legacy/not_checked/shoes3-tests/gapp/icon.rb +56 -0
- data/examples/legacy/not_checked/shoes3-tests/gapp/mon1.rb +46 -0
- data/examples/legacy/not_checked/shoes3-tests/gapp/settings1.rb +22 -0
- data/examples/legacy/not_checked/shoes3-tests/gapp/title1.rb +34 -0
- data/examples/legacy/not_checked/shoes3-tests/indian.m4a +0 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/event.rb +33 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/menu1.rb +8 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/menu2.rb +25 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/menu3.rb +103 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/menu4.rb +41 -0
- data/examples/legacy/not_checked/shoes3-tests/menus/tests.txt +42 -0
- data/examples/legacy/not_checked/shoes3-tests/opacity.rb +13 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/^IRX.R +5219 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/^SPX +5219 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/cstest.rb +51 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr1.rb +73 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr2.rb +40 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr3.rb +47 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr4.rb +35 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr5.rb +31 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr6.rb +35 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/gr7.rb +37 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/grcsv.rb +219 -0
- data/examples/legacy/not_checked/shoes3-tests/plot/manual.rb +40 -0
- data/examples/legacy/not_checked/shoes3-tests/progress/progress.rb +29 -0
- data/examples/legacy/not_checked/shoes3-tests/radio/clear.rb +20 -0
- data/examples/legacy/not_checked/shoes3-tests/radio/group.rb +18 -0
- data/examples/legacy/not_checked/shoes3-tests/radio/multiple.rb +32 -0
- data/examples/legacy/not_checked/shoes3-tests/radio/nogroup.rb +9 -0
- data/examples/legacy/not_checked/shoes3-tests/simpletest.svg +14 -0
- data/examples/legacy/not_checked/shoes3-tests/spinner.rb +15 -0
- data/examples/legacy/not_checked/shoes3-tests/svg.rb +208 -0
- data/examples/legacy/not_checked/shoes3-tests/switch/switch.rb +28 -0
- data/examples/legacy/not_checked/shoes3-tests/systray/back.rb +20 -0
- data/examples/legacy/not_checked/shoes3-tests/systray/note.rb +17 -0
- data/examples/legacy/not_checked/shoes3-tests/terminal/cursor.rb +27 -0
- data/examples/legacy/not_checked/shoes3-tests/terminal/ed.rb +65 -0
- data/examples/legacy/not_checked/shoes3-tests/terminal/el.rb +50 -0
- data/examples/legacy/not_checked/shoes3-tests/terminal/logattr.rb +31 -0
- data/examples/legacy/not_checked/shoes3-tests/tests_color.rb +138 -0
- data/examples/legacy/not_checked/shoes3-tests/tests_svg.rb +228 -0
- data/examples/legacy/not_checked/shoes3-tests/tests_video_vlc.rb +186 -0
- data/examples/legacy/not_checked/shoes3-tests/tooltips.rb +20 -0
- data/examples/legacy/not_checked/shoes3-tests/video_vlc.rb +242 -0
- data/examples/legacy/not_checked/shoes3-tests/wheel/wheel1.rb +21 -0
- data/examples/legacy/not_checked/simple/accordion.rb +81 -0
- data/examples/legacy/not_checked/simple/anim-shapes.rb +17 -0
- data/examples/legacy/not_checked/simple/anim-text.rb +13 -0
- data/examples/legacy/not_checked/simple/arc.rb +23 -0
- data/examples/legacy/not_checked/simple/bounce.rb +24 -0
- data/examples/legacy/not_checked/simple/chipmunk.rb +26 -0
- data/examples/legacy/not_checked/simple/control-sizes.rb +24 -0
- data/examples/legacy/not_checked/simple/curve-control-points.rb +24 -0
- data/examples/legacy/not_checked/simple/curve.rb +26 -0
- data/examples/legacy/not_checked/simple/dialogs.rb +29 -0
- data/examples/legacy/not_checked/simple/downloader.rb +40 -0
- data/examples/legacy/not_checked/simple/downloader1.rb +31 -0
- data/examples/legacy/not_checked/simple/draw.rb +13 -0
- data/examples/legacy/not_checked/simple/editor.rb +28 -0
- data/examples/legacy/not_checked/simple/form.rb +30 -0
- data/examples/legacy/not_checked/simple/image.rb +21 -0
- data/examples/legacy/not_checked/simple/info.rb +78 -0
- data/examples/legacy/not_checked/simple/mask.rb +21 -0
- data/examples/legacy/not_checked/simple/mask2.rb +27 -0
- data/examples/legacy/not_checked/simple/menu.rb +31 -0
- data/examples/legacy/not_checked/simple/menu1.rb +35 -0
- data/examples/legacy/not_checked/simple/slide.rb +45 -0
- data/examples/legacy/not_checked/simple/sphere.rb +28 -0
- data/examples/legacy/not_checked/superleg.rb +244 -0
- data/examples/legacy/working/shoes-contrib/basic/a-poem.rb +24 -0
- data/examples/legacy/working/shoes-contrib/basic/basic-blocks-instances.rb +7 -0
- data/examples/legacy/working/shoes-contrib/basic/basic-blocks.rb +7 -0
- data/examples/legacy/working/shoes-contrib/basic/basic-slot.rb +8 -0
- data/examples/legacy/working/shoes-contrib/basic/intro.rb +20 -0
- data/examples/legacy/working/shoes-contrib/basic/two-column.rb +12 -0
- data/examples/legacy/working/shoes-contrib/elements/edit_box.rb +6 -0
- data/examples/legacy/working/shoes-contrib/kernel/alert.rb +3 -0
- data/examples/legacy/working/simple/calc.rb +71 -0
- data/examples/legacy/working/simple/sqlite3.rb +27 -0
- data/examples/legacy/working/simple/timer.rb +13 -0
- data/examples/line.rb +5 -0
- data/examples/link.rb +20 -0
- data/examples/list_box.rb +8 -0
- data/examples/local_fonts.rb +4 -0
- data/examples/local_images.rb +4 -0
- data/examples/motion_events.rb +20 -0
- data/examples/para/collection_of_arguments.rb +9 -0
- data/examples/para/hello_world.rb +5 -0
- data/examples/para/hide_and_show.rb +9 -0
- data/examples/para/rainbow.rb +11 -0
- data/examples/para/rainbow_2.rb +11 -0
- data/examples/para/sizes.rb +11 -0
- data/examples/para/sizes_2.rb +12 -0
- data/examples/para/strong.rb +3 -0
- data/examples/para_text_widgets.rb +4 -0
- data/examples/parse_xl_funnies.rb +58 -0
- data/examples/pirate.png +0 -0
- data/examples/raw_flow.rb +11 -0
- data/examples/ruby_racer.rb +50 -0
- data/examples/selfitude.rb +18 -0
- data/examples/shapes/arc.rb +8 -0
- data/examples/shapes/shapes.rb +8 -0
- data/examples/shapes/shapes_fill.rb +10 -0
- data/examples/shapes/star.rb +5 -0
- data/examples/shoes_school.rb +66 -0
- data/examples/shoes_splorer.rb +150 -0
- data/examples/simple_slides.rb +73 -0
- data/examples/skip_ci/parrot.rb +22 -0
- data/examples/skip_ci/say.rb +20 -0
- data/examples/sleepless.rb +26 -0
- data/examples/slots.rb +10 -0
- data/examples/spacing.rb +18 -0
- data/examples/span.rb +6 -0
- data/examples/stack/background.rb +35 -0
- data/examples/stack/border.rb +11 -0
- data/examples/stack/gradients.rb +6 -0
- data/examples/stack/raw_stack.rb +8 -0
- data/examples/stack/stack.rb +27 -0
- data/examples/text_change.rb +4 -0
- data/examples/text_sizes.rb +10 -0
- data/examples/timmy.rb +109 -0
- data/examples/title_and_resize.rb +3 -0
- data/examples/video.rb +10 -0
- data/exe/scarpe +107 -0
- data/fonts/Pacifico.ttf +0 -0
- data/lib/scarpe/alert.rb +19 -0
- data/lib/scarpe/arc.rb +49 -0
- data/lib/scarpe/background.rb +14 -0
- data/lib/scarpe/base64.rb +27 -0
- data/lib/scarpe/border.rb +16 -0
- data/lib/scarpe/button.rb +35 -0
- data/lib/scarpe/cats_cradle.rb +255 -0
- data/lib/scarpe/colors.rb +215 -0
- data/lib/scarpe/display_service.rb +185 -0
- data/lib/scarpe/document_root.rb +20 -0
- data/lib/scarpe/download.rb +123 -0
- data/lib/scarpe/edit_box.rb +29 -0
- data/lib/scarpe/edit_line.rb +25 -0
- data/lib/scarpe/fill.rb +23 -0
- data/lib/scarpe/flow.rb +18 -0
- data/lib/scarpe/font.rb +14 -0
- data/lib/scarpe/glibui/README.md +34 -0
- data/lib/scarpe/glibui/alert.rb +65 -0
- data/lib/scarpe/glibui/app.rb +27 -0
- data/lib/scarpe/glibui/background.rb +18 -0
- data/lib/scarpe/glibui/border.rb +22 -0
- data/lib/scarpe/glibui/button.rb +38 -0
- data/lib/scarpe/glibui/dimensions.rb +22 -0
- data/lib/scarpe/glibui/document_root.rb +33 -0
- data/lib/scarpe/glibui/edit_box.rb +44 -0
- data/lib/scarpe/glibui/edit_line.rb +43 -0
- data/lib/scarpe/glibui/flow.rb +33 -0
- data/lib/scarpe/glibui/html.rb +77 -0
- data/lib/scarpe/glibui/image.rb +36 -0
- data/lib/scarpe/glibui/link.rb +29 -0
- data/lib/scarpe/glibui/local_display.rb +62 -0
- data/lib/scarpe/glibui/para.rb +84 -0
- data/lib/scarpe/glibui/spacing.rb +41 -0
- data/lib/scarpe/glibui/stack.rb +33 -0
- data/lib/scarpe/glibui/text_widget.rb +30 -0
- data/lib/scarpe/glibui/widget.rb +81 -0
- data/lib/scarpe/glibui.rb +29 -0
- data/lib/scarpe/image.rb +35 -0
- data/lib/scarpe/libui/alert.rb +9 -0
- data/lib/scarpe/libui/button.rb +18 -0
- data/lib/scarpe/libui/colors.rb +157 -0
- data/lib/scarpe/libui/core.rb +66 -0
- data/lib/scarpe/libui/flow.rb +16 -0
- data/lib/scarpe/libui/libui.rb +45 -0
- data/lib/scarpe/libui/notepad.md +26 -0
- data/lib/scarpe/libui/para.rb +154 -0
- data/lib/scarpe/libui/stack.rb +34 -0
- data/lib/scarpe/line.rb +25 -0
- data/lib/scarpe/link.rb +25 -0
- data/lib/scarpe/list_box.rb +25 -0
- data/lib/scarpe/logger.rb +159 -0
- data/lib/scarpe/para.rb +92 -0
- data/lib/scarpe/promises.rb +405 -0
- data/lib/scarpe/shape.rb +20 -0
- data/lib/scarpe/slot.rb +7 -0
- data/lib/scarpe/spacing.rb +9 -0
- data/lib/scarpe/span.rb +26 -0
- data/lib/scarpe/stack.rb +20 -0
- data/lib/scarpe/star.rb +47 -0
- data/lib/scarpe/subscription_item.rb +60 -0
- data/lib/scarpe/unit_test_helpers.rb +236 -0
- data/lib/scarpe/version.rb +5 -0
- data/lib/scarpe/video.rb +15 -0
- data/lib/scarpe/widgets.rb +35 -0
- data/lib/scarpe/wv/alert.rb +65 -0
- data/lib/scarpe/wv/app.rb +104 -0
- data/lib/scarpe/wv/arc.rb +57 -0
- data/lib/scarpe/wv/background.rb +27 -0
- data/lib/scarpe/wv/border.rb +24 -0
- data/lib/scarpe/wv/button.rb +50 -0
- data/lib/scarpe/wv/control_interface.rb +147 -0
- data/lib/scarpe/wv/control_interface_test.rb +234 -0
- data/lib/scarpe/wv/dimensions.rb +22 -0
- data/lib/scarpe/wv/document_root.rb +8 -0
- data/lib/scarpe/wv/edit_box.rb +44 -0
- data/lib/scarpe/wv/edit_line.rb +43 -0
- data/lib/scarpe/wv/fill.rb +30 -0
- data/lib/scarpe/wv/flow.rb +24 -0
- data/lib/scarpe/wv/font.rb +36 -0
- data/lib/scarpe/wv/html.rb +108 -0
- data/lib/scarpe/wv/image.rb +41 -0
- data/lib/scarpe/wv/line.rb +38 -0
- data/lib/scarpe/wv/link.rb +29 -0
- data/lib/scarpe/wv/list_box.rb +50 -0
- data/lib/scarpe/wv/para.rb +90 -0
- data/lib/scarpe/wv/shape.rb +35 -0
- data/lib/scarpe/wv/shape_helper.rb +44 -0
- data/lib/scarpe/wv/slot.rb +81 -0
- data/lib/scarpe/wv/spacing.rb +41 -0
- data/lib/scarpe/wv/span.rb +66 -0
- data/lib/scarpe/wv/stack.rb +24 -0
- data/lib/scarpe/wv/star.rb +64 -0
- data/lib/scarpe/wv/subscription_item.rb +50 -0
- data/lib/scarpe/wv/text_widget.rb +30 -0
- data/lib/scarpe/wv/video.rb +42 -0
- data/lib/scarpe/wv/web_wrangler.rb +683 -0
- data/lib/scarpe/wv/webview_local_display.rb +73 -0
- data/lib/scarpe/wv/webview_relay_display.rb +185 -0
- data/lib/scarpe/wv/widget.rb +185 -0
- data/lib/scarpe/wv/wv_display_worker.rb +65 -0
- data/lib/scarpe/wv.rb +43 -0
- data/lib/scarpe/wv_local.rb +6 -0
- data/lib/scarpe/wv_relay.rb +6 -0
- data/lib/scarpe.rb +29 -0
- data/lib/shoes/app.rb +187 -0
- data/lib/shoes/constants.rb +26 -0
- data/lib/shoes/text_widget.rb +52 -0
- data/lib/shoes/widget.rb +209 -0
- data/lib/shoes.rb +65 -0
- data/logger/debug_web_wrangler.json +4 -0
- data/logger/scarpe_wv_test.json +4 -0
- data/scarpe-0.2.0.gem +0 -0
- data/scarpe.gemspec +44 -0
- data/scarpegen.rb +193 -0
- data/sig/scarpe.rbs +4 -0
- data/templates/basic_class_template.erb +38 -0
- data/templates/class_template_with_event_bind.erb +27 -0
- data/templates/class_template_with_shapes.erb +43 -0
- data/templates/example_template.erb +3 -0
- data/templates/module_template.erb +12 -0
- data/templates/webview_template.erb +27 -0
- metadata +606 -0
data/lib/shoes/app.rb
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Shoes
|
4
|
+
class App < Shoes::Widget
|
5
|
+
include Scarpe::Log
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :instance
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :document_root
|
12
|
+
|
13
|
+
display_properties :title, :width, :height, :resizable, :debug
|
14
|
+
|
15
|
+
def initialize(
|
16
|
+
title: "Scarpe!",
|
17
|
+
width: 480,
|
18
|
+
height: 420,
|
19
|
+
resizable: true,
|
20
|
+
debug: ENV["SCARPE_DEBUG"] ? true : false,
|
21
|
+
&app_code_body
|
22
|
+
)
|
23
|
+
if Shoes::App.instance
|
24
|
+
@log.error("Trying to create a second Shoes::App in the same process! Fail!")
|
25
|
+
raise "Cannot create multiple Shoes::App objects!"
|
26
|
+
else
|
27
|
+
Shoes::App.instance = self
|
28
|
+
end
|
29
|
+
|
30
|
+
log_init("Shoes::App")
|
31
|
+
|
32
|
+
@do_shutdown = false
|
33
|
+
|
34
|
+
super
|
35
|
+
|
36
|
+
# This creates the DocumentRoot, including its corresponding display widget
|
37
|
+
@document_root = Scarpe::DocumentRoot.new
|
38
|
+
|
39
|
+
@slots = []
|
40
|
+
|
41
|
+
# Now create the App display widget
|
42
|
+
create_display_widget
|
43
|
+
|
44
|
+
# Set up testing events *after* Display Service basic objects exist
|
45
|
+
if ENV["SCARPE_APP_TEST"]
|
46
|
+
test_code = File.read ENV["SCARPE_APP_TEST"]
|
47
|
+
if test_code != ""
|
48
|
+
self.instance_eval test_code
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@app_code_body = app_code_body
|
53
|
+
|
54
|
+
# Try to de-dup as much as possible and not send repeat or multiple
|
55
|
+
# destroy events
|
56
|
+
@watch_for_destroy = bind_shoes_event(event_name: "destroy") do
|
57
|
+
Shoes::DisplayService.unsub_from_events(@watch_for_destroy) if @watch_for_destroy
|
58
|
+
@watch_for_destroy = nil
|
59
|
+
self.destroy(send_event: false)
|
60
|
+
end
|
61
|
+
|
62
|
+
Signal.trap("INT") do
|
63
|
+
@log.warning("App interrupted by signal, stopping...")
|
64
|
+
puts "\nStopping Scarpe app..."
|
65
|
+
destroy
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def init
|
70
|
+
send_shoes_event(event_name: "init")
|
71
|
+
return if @do_shutdown
|
72
|
+
|
73
|
+
::Shoes::App.instance.with_slot(@document_root, &@app_code_body)
|
74
|
+
end
|
75
|
+
|
76
|
+
# "Container" widgets like flows, stacks, masks and the document root
|
77
|
+
# are considered "slots" in Scarpe parlance. When a new slot is created,
|
78
|
+
# we push it here in order to track what widgets are found in that slot.
|
79
|
+
def push_slot(slot)
|
80
|
+
@slots.push(slot)
|
81
|
+
end
|
82
|
+
|
83
|
+
def pop_slot
|
84
|
+
return if @slots.size <= 1
|
85
|
+
|
86
|
+
@slots.pop
|
87
|
+
end
|
88
|
+
|
89
|
+
def current_slot
|
90
|
+
@slots[-1]
|
91
|
+
end
|
92
|
+
|
93
|
+
def with_slot(slot_item, &block)
|
94
|
+
return unless block_given?
|
95
|
+
|
96
|
+
push_slot(slot_item)
|
97
|
+
Shoes::App.instance.instance_eval(&block)
|
98
|
+
ensure
|
99
|
+
pop_slot
|
100
|
+
end
|
101
|
+
|
102
|
+
# This isn't supposed to return. The display service should take control
|
103
|
+
# of the main thread. Local Webview even stops any background threads.
|
104
|
+
def run
|
105
|
+
if @do_shutdown
|
106
|
+
$stderr.puts "Destroy has already been signaled, but we just called Shoes::App.run!"
|
107
|
+
return
|
108
|
+
end
|
109
|
+
send_shoes_event(event_name: "run")
|
110
|
+
end
|
111
|
+
|
112
|
+
def destroy(send_event: true)
|
113
|
+
@do_shutdown = true
|
114
|
+
send_shoes_event(event_name: "destroy") if send_event
|
115
|
+
end
|
116
|
+
|
117
|
+
def all_widgets
|
118
|
+
out = []
|
119
|
+
|
120
|
+
to_add = @document_root.children
|
121
|
+
until to_add.empty?
|
122
|
+
out.concat(to_add)
|
123
|
+
to_add = to_add.flat_map(&:children).compact
|
124
|
+
end
|
125
|
+
|
126
|
+
out
|
127
|
+
end
|
128
|
+
|
129
|
+
# We can add various ways to find widgets here.
|
130
|
+
# These are sort of like Shoes selectors, used for testing.
|
131
|
+
def find_widgets_by(*specs)
|
132
|
+
widgets = all_widgets
|
133
|
+
specs.each do |spec|
|
134
|
+
if spec.is_a?(Class)
|
135
|
+
widgets.select! { |w| spec === w }
|
136
|
+
elsif spec.is_a?(Symbol)
|
137
|
+
s = spec.to_s
|
138
|
+
case s[0]
|
139
|
+
when "$"
|
140
|
+
begin
|
141
|
+
# I'm not finding a global_variable_get or similar...
|
142
|
+
global_value = eval s
|
143
|
+
widgets &= [global_value]
|
144
|
+
rescue
|
145
|
+
raise "Error getting global variable: #{spec.inspect}"
|
146
|
+
end
|
147
|
+
when "@"
|
148
|
+
if app.instance_variables.include?(spec)
|
149
|
+
widgets &= [self.instance_variable_get(spec)]
|
150
|
+
else
|
151
|
+
raise "Can't find top-level instance variable: #{spec.inspect}!"
|
152
|
+
end
|
153
|
+
else
|
154
|
+
end
|
155
|
+
else
|
156
|
+
raise("Don't know how to find widgets by #{spec.inspect}!")
|
157
|
+
end
|
158
|
+
end
|
159
|
+
widgets
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# DSL methods
|
165
|
+
class Shoes::App
|
166
|
+
def background(...)
|
167
|
+
current_slot.background(...)
|
168
|
+
end
|
169
|
+
|
170
|
+
def border(...)
|
171
|
+
current_slot.border(...)
|
172
|
+
end
|
173
|
+
|
174
|
+
def motion(&block)
|
175
|
+
subscription_item(shoes_api_name: "motion", &block)
|
176
|
+
end
|
177
|
+
|
178
|
+
def hover(&block)
|
179
|
+
subscription_item(shoes_api_name: "hover", &block)
|
180
|
+
end
|
181
|
+
|
182
|
+
def click(&block)
|
183
|
+
subscription_item(shoes_api_name: "click", &block)
|
184
|
+
end
|
185
|
+
|
186
|
+
alias_method :info, :puts
|
187
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tmpdir"
|
4
|
+
|
5
|
+
module Shoes
|
6
|
+
module Constants
|
7
|
+
def self.find_lib_dir
|
8
|
+
homes = [
|
9
|
+
[ENV["LOCALAPPDATA"], "Shoes"],
|
10
|
+
[ENV["APPDATA"], "Shoes"],
|
11
|
+
[ENV["HOME"], ".shoes"],
|
12
|
+
[Dir.tmpdir, "shoes"],
|
13
|
+
]
|
14
|
+
top, file = homes.detect { |home_top, _| home_top && File.exist?(home_top) }
|
15
|
+
File.join(top, file)
|
16
|
+
end
|
17
|
+
|
18
|
+
LIB_DIR = find_lib_dir
|
19
|
+
|
20
|
+
# Math constants from Shoes3
|
21
|
+
RAD2PI = 0.01745329251994329577
|
22
|
+
TWO_PI = 6.28318530717958647693
|
23
|
+
HALF_PI = 1.57079632679489661923
|
24
|
+
PI = 3.14159265358979323846
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Scarpe::TextWidget
|
4
|
+
|
5
|
+
module Shoes
|
6
|
+
class TextWidget < Shoes::Widget
|
7
|
+
class << self
|
8
|
+
# rubocop:disable Lint/MissingSuper
|
9
|
+
def inherited(subclass)
|
10
|
+
Shoes::Widget.widget_classes ||= []
|
11
|
+
Shoes::Widget.widget_classes << subclass
|
12
|
+
end
|
13
|
+
# rubocop:enable Lint/MissingSuper
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def default_text_widget_with(element)
|
19
|
+
class_name = element.capitalize
|
20
|
+
|
21
|
+
widget_class = Class.new(Shoes::TextWidget) do
|
22
|
+
# Can we just change content to text to match the Shoes API?
|
23
|
+
display_property :content
|
24
|
+
|
25
|
+
def initialize(content)
|
26
|
+
@content = content
|
27
|
+
|
28
|
+
super
|
29
|
+
|
30
|
+
create_display_widget
|
31
|
+
end
|
32
|
+
|
33
|
+
def text
|
34
|
+
self.content
|
35
|
+
end
|
36
|
+
|
37
|
+
def text=(new_text)
|
38
|
+
self.content = new_text
|
39
|
+
end
|
40
|
+
end
|
41
|
+
# TODO: move this to Shoes module
|
42
|
+
Scarpe.const_set class_name, widget_class
|
43
|
+
widget_class.class_eval do
|
44
|
+
display_property :content
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
Shoes.default_text_widget_with(:code)
|
51
|
+
Shoes.default_text_widget_with(:em)
|
52
|
+
Shoes.default_text_widget_with(:strong)
|
data/lib/shoes/widget.rb
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Shoes
|
4
|
+
# Shoes::Widget
|
5
|
+
#
|
6
|
+
# This is the display-service portable Shoes Widget interface. Visible Shoes
|
7
|
+
# widgets like buttons inherit from this. Compound widgets made of multiple
|
8
|
+
# different smaller Widgets inherit from it in their various apps or libraries.
|
9
|
+
# The Shoes Widget helps build a Shoes-side widget tree, with parents and
|
10
|
+
# children. Any API that applies to all widgets (e.g. remove) should be
|
11
|
+
# defined here.
|
12
|
+
#
|
13
|
+
class Widget < Shoes::Linkable
|
14
|
+
include Scarpe::Log
|
15
|
+
include Scarpe::Colors
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_accessor :widget_classes
|
19
|
+
|
20
|
+
def inherited(subclass)
|
21
|
+
Shoes::Widget.widget_classes ||= []
|
22
|
+
Shoes::Widget.widget_classes << subclass
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def dsl_name
|
27
|
+
n = name.split("::").last.chomp("Widget")
|
28
|
+
n.gsub(/(.)([A-Z])/, '\1_\2').downcase
|
29
|
+
end
|
30
|
+
|
31
|
+
def widget_class_by_name(name)
|
32
|
+
widget_classes.detect { |k| k.dsl_name == name.to_s }
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def linkable_properties
|
38
|
+
@linkable_properties ||= []
|
39
|
+
end
|
40
|
+
|
41
|
+
def linkable_properties_hash
|
42
|
+
@linkable_properties_hash ||= {}
|
43
|
+
end
|
44
|
+
|
45
|
+
public
|
46
|
+
|
47
|
+
# Display properties in Shoes Linkables are automatically sync'd with the display side objects.
|
48
|
+
# TODO: do we want types or other modifiers on specific properties?
|
49
|
+
def display_property(name)
|
50
|
+
name = name.to_s
|
51
|
+
|
52
|
+
return if linkable_properties_hash[name]
|
53
|
+
|
54
|
+
linkable_properties << { name: name }
|
55
|
+
linkable_properties_hash[name] = true
|
56
|
+
end
|
57
|
+
|
58
|
+
# Add these names as display properties
|
59
|
+
def display_properties(*names)
|
60
|
+
names.each { |n| display_property(n) }
|
61
|
+
end
|
62
|
+
|
63
|
+
def display_property_names
|
64
|
+
parent_prop_names = self != Shoes::Widget ? self.superclass.display_property_names : []
|
65
|
+
|
66
|
+
parent_prop_names | linkable_properties.map { |prop| prop[:name] }
|
67
|
+
end
|
68
|
+
|
69
|
+
def display_property_name?(name)
|
70
|
+
linkable_properties_hash[name.to_s] ||
|
71
|
+
(self != Shoes::Widget && superclass.display_property_name?(name))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def initialize(*args, **kwargs)
|
76
|
+
log_init("Widget")
|
77
|
+
|
78
|
+
self.class.display_property_names.each do |prop|
|
79
|
+
if kwargs[prop.to_sym]
|
80
|
+
instance_variable_set("@" + prop, kwargs[prop.to_sym])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
super() # linkable_id defaults to object_id
|
85
|
+
end
|
86
|
+
|
87
|
+
def inspect
|
88
|
+
"#<#{self.class}:#{self.object_id} " +
|
89
|
+
"@linkable_id=#{@linkable_id.inspect} @parent=#{@parent.inspect} " +
|
90
|
+
"@children=#{@children.inspect} properties=#{display_property_values.inspect}>"
|
91
|
+
end
|
92
|
+
|
93
|
+
def bind_self_event(event_name, &block)
|
94
|
+
raise("Widget has no linkable_id! #{inspect}") unless linkable_id
|
95
|
+
|
96
|
+
bind_shoes_event(event_name: event_name, target: linkable_id, &block)
|
97
|
+
end
|
98
|
+
|
99
|
+
def bind_no_target_event(event_name, &block)
|
100
|
+
bind_shoes_event(event_name:, &block)
|
101
|
+
end
|
102
|
+
|
103
|
+
def display_property_values
|
104
|
+
all_property_names = self.class.display_property_names
|
105
|
+
|
106
|
+
properties = {}
|
107
|
+
all_property_names.each do |prop|
|
108
|
+
properties[prop] = instance_variable_get("@" + prop)
|
109
|
+
end
|
110
|
+
properties["shoes_linkable_id"] = self.linkable_id
|
111
|
+
properties
|
112
|
+
end
|
113
|
+
|
114
|
+
def create_display_widget
|
115
|
+
klass_name = self.class.name.delete_prefix("Scarpe::").delete_prefix("Shoes::")
|
116
|
+
|
117
|
+
# Should we save a reference to widget for later reference?
|
118
|
+
::Shoes::DisplayService.display_service.create_display_widget_for(klass_name, self.linkable_id, display_property_values)
|
119
|
+
end
|
120
|
+
|
121
|
+
attr_reader :parent
|
122
|
+
attr_reader :children
|
123
|
+
|
124
|
+
def set_parent(new_parent)
|
125
|
+
@parent&.remove_child(self)
|
126
|
+
new_parent&.add_child(self)
|
127
|
+
@parent = new_parent
|
128
|
+
send_shoes_event(new_parent.linkable_id, event_name: "parent", target: linkable_id)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Do not call directly, use set_parent
|
132
|
+
def remove_child(child)
|
133
|
+
@children ||= []
|
134
|
+
unless @children.include?(child)
|
135
|
+
@log.warn("remove_child: no such child(#{child.inspect}) for parent(#{parent.inspect})!")
|
136
|
+
end
|
137
|
+
@children.delete(child)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Do not call directly, use set_parent
|
141
|
+
def add_child(child)
|
142
|
+
@children ||= []
|
143
|
+
@children << child
|
144
|
+
end
|
145
|
+
|
146
|
+
# Removes the element from the Shoes::Widget tree
|
147
|
+
def destroy
|
148
|
+
@parent&.remove_child(self)
|
149
|
+
send_shoes_event(event_name: "destroy", target: linkable_id)
|
150
|
+
end
|
151
|
+
|
152
|
+
alias_method :destroy_self, :destroy
|
153
|
+
|
154
|
+
# We use method_missing for widget-creating methods like "button",
|
155
|
+
# and also to auto-create display-property getters and setters.
|
156
|
+
def method_missing(name, *args, **kwargs, &block)
|
157
|
+
name_s = name.to_s
|
158
|
+
|
159
|
+
if name_s[-1] == "="
|
160
|
+
prop_name = name_s[0..-2]
|
161
|
+
if self.class.display_property_name?(prop_name)
|
162
|
+
self.class.define_method(name) do |new_value|
|
163
|
+
raise "Trying to set display properties in an object with no linkable ID!" unless linkable_id
|
164
|
+
|
165
|
+
instance_variable_set("@" + prop_name, new_value)
|
166
|
+
send_shoes_event({ prop_name => new_value }, event_name: "prop_change", target: linkable_id)
|
167
|
+
end
|
168
|
+
|
169
|
+
return self.send(name, *args, **kwargs, &block)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
if self.class.display_property_name?(name_s)
|
174
|
+
self.class.define_method(name) do
|
175
|
+
raise "Trying to get display properties in an object with no linkable ID!" unless linkable_id
|
176
|
+
|
177
|
+
instance_variable_get("@" + name_s)
|
178
|
+
end
|
179
|
+
|
180
|
+
return self.send(name, *args, **kwargs, &block)
|
181
|
+
end
|
182
|
+
|
183
|
+
klass = Widget.widget_class_by_name(name)
|
184
|
+
return super unless klass
|
185
|
+
|
186
|
+
::Shoes::Widget.define_method(name) do |*args, **kwargs, &block|
|
187
|
+
# Look up the Shoes widget and create it...
|
188
|
+
widget_instance = klass.new(*args, **kwargs, &block)
|
189
|
+
|
190
|
+
unless klass.ancestors.include?(Shoes::TextWidget)
|
191
|
+
widget_instance.set_parent Shoes::App.instance.current_slot
|
192
|
+
end
|
193
|
+
|
194
|
+
widget_instance
|
195
|
+
end
|
196
|
+
|
197
|
+
send(name, *args, **kwargs, &block)
|
198
|
+
end
|
199
|
+
|
200
|
+
def respond_to_missing?(name, include_private = false)
|
201
|
+
name_s = name.to_s
|
202
|
+
return true if self.class.display_property_name?(name_s)
|
203
|
+
return true if self.class.display_property_name?(name_s[0..-2]) && name_s[-1] == "="
|
204
|
+
return true if Widget.widget_class_by_name(name_s)
|
205
|
+
|
206
|
+
super
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
data/lib/shoes.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# We're separating Shoes from Scarpe, a little at a time. This should eventually be requirable
|
4
|
+
# without using Scarpe at all.
|
5
|
+
#
|
6
|
+
# This Shoes gem will, if all goes well, be a lot like the old Shoes-core from Shoes4: a way
|
7
|
+
# to handle the DSL and command-line parts of Shoes without knowing anything about how the
|
8
|
+
# display side works at all.
|
9
|
+
|
10
|
+
# This will never be triggered -- we use the (...) feature below, which means this
|
11
|
+
# file won't even parse in old Rubies.
|
12
|
+
if RUBY_VERSION[0..2] < "3.2"
|
13
|
+
Scarpe::Logger.logger("Scarpe").error("Scarpe requires Ruby 3.2 or higher!")
|
14
|
+
exit(-1)
|
15
|
+
end
|
16
|
+
|
17
|
+
require_relative "shoes/constants"
|
18
|
+
module Kernel
|
19
|
+
include Shoes::Constants
|
20
|
+
end
|
21
|
+
|
22
|
+
class Shoes::Error < StandardError; end
|
23
|
+
|
24
|
+
# The module containing Shoes in all its glory.
|
25
|
+
# Shoes is a platform-independent GUI library, designed to create
|
26
|
+
# small visual applications in Ruby.
|
27
|
+
#
|
28
|
+
module Shoes
|
29
|
+
class << self
|
30
|
+
# Creates a Shoes app with a new window. The block parameter is used to create
|
31
|
+
# widgets and set up handlers. Arguments are passed to Shoes::App.new internally.
|
32
|
+
#
|
33
|
+
# @incompatibility In Shoes3, this method will return normally.
|
34
|
+
# In Scarpe, after the block is executed, the method will not return and Scarpe
|
35
|
+
# will retain control of execution until the window is closed and the app quits.
|
36
|
+
#
|
37
|
+
# @incompatibility In Shoes3 the parameters were a hash of options, not keyword arguments.
|
38
|
+
#
|
39
|
+
# @example Simple one-button app
|
40
|
+
# Scarpe.app(title: "Button!", width: 200, height: 200) do
|
41
|
+
# @p = para "Press it NOW!"
|
42
|
+
# button("clicky") { @p.replace("You pressed it! CELEBRATION!") }
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# @param title [String] The new app window title
|
46
|
+
# @param width [Integer] The new app window width
|
47
|
+
# @param height [Integer] The new app window height
|
48
|
+
# @param resizable [Boolean] Whether the app window should be resizeable
|
49
|
+
# @return [void]
|
50
|
+
# @see Shoes::App#new
|
51
|
+
def app(
|
52
|
+
title: "Scarpe!",
|
53
|
+
width: 480,
|
54
|
+
height: 420,
|
55
|
+
resizable: true,
|
56
|
+
&app_code_body
|
57
|
+
)
|
58
|
+
app = Shoes::App.new(title:, width:, height:, resizable:, &app_code_body)
|
59
|
+
app.init
|
60
|
+
app.run
|
61
|
+
app.destroy
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/scarpe-0.2.0.gem
ADDED
Binary file
|
data/scarpe.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/scarpe/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "scarpe"
|
7
|
+
spec.version = Scarpe::VERSION
|
8
|
+
spec.authors = ["Marco Concetto Rudilosso"]
|
9
|
+
spec.email = ["marcoc.r@outlook.com"]
|
10
|
+
|
11
|
+
spec.summary = "Scarpe - shoes but running on webview"
|
12
|
+
spec.homepage = "https://github.com/Maaarcocr/scarpe"
|
13
|
+
spec.license = "MIT"
|
14
|
+
spec.required_ruby_version = ">= 3.2.0"
|
15
|
+
|
16
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
|
17
|
+
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/Maaarcocr/scarpe"
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/Maaarcocr/scarpe/blob/main/CHANGELOG.md"
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
25
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
26
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
spec.add_dependency "fastimage"
|
34
|
+
spec.add_dependency "glimmer-dsl-libui"
|
35
|
+
spec.add_dependency "nokogiri"
|
36
|
+
spec.add_dependency "sqlite3"
|
37
|
+
|
38
|
+
spec.add_dependency "bloops", "~>0.5"
|
39
|
+
spec.add_dependency "logging", "~>2.3.1"
|
40
|
+
spec.add_dependency "webview_ruby", "~>0.1.1"
|
41
|
+
|
42
|
+
# For more information and examples about making a new gem, check out our
|
43
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
44
|
+
end
|