shoes-core 4.0.0.pre8 → 4.0.0.pre9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/shoes-picker +1 -0
- data/lib/shoes.rb +1 -0
- data/lib/shoes/animation.rb +1 -0
- data/lib/shoes/app.rb +7 -1
- data/lib/shoes/arc.rb +2 -3
- data/lib/shoes/arrow.rb +2 -3
- data/lib/shoes/background.rb +2 -2
- data/lib/shoes/border.rb +2 -2
- data/lib/shoes/builtin_methods.rb +2 -2
- data/lib/shoes/button.rb +2 -2
- data/lib/shoes/check_button.rb +2 -2
- data/lib/shoes/color.rb +1 -0
- data/lib/shoes/color/dsl.rb +1 -0
- data/lib/shoes/color/dsl_helpers.rb +1 -0
- data/lib/shoes/color/hex_converter.rb +1 -0
- data/lib/shoes/common/art_element.rb +6 -9
- data/lib/shoes/common/attachable.rb +1 -0
- data/lib/shoes/common/background_element.rb +2 -11
- data/lib/shoes/common/changeable.rb +1 -0
- data/lib/shoes/common/clickable.rb +1 -0
- data/lib/shoes/common/fill.rb +1 -0
- data/lib/shoes/common/hover.rb +2 -1
- data/lib/shoes/common/inspect.rb +1 -0
- data/lib/shoes/common/link_finder.rb +1 -0
- data/lib/shoes/common/positioning.rb +1 -0
- data/lib/shoes/common/registration.rb +1 -0
- data/lib/shoes/common/remove.rb +1 -0
- data/lib/shoes/common/rotate.rb +1 -0
- data/lib/shoes/common/safely_evaluate.rb +13 -0
- data/lib/shoes/common/state.rb +4 -10
- data/lib/shoes/common/stroke.rb +1 -0
- data/lib/shoes/common/style.rb +13 -3
- data/lib/shoes/common/style_normalizer.rb +1 -0
- data/lib/shoes/common/translate.rb +1 -0
- data/lib/shoes/common/ui_element.rb +67 -5
- data/lib/shoes/common/visibility.rb +7 -6
- data/lib/shoes/configuration.rb +5 -16
- data/lib/shoes/console.rb +91 -0
- data/lib/shoes/core.rb +1 -1
- data/lib/shoes/core/version.rb +1 -1
- data/lib/shoes/dialog.rb +1 -0
- data/lib/shoes/dimension.rb +1 -0
- data/lib/shoes/dimensions.rb +1 -0
- data/lib/shoes/download.rb +1 -0
- data/lib/shoes/dsl.rb +28 -588
- data/lib/shoes/dsl/animate.rb +51 -0
- data/lib/shoes/dsl/art.rb +256 -0
- data/lib/shoes/dsl/element.rb +56 -0
- data/lib/shoes/dsl/interaction.rb +76 -0
- data/lib/shoes/dsl/media.rb +38 -0
- data/lib/shoes/dsl/setup.rb +42 -0
- data/lib/shoes/dsl/style.rb +81 -0
- data/lib/shoes/dsl/text.rb +50 -0
- data/lib/shoes/file_not_found_error.rb +1 -0
- data/lib/shoes/font.rb +2 -1
- data/lib/shoes/gradient.rb +1 -0
- data/lib/shoes/image.rb +2 -2
- data/lib/shoes/image_pattern.rb +1 -0
- data/lib/shoes/input_box.rb +11 -2
- data/lib/shoes/internal_app.rb +16 -3
- data/lib/shoes/key_event.rb +1 -0
- data/lib/shoes/line.rb +2 -3
- data/lib/shoes/link.rb +2 -0
- data/lib/shoes/list_box.rb +3 -3
- data/lib/shoes/logger_collection.rb +38 -0
- data/lib/shoes/mock.rb +1 -0
- data/lib/shoes/mock/animation.rb +1 -0
- data/lib/shoes/mock/app.rb +1 -0
- data/lib/shoes/mock/arc.rb +1 -0
- data/lib/shoes/mock/arrow.rb +1 -0
- data/lib/shoes/mock/background.rb +1 -0
- data/lib/shoes/mock/border.rb +1 -0
- data/lib/shoes/mock/button.rb +1 -0
- data/lib/shoes/mock/check.rb +1 -0
- data/lib/shoes/mock/clickable.rb +1 -0
- data/lib/shoes/mock/common_methods.rb +1 -0
- data/lib/shoes/mock/dialog.rb +1 -0
- data/lib/shoes/mock/download.rb +1 -0
- data/lib/shoes/mock/font.rb +1 -0
- data/lib/shoes/mock/image.rb +1 -0
- data/lib/shoes/mock/image_pattern.rb +1 -0
- data/lib/shoes/mock/input_box.rb +4 -0
- data/lib/shoes/mock/keypress.rb +1 -0
- data/lib/shoes/mock/keyrelease.rb +1 -0
- data/lib/shoes/mock/line.rb +1 -0
- data/lib/shoes/mock/link.rb +1 -0
- data/lib/shoes/mock/list_box.rb +1 -0
- data/lib/shoes/mock/oval.rb +1 -0
- data/lib/shoes/mock/packager.rb +3 -0
- data/lib/shoes/mock/progress.rb +1 -0
- data/lib/shoes/mock/radio.rb +1 -0
- data/lib/shoes/mock/rect.rb +1 -0
- data/lib/shoes/mock/shape.rb +1 -0
- data/lib/shoes/mock/slot.rb +1 -0
- data/lib/shoes/mock/sound.rb +1 -0
- data/lib/shoes/mock/star.rb +1 -0
- data/lib/shoes/mock/text_block.rb +1 -0
- data/lib/shoes/mock/timer.rb +1 -0
- data/lib/shoes/not_implemented_error.rb +1 -0
- data/lib/shoes/oval.rb +2 -3
- data/lib/shoes/packager.rb +13 -0
- data/lib/shoes/point.rb +1 -0
- data/lib/shoes/progress.rb +2 -3
- data/lib/shoes/radio.rb +1 -0
- data/lib/shoes/rect.rb +2 -3
- data/lib/shoes/renamed_delegate.rb +1 -0
- data/lib/shoes/shape.rb +2 -4
- data/lib/shoes/slot.rb +3 -3
- data/lib/shoes/slot_contents.rb +1 -0
- data/lib/shoes/sound.rb +1 -0
- data/lib/shoes/span.rb +1 -0
- data/lib/shoes/standard_logger.rb +14 -0
- data/lib/shoes/star.rb +2 -3
- data/lib/shoes/text.rb +1 -0
- data/lib/shoes/text_block.rb +4 -4
- data/lib/shoes/text_block_dimensions.rb +1 -0
- data/lib/shoes/timer.rb +1 -0
- data/lib/shoes/ui/cli.rb +5 -0
- data/lib/shoes/ui/picker.rb +2 -1
- data/lib/shoes/url.rb +1 -0
- data/lib/shoes/version.rb +1 -1
- data/lib/shoes/widget.rb +1 -0
- data/lib/shoes/window.rb +1 -0
- metadata +14 -5
- data/lib/shoes/common/initialization.rb +0 -71
- data/lib/shoes/logger.rb +0 -65
- data/lib/shoes/logger/ruby.rb +0 -15
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Shoes
|
3
|
+
class << self
|
4
|
+
# To ease the upgrade path from Shoes 3 we warn users they need to install
|
5
|
+
# and require gems themselves.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# Shoes.setup do
|
9
|
+
# gem 'bluecloth =2.0.6'
|
10
|
+
# gem 'metaid'
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# @param block [Proc] The block that describes the gems that are needed
|
14
|
+
# @deprecated
|
15
|
+
def setup(&block)
|
16
|
+
Shoes.logger.warn "The Shoes.setup method is deprecated, you need to install gems yourself.\n" \
|
17
|
+
"You can do this using the 'gem install' command or bundler and a Gemfile."
|
18
|
+
DeprecatedShoesGemSetup.new.instance_eval(&block)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Load the backend in memory. This does not set any configuration.
|
22
|
+
#
|
23
|
+
# @param name [String|Symbol] The name, such as :swt or :mock
|
24
|
+
# @return The backend
|
25
|
+
def load_backend(name)
|
26
|
+
require "shoes/#{name.to_s.downcase}"
|
27
|
+
Shoes.const_get(name.to_s.capitalize)
|
28
|
+
rescue LoadError => e
|
29
|
+
raise LoadError, "Couldn't load backend Shoes::#{name.capitalize}'. Error: #{e.message}\n#{e.backtrace.join("\n")}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class DeprecatedShoesGemSetup
|
34
|
+
def gem(name)
|
35
|
+
name, version = name.split
|
36
|
+
install_cmd = 'gem install ' + name
|
37
|
+
install_cmd += " --version \"#{version}\"" if version
|
38
|
+
Shoes.logger.warn "To use the '#{name}' gem, install it with '#{install_cmd}', and put 'require \"#{name}\"' at the top of your Shoes program.\n" \
|
39
|
+
"Shoes also supports Bundler, so you can provide a 'Gemfile' in your application directory"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Shoes
|
3
|
+
module DSL
|
4
|
+
module Style
|
5
|
+
# Set default style for elements of a particular class, or for all
|
6
|
+
# elements, or return the current defaults for all elements
|
7
|
+
#
|
8
|
+
# @overload style(klass, styles)
|
9
|
+
# Set default style for elements of a particular class
|
10
|
+
# @param [Class] klass a Shoes element class
|
11
|
+
# @param [Hash] styles default styles for elements of klass
|
12
|
+
# @example
|
13
|
+
# style Para, :text_size => 42, :stroke => green
|
14
|
+
#
|
15
|
+
# @overload style(styles)
|
16
|
+
# Set default style for all elements
|
17
|
+
# @param [Hash] styles default style for all elements
|
18
|
+
# @example
|
19
|
+
# style :stroke => alicewhite, :fill => black
|
20
|
+
#
|
21
|
+
# @overload style()
|
22
|
+
# @return [Hash] the default style for all elements
|
23
|
+
def style(klass_or_styles = nil, styles = {})
|
24
|
+
if klass_or_styles.kind_of? Class
|
25
|
+
klass = klass_or_styles
|
26
|
+
@__app__.element_styles[klass] = styles
|
27
|
+
else
|
28
|
+
@__app__.style(klass_or_styles)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Define app-level setter methods
|
33
|
+
PATTERN_APP_STYLES = [:fill, :stroke].freeze
|
34
|
+
OTHER_APP_STYLES = [:cap, :rotate, :strokewidth, :transform].freeze
|
35
|
+
|
36
|
+
PATTERN_APP_STYLES.each do |style|
|
37
|
+
define_method style do |val|
|
38
|
+
@__app__.style[style] = pattern(val)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
OTHER_APP_STYLES.each do |style|
|
43
|
+
define_method style do |val|
|
44
|
+
@__app__.style[style] = val
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def translate(left, top)
|
49
|
+
@__app__.style[:translate] = [left, top]
|
50
|
+
end
|
51
|
+
|
52
|
+
def nostroke
|
53
|
+
@__app__.style[:stroke] = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def nofill
|
57
|
+
@__app__.style[:fill] = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def style_normalizer
|
63
|
+
@style_normalizer ||= Common::StyleNormalizer.new
|
64
|
+
end
|
65
|
+
|
66
|
+
def pop_style(opts)
|
67
|
+
opts.last.class == Hash ? opts.pop : {}
|
68
|
+
end
|
69
|
+
|
70
|
+
# Default styles for elements of klass
|
71
|
+
def style_for_element(klass, styles = {})
|
72
|
+
@__app__.element_styles.fetch(klass, {}).merge(styles)
|
73
|
+
end
|
74
|
+
|
75
|
+
def normalize_style_for_element(clazz, texts)
|
76
|
+
style = style_normalizer.normalize(pop_style(texts))
|
77
|
+
style_for_element(clazz, style)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Shoes
|
3
|
+
module DSL
|
4
|
+
module Text
|
5
|
+
%w(banner title subtitle tagline caption para inscription).each do |method|
|
6
|
+
define_method method do |*texts|
|
7
|
+
styles = pop_style(texts)
|
8
|
+
klass = Shoes.const_get(method.capitalize)
|
9
|
+
create klass, texts, styles
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
TEXT_STYLES = {
|
14
|
+
code: { font: "Lucida Console" },
|
15
|
+
del: { strikethrough: true },
|
16
|
+
em: { emphasis: true },
|
17
|
+
ins: { underline: true },
|
18
|
+
sub: { rise: -10, size_modifier: 0.8 },
|
19
|
+
sup: { rise: 10, size_modifier: 0.8 },
|
20
|
+
strong: { weight: true },
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
TEXT_STYLES.keys.each do |method|
|
24
|
+
define_method method do |*texts|
|
25
|
+
styles = style_normalizer.normalize(pop_style(texts))
|
26
|
+
styles = TEXT_STYLES[method].merge(styles)
|
27
|
+
Shoes::Span.new texts, styles
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def fg(*texts, color)
|
32
|
+
Shoes::Span.new texts, stroke: pattern(color)
|
33
|
+
end
|
34
|
+
|
35
|
+
def bg(*texts, color)
|
36
|
+
Shoes::Span.new texts, fill: pattern(color)
|
37
|
+
end
|
38
|
+
|
39
|
+
def link(*texts, &blk)
|
40
|
+
opts = normalize_style_for_element(Shoes::Link, texts)
|
41
|
+
Shoes::Link.new @__app__, texts, opts, blk
|
42
|
+
end
|
43
|
+
|
44
|
+
def span(*texts)
|
45
|
+
opts = normalize_style_for_element(Shoes::Span, texts)
|
46
|
+
Shoes::Span.new texts, opts
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/shoes/font.rb
CHANGED
data/lib/shoes/gradient.rb
CHANGED
data/lib/shoes/image.rb
CHANGED
data/lib/shoes/image_pattern.rb
CHANGED
data/lib/shoes/input_box.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
class Shoes
|
2
|
-
class InputBox
|
3
|
-
include Common::UIElement
|
3
|
+
class InputBox < Common::UIElement
|
4
4
|
include Common::Changeable
|
5
5
|
include Common::State
|
6
6
|
|
@@ -33,6 +33,15 @@ class Shoes
|
|
33
33
|
def caret_to(index)
|
34
34
|
@gui.caret_to(index)
|
35
35
|
end
|
36
|
+
|
37
|
+
def readonly?
|
38
|
+
state.to_s == "readonly"
|
39
|
+
end
|
40
|
+
|
41
|
+
def update_from_state
|
42
|
+
super
|
43
|
+
@gui.readonly = readonly?
|
44
|
+
end
|
36
45
|
end
|
37
46
|
|
38
47
|
class EditBox < InputBox
|
data/lib/shoes/internal_app.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
class Shoes
|
2
3
|
# This is the representation of the app that is used internally by Shoes
|
3
4
|
# objects. It is *NOT* the app object that a user interacts with in a
|
@@ -9,6 +10,7 @@ class Shoes
|
|
9
10
|
class InternalApp
|
10
11
|
include Common::Clickable
|
11
12
|
include Common::Style
|
13
|
+
include Common::SafelyEvaluate
|
12
14
|
include DimensionsDelegations
|
13
15
|
|
14
16
|
extend Forwardable
|
@@ -34,7 +36,9 @@ class Shoes
|
|
34
36
|
|
35
37
|
self.current_slot = create_top_slot
|
36
38
|
execution_blk = create_execution_block(blk)
|
39
|
+
|
37
40
|
eval_block execution_blk
|
41
|
+
eval_block start_block if start_block
|
38
42
|
|
39
43
|
setup_global_keypresses
|
40
44
|
register_console_keypress
|
@@ -51,7 +55,8 @@ class Shoes
|
|
51
55
|
:mouse_motion, :owner, :element_styles, :resize_callbacks
|
52
56
|
attr_accessor :elements, :current_slot, :opts, :blk, :mouse_button,
|
53
57
|
:mouse_pos, :mouse_hover_controls, :resizable, :app_title,
|
54
|
-
:width, :height, :start_as_fullscreen, :location
|
58
|
+
:width, :height, :start_as_fullscreen, :location,
|
59
|
+
:start_block
|
55
60
|
|
56
61
|
def_delegators :@app, :eval_with_additional_context
|
57
62
|
|
@@ -95,7 +100,7 @@ class Shoes
|
|
95
100
|
|
96
101
|
delegated_to_gui = %w(
|
97
102
|
fullscreen= fullscreen quit scroll_top= scroll_top
|
98
|
-
clipboard clipboard= gutter
|
103
|
+
clipboard clipboard= gutter focus open?
|
99
104
|
)
|
100
105
|
|
101
106
|
def_delegators :gui, *delegated_to_gui
|
@@ -136,6 +141,14 @@ class Shoes
|
|
136
141
|
@resize_callbacks << blk
|
137
142
|
end
|
138
143
|
|
144
|
+
def trigger_resize_callbacks
|
145
|
+
@resize_callbacks.each do |callback|
|
146
|
+
safely_evaluate do
|
147
|
+
callback.call
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
139
152
|
def inspect_details
|
140
153
|
"\"#{@app_title}\" #{@dimensions.inspect}"
|
141
154
|
end
|
@@ -209,7 +222,7 @@ class Shoes
|
|
209
222
|
|
210
223
|
def register_console_keypress
|
211
224
|
self.class.add_global_keypress(:"alt_/") do
|
212
|
-
|
225
|
+
Shoes.console.show
|
213
226
|
end
|
214
227
|
end
|
215
228
|
|
data/lib/shoes/key_event.rb
CHANGED
data/lib/shoes/line.rb
CHANGED
data/lib/shoes/link.rb
CHANGED
data/lib/shoes/list_box.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
class Shoes
|
2
3
|
class ProxyArray < SimpleDelegator
|
3
4
|
attr_accessor :gui
|
@@ -24,13 +25,12 @@ class Shoes
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
|
-
class ListBox
|
28
|
-
include Common::UIElement
|
28
|
+
class ListBox < Common::UIElement
|
29
29
|
include Common::Changeable
|
30
30
|
include Common::State
|
31
31
|
|
32
32
|
style_with :change, :choose, :common_styles, :dimensions, :items, :state, :text
|
33
|
-
STYLES = { width: 200, height:
|
33
|
+
STYLES = { width: 200, height: 29, items: [""] }.freeze
|
34
34
|
|
35
35
|
def handle_block(blk)
|
36
36
|
change(&blk) if blk
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Shoes
|
4
|
+
class LoggerCollection
|
5
|
+
def initialize
|
6
|
+
@loggers = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def <<(logger)
|
10
|
+
@loggers << logger
|
11
|
+
self
|
12
|
+
end
|
13
|
+
|
14
|
+
def debug(message)
|
15
|
+
forward(:debug, message)
|
16
|
+
end
|
17
|
+
|
18
|
+
def info(message)
|
19
|
+
forward(:info, message)
|
20
|
+
end
|
21
|
+
|
22
|
+
def warn(message)
|
23
|
+
forward(:warn, message)
|
24
|
+
end
|
25
|
+
|
26
|
+
def error(message)
|
27
|
+
forward(:error, message)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def forward(meth, message)
|
33
|
+
@loggers.each do |logger|
|
34
|
+
logger.public_send(meth, message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/shoes/mock.rb
CHANGED
data/lib/shoes/mock/animation.rb
CHANGED
data/lib/shoes/mock/app.rb
CHANGED
data/lib/shoes/mock/arc.rb
CHANGED
data/lib/shoes/mock/arrow.rb
CHANGED
data/lib/shoes/mock/border.rb
CHANGED
data/lib/shoes/mock/button.rb
CHANGED