shoes-core 4.0.0.pre8 → 4.0.0.pre9
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 +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