shoes-dsl 4.0.0.pre2
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/CHANGELOG +84 -0
- data/Gemfile +24 -0
- data/Guardfile +11 -0
- data/LICENSE +31 -0
- data/README.md +201 -0
- data/ext/install/Rakefile +29 -0
- data/ext/install/shoes.bat +9 -0
- data/fonts/Coolvetica.ttf +0 -0
- data/fonts/Lacuna.ttf +0 -0
- data/lib/shoes/animation.rb +56 -0
- data/lib/shoes/app.rb +131 -0
- data/lib/shoes/arc.rb +25 -0
- data/lib/shoes/background.rb +24 -0
- data/lib/shoes/border.rb +24 -0
- data/lib/shoes/builtin_methods.rb +77 -0
- data/lib/shoes/button.rb +30 -0
- data/lib/shoes/check_button.rb +44 -0
- data/lib/shoes/color.rb +385 -0
- data/lib/shoes/common/background_element.rb +9 -0
- data/lib/shoes/common/changeable.rb +34 -0
- data/lib/shoes/common/clickable.rb +24 -0
- data/lib/shoes/common/inspect.rb +14 -0
- data/lib/shoes/common/positioning.rb +30 -0
- data/lib/shoes/common/registration.rb +33 -0
- data/lib/shoes/common/remove.rb +10 -0
- data/lib/shoes/common/state.rb +18 -0
- data/lib/shoes/common/style.rb +152 -0
- data/lib/shoes/common/style_normalizer.rb +16 -0
- data/lib/shoes/common/ui_element.rb +11 -0
- data/lib/shoes/common/visibility.rb +40 -0
- data/lib/shoes/configuration.rb +96 -0
- data/lib/shoes/dialog.rb +27 -0
- data/lib/shoes/dimension.rb +239 -0
- data/lib/shoes/dimensions.rb +209 -0
- data/lib/shoes/download.rb +121 -0
- data/lib/shoes/dsl.rb +591 -0
- data/lib/shoes/font.rb +49 -0
- data/lib/shoes/gradient.rb +31 -0
- data/lib/shoes/image.rb +29 -0
- data/lib/shoes/image_pattern.rb +12 -0
- data/lib/shoes/input_box.rb +60 -0
- data/lib/shoes/internal_app.rb +219 -0
- data/lib/shoes/key_event.rb +17 -0
- data/lib/shoes/line.rb +87 -0
- data/lib/shoes/link.rb +59 -0
- data/lib/shoes/link_hover.rb +5 -0
- data/lib/shoes/list_box.rb +50 -0
- data/lib/shoes/logger.rb +66 -0
- data/lib/shoes/logger/ruby.rb +18 -0
- data/lib/shoes/mock.rb +31 -0
- data/lib/shoes/mock/animation.rb +8 -0
- data/lib/shoes/mock/app.rb +47 -0
- data/lib/shoes/mock/arc.rb +9 -0
- data/lib/shoes/mock/background.rb +10 -0
- data/lib/shoes/mock/border.rb +7 -0
- data/lib/shoes/mock/button.rb +10 -0
- data/lib/shoes/mock/check.rb +25 -0
- data/lib/shoes/mock/clickable.rb +8 -0
- data/lib/shoes/mock/common_methods.rb +12 -0
- data/lib/shoes/mock/dialog.rb +13 -0
- data/lib/shoes/mock/download.rb +18 -0
- data/lib/shoes/mock/font.rb +17 -0
- data/lib/shoes/mock/image.rb +13 -0
- data/lib/shoes/mock/image_pattern.rb +9 -0
- data/lib/shoes/mock/input_box.rb +30 -0
- data/lib/shoes/mock/keypress.rb +10 -0
- data/lib/shoes/mock/keyrelease.rb +10 -0
- data/lib/shoes/mock/line.rb +14 -0
- data/lib/shoes/mock/link.rb +12 -0
- data/lib/shoes/mock/list_box.rb +19 -0
- data/lib/shoes/mock/oval.rb +12 -0
- data/lib/shoes/mock/progress.rb +10 -0
- data/lib/shoes/mock/radio.rb +27 -0
- data/lib/shoes/mock/rect.rb +14 -0
- data/lib/shoes/mock/shape.rb +20 -0
- data/lib/shoes/mock/slot.rb +16 -0
- data/lib/shoes/mock/sound.rb +8 -0
- data/lib/shoes/mock/star.rb +14 -0
- data/lib/shoes/mock/text_block.rb +36 -0
- data/lib/shoes/mock/timer.rb +8 -0
- data/lib/shoes/not_implemented_error.rb +4 -0
- data/lib/shoes/oval.rb +20 -0
- data/lib/shoes/point.rb +54 -0
- data/lib/shoes/progress.rb +25 -0
- data/lib/shoes/radio.rb +16 -0
- data/lib/shoes/rect.rb +21 -0
- data/lib/shoes/renamed_delegate.rb +15 -0
- data/lib/shoes/shape.rb +158 -0
- data/lib/shoes/slot.rb +271 -0
- data/lib/shoes/slot_contents.rb +50 -0
- data/lib/shoes/sound.rb +18 -0
- data/lib/shoes/span.rb +16 -0
- data/lib/shoes/star.rb +45 -0
- data/lib/shoes/text.rb +24 -0
- data/lib/shoes/text_block.rb +143 -0
- data/lib/shoes/text_block_dimensions.rb +52 -0
- data/lib/shoes/timer.rb +12 -0
- data/lib/shoes/url.rb +44 -0
- data/lib/shoes/version.rb +3 -0
- data/lib/shoes/widget.rb +69 -0
- data/manifests/common.rb +34 -0
- data/manifests/shoes-dsl.rb +34 -0
- data/shoes-dsl.gemspec +19 -0
- data/spec/code_coverage.rb +14 -0
- data/spec/shoes/animation_spec.rb +65 -0
- data/spec/shoes/app_spec.rb +484 -0
- data/spec/shoes/arc_spec.rb +51 -0
- data/spec/shoes/background_spec.rb +53 -0
- data/spec/shoes/border_spec.rb +47 -0
- data/spec/shoes/builtin_methods_spec.rb +110 -0
- data/spec/shoes/button_spec.rb +44 -0
- data/spec/shoes/check_spec.rb +35 -0
- data/spec/shoes/cli_spec.rb +15 -0
- data/spec/shoes/color_spec.rb +408 -0
- data/spec/shoes/common/inspect_spec.rb +26 -0
- data/spec/shoes/common/remove_spec.rb +38 -0
- data/spec/shoes/common/style_normalizer_spec.rb +28 -0
- data/spec/shoes/common/style_spec.rb +147 -0
- data/spec/shoes/configuration_spec.rb +36 -0
- data/spec/shoes/constants_spec.rb +38 -0
- data/spec/shoes/dialog_spec.rb +163 -0
- data/spec/shoes/dimension_spec.rb +407 -0
- data/spec/shoes/dimensions_spec.rb +837 -0
- data/spec/shoes/download_spec.rb +142 -0
- data/spec/shoes/flow_spec.rb +133 -0
- data/spec/shoes/font_spec.rb +37 -0
- data/spec/shoes/framework_learning_spec.rb +30 -0
- data/spec/shoes/gradient_spec.rb +32 -0
- data/spec/shoes/helpers/fake_element.rb +17 -0
- data/spec/shoes/helpers/inspect_helpers.rb +5 -0
- data/spec/shoes/helpers/sample17_helper.rb +66 -0
- data/spec/shoes/image_spec.rb +49 -0
- data/spec/shoes/images/shoe.jpg +0 -0
- data/spec/shoes/input_box_spec.rb +80 -0
- data/spec/shoes/integration_spec.rb +20 -0
- data/spec/shoes/internal_app_spec.rb +141 -0
- data/spec/shoes/keypress_spec.rb +11 -0
- data/spec/shoes/keyrelease_spec.rb +12 -0
- data/spec/shoes/line_spec.rb +49 -0
- data/spec/shoes/link_spec.rb +105 -0
- data/spec/shoes/list_box_spec.rb +74 -0
- data/spec/shoes/logger/ruby_spec.rb +8 -0
- data/spec/shoes/logger_spec.rb +45 -0
- data/spec/shoes/oval_spec.rb +24 -0
- data/spec/shoes/point_spec.rb +71 -0
- data/spec/shoes/progress_spec.rb +54 -0
- data/spec/shoes/radio_spec.rb +32 -0
- data/spec/shoes/rect_spec.rb +39 -0
- data/spec/shoes/renamed_delegate_spec.rb +70 -0
- data/spec/shoes/shape_spec.rb +95 -0
- data/spec/shoes/shared_examples/button.rb +6 -0
- data/spec/shoes/shared_examples/changeable.rb +26 -0
- data/spec/shoes/shared_examples/clickable.rb +5 -0
- data/spec/shoes/shared_examples/common_methods.rb +35 -0
- data/spec/shoes/shared_examples/dimensions.rb +32 -0
- data/spec/shoes/shared_examples/dsl.rb +44 -0
- data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
- data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
- data/spec/shoes/shared_examples/dsl/background.rb +26 -0
- data/spec/shoes/shared_examples/dsl/border.rb +10 -0
- data/spec/shoes/shared_examples/dsl/button.rb +5 -0
- data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
- data/spec/shoes/shared_examples/dsl/check.rb +11 -0
- data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
- data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
- data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
- data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
- data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
- data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
- data/spec/shoes/shared_examples/dsl/image.rb +21 -0
- data/spec/shoes/shared_examples/dsl/line.rb +9 -0
- data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
- data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
- data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
- data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
- data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
- data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
- data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
- data/spec/shoes/shared_examples/dsl/shape.rb +21 -0
- data/spec/shoes/shared_examples/dsl/star.rb +48 -0
- data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
- data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
- data/spec/shoes/shared_examples/dsl/style.rb +32 -0
- data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
- data/spec/shoes/shared_examples/dsl/video.rb +5 -0
- data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
- data/spec/shoes/shared_examples/hover_leave.rb +11 -0
- data/spec/shoes/shared_examples/parent.rb +6 -0
- data/spec/shoes/shared_examples/scroll.rb +41 -0
- data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
- data/spec/shoes/shared_examples/slot.rb +331 -0
- data/spec/shoes/shared_examples/state.rb +19 -0
- data/spec/shoes/shared_examples/style.rb +82 -0
- data/spec/shoes/slot_spec.rb +130 -0
- data/spec/shoes/sound_spec.rb +15 -0
- data/spec/shoes/span_spec.rb +112 -0
- data/spec/shoes/spec_helper.rb +24 -0
- data/spec/shoes/stack_spec.rb +79 -0
- data/spec/shoes/star_spec.rb +31 -0
- data/spec/shoes/text_block_dimensions_spec.rb +75 -0
- data/spec/shoes/text_block_spec.rb +270 -0
- data/spec/shoes/url_spec.rb +68 -0
- data/spec/shoes/widget_spec.rb +70 -0
- data/spec/shoes_spec.rb +44 -0
- data/spec/spec_helper.rb +18 -0
- data/static/Shoes.icns +0 -0
- data/static/shoes-icon.png +0 -0
- metadata +354 -0
data/lib/shoes/link.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
class Shoes
|
2
|
+
class Link < Span
|
3
|
+
|
4
|
+
include Common::Style
|
5
|
+
|
6
|
+
attr_reader :app, :parent, :gui, :blk
|
7
|
+
style_with :common_styles, :text_block_styles
|
8
|
+
STYLES = { underline: true, stroke: ::Shoes::COLORS[:blue], fill: nil }
|
9
|
+
|
10
|
+
def initialize(app, parent, texts, styles = {}, blk = nil)
|
11
|
+
@app = app
|
12
|
+
@parent = parent
|
13
|
+
style_init styles
|
14
|
+
@gui = Shoes.backend_for self
|
15
|
+
|
16
|
+
setup_click blk
|
17
|
+
super texts, @style
|
18
|
+
end
|
19
|
+
|
20
|
+
# Doesn't use Common::Clickable because of URL flavor option clicks
|
21
|
+
def setup_click(blk)
|
22
|
+
if blk.nil?
|
23
|
+
if @style[:click].respond_to? :call
|
24
|
+
blk = @style[:click]
|
25
|
+
else
|
26
|
+
# Slightly awkward, but we need App, not InternalApp, to call visit
|
27
|
+
blk = Proc.new { app.app.visit @style[:click] }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
click &blk
|
32
|
+
end
|
33
|
+
|
34
|
+
def click(&blk)
|
35
|
+
@gui.click blk if blk
|
36
|
+
@blk = blk
|
37
|
+
end
|
38
|
+
|
39
|
+
def pass_coordinates?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
def in_bounds?(x, y)
|
44
|
+
@gui.in_bounds?(x, y)
|
45
|
+
end
|
46
|
+
|
47
|
+
def remove
|
48
|
+
@gui.remove
|
49
|
+
end
|
50
|
+
|
51
|
+
def hidden?
|
52
|
+
@text_block.hidden?
|
53
|
+
end
|
54
|
+
|
55
|
+
def visible?
|
56
|
+
@text_block.visible?
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Shoes
|
2
|
+
class ListBox
|
3
|
+
include Common::UIElement
|
4
|
+
include Common::Style
|
5
|
+
include Common::Changeable
|
6
|
+
|
7
|
+
attr_reader :app, :parent, :dimensions, :gui
|
8
|
+
style_with :change, :choose, :common_styles, :dimensions, :items, :state, :text
|
9
|
+
STYLES = {width: 200, height: 20, items: [""]}
|
10
|
+
|
11
|
+
def initialize(app, parent, styles = {}, blk = nil)
|
12
|
+
@app = app
|
13
|
+
@parent = parent
|
14
|
+
style_init styles
|
15
|
+
@dimensions = Dimensions.new parent, @style
|
16
|
+
@parent.add_child self
|
17
|
+
@gui = Shoes.configuration.backend_for self, @parent.gui
|
18
|
+
change &blk if blk
|
19
|
+
|
20
|
+
choose @style[:choose]
|
21
|
+
end
|
22
|
+
|
23
|
+
def items=(values)
|
24
|
+
style(items: values)
|
25
|
+
@gui.update_items values
|
26
|
+
end
|
27
|
+
|
28
|
+
def text
|
29
|
+
@gui.text
|
30
|
+
end
|
31
|
+
|
32
|
+
def choose(item_or_hash = nil)
|
33
|
+
case item_or_hash
|
34
|
+
when String
|
35
|
+
style(choose: item_or_hash)
|
36
|
+
@gui.choose item_or_hash
|
37
|
+
when Hash
|
38
|
+
style(choose: item_or_hash[:item])
|
39
|
+
@gui.choose item_or_hash[:item]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
alias_method :choose=, :choose
|
44
|
+
|
45
|
+
def state=(value)
|
46
|
+
style(state: value)
|
47
|
+
@gui.enabled value.nil?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/shoes/logger.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
class Shoes
|
2
|
+
module Logger
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def register(name, obj)
|
6
|
+
@loggers ||= { }
|
7
|
+
@loggers[name] = obj
|
8
|
+
end
|
9
|
+
|
10
|
+
def unregister(name)
|
11
|
+
@loggers.delete(name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(name)
|
15
|
+
@loggers && @loggers[name]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.setup
|
20
|
+
Shoes.app do
|
21
|
+
def update
|
22
|
+
if @hash != Shoes::LOG.hash
|
23
|
+
@hash = Shoes::LOG.hash
|
24
|
+
@log.clear do
|
25
|
+
Shoes::LOG.each_with_index do |(typ, msg), index|
|
26
|
+
stack do
|
27
|
+
background "#f1f5e1" if index % 2 == 0
|
28
|
+
background rgb(220, 220, 220) if index % 2 != 0
|
29
|
+
para typ, :stroke => blue
|
30
|
+
flow do
|
31
|
+
stack :margin => 4 do
|
32
|
+
s = msg.to_s
|
33
|
+
para s, :margin => 4, :margin_top => 0
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
stack do
|
43
|
+
flow do
|
44
|
+
background black
|
45
|
+
stack do
|
46
|
+
tagline "Shoes Console", stroke: white
|
47
|
+
end
|
48
|
+
button "Clear", margin: 6, width: 80, height: 40, right: 10 do
|
49
|
+
Shoes::LOG.clear
|
50
|
+
end
|
51
|
+
end
|
52
|
+
@log, @hash = stack, nil
|
53
|
+
update
|
54
|
+
|
55
|
+
every(0.2) do
|
56
|
+
update
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
Dir[File.join(File.dirname(__FILE__), "logger", "*.rb")].each { |logger|
|
65
|
+
require logger
|
66
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
class Shoes
|
4
|
+
module Logger
|
5
|
+
class Ruby < SimpleDelegator
|
6
|
+
def initialize(device=STDERR)
|
7
|
+
require 'logger'
|
8
|
+
logger = ::Logger.new(device)
|
9
|
+
logger.formatter = proc do |severity, datetime, progname, message|
|
10
|
+
"%s: %s\n" % [severity, message]
|
11
|
+
end
|
12
|
+
super(logger)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Shoes::Logger.register(:ruby, Shoes::Logger::Ruby)
|
data/lib/shoes/mock.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'shoes/mock/common_methods'
|
2
|
+
require 'shoes/mock/clickable'
|
3
|
+
|
4
|
+
require 'shoes/mock/animation'
|
5
|
+
require 'shoes/mock/app'
|
6
|
+
require 'shoes/mock/arc'
|
7
|
+
require 'shoes/mock/background'
|
8
|
+
require 'shoes/mock/border'
|
9
|
+
require 'shoes/mock/button'
|
10
|
+
require 'shoes/mock/check'
|
11
|
+
require 'shoes/mock/download'
|
12
|
+
require 'shoes/mock/font'
|
13
|
+
require 'shoes/mock/image'
|
14
|
+
require 'shoes/mock/image_pattern'
|
15
|
+
require 'shoes/mock/input_box'
|
16
|
+
require 'shoes/mock/keypress'
|
17
|
+
require 'shoes/mock/keyrelease'
|
18
|
+
require 'shoes/mock/line'
|
19
|
+
require 'shoes/mock/link'
|
20
|
+
require 'shoes/mock/list_box'
|
21
|
+
require 'shoes/mock/oval'
|
22
|
+
require 'shoes/mock/progress'
|
23
|
+
require 'shoes/mock/radio'
|
24
|
+
require 'shoes/mock/rect'
|
25
|
+
require 'shoes/mock/star'
|
26
|
+
require 'shoes/mock/shape'
|
27
|
+
require 'shoes/mock/slot'
|
28
|
+
require 'shoes/mock/sound'
|
29
|
+
require 'shoes/mock/text_block'
|
30
|
+
require 'shoes/mock/dialog'
|
31
|
+
require 'shoes/mock/timer'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Shoes
|
2
|
+
module Mock
|
3
|
+
class App
|
4
|
+
|
5
|
+
attr_accessor :fullscreen
|
6
|
+
def initialize(dsl)
|
7
|
+
@dsl = dsl
|
8
|
+
@started = false
|
9
|
+
end
|
10
|
+
|
11
|
+
# suboptimal but good enough for now... calling the DSL lets the methods
|
12
|
+
# play ping pong calling each other... will think of something.
|
13
|
+
def width
|
14
|
+
@dsl.opts[:width]
|
15
|
+
end
|
16
|
+
|
17
|
+
def height
|
18
|
+
@dsl.opts[:height]
|
19
|
+
end
|
20
|
+
|
21
|
+
def open
|
22
|
+
@started = true
|
23
|
+
self.fullscreen = true if @dsl.start_as_fullscreen?
|
24
|
+
end
|
25
|
+
|
26
|
+
def quit
|
27
|
+
end
|
28
|
+
|
29
|
+
def started?
|
30
|
+
@started
|
31
|
+
end
|
32
|
+
|
33
|
+
def flush
|
34
|
+
end
|
35
|
+
|
36
|
+
def clipboard
|
37
|
+
end
|
38
|
+
|
39
|
+
def clipboard=(text)
|
40
|
+
end
|
41
|
+
|
42
|
+
def gutter
|
43
|
+
16
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Shoes
|
2
|
+
module Mock
|
3
|
+
class Check
|
4
|
+
include Shoes::Mock::CommonMethods
|
5
|
+
include Shoes::Mock::Clickable
|
6
|
+
|
7
|
+
def initialize(*opts)
|
8
|
+
end
|
9
|
+
|
10
|
+
def checked?
|
11
|
+
false
|
12
|
+
end
|
13
|
+
|
14
|
+
def checked=(*opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def focus
|
18
|
+
end
|
19
|
+
|
20
|
+
def enabled(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|