lacci 0.2.2 → 0.3.0
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/Gemfile +2 -0
- data/Gemfile.lock +8 -1
- data/lib/lacci/scarpe_cli.rb +2 -1
- data/lib/lacci/scarpe_core.rb +2 -1
- data/lib/lacci/version.rb +1 -1
- data/lib/scarpe/niente/app.rb +23 -0
- data/lib/scarpe/niente/display_service.rb +62 -0
- data/lib/scarpe/niente/drawable.rb +57 -0
- data/lib/scarpe/niente/logger.rb +29 -0
- data/lib/scarpe/niente/shoes_spec.rb +87 -0
- data/lib/scarpe/niente.rb +20 -0
- data/lib/shoes/app.rb +88 -43
- data/lib/shoes/background.rb +2 -2
- data/lib/shoes/border.rb +2 -2
- data/lib/shoes/builtins.rb +63 -0
- data/lib/shoes/changelog.rb +52 -0
- data/lib/shoes/colors.rb +3 -1
- data/lib/shoes/constants.rb +19 -1
- data/lib/shoes/display_service.rb +39 -16
- data/lib/shoes/download.rb +2 -2
- data/lib/shoes/drawable.rb +380 -0
- data/lib/shoes/drawables/arc.rb +49 -0
- data/lib/shoes/drawables/arrow.rb +41 -0
- data/lib/shoes/drawables/button.rb +73 -0
- data/lib/shoes/{widgets → drawables}/check.rb +5 -4
- data/lib/shoes/{widgets → drawables}/document_root.rb +3 -3
- data/lib/shoes/{widgets → drawables}/edit_box.rb +6 -6
- data/lib/shoes/{widgets → drawables}/edit_line.rb +6 -6
- data/lib/shoes/{widgets → drawables}/flow.rb +6 -6
- data/lib/shoes/{widgets → drawables}/image.rb +6 -6
- data/lib/shoes/{widgets → drawables}/line.rb +7 -5
- data/lib/shoes/drawables/link.rb +34 -0
- data/lib/shoes/drawables/list_box.rb +56 -0
- data/lib/shoes/drawables/para.rb +118 -0
- data/lib/shoes/drawables/progress.rb +14 -0
- data/lib/shoes/drawables/radio.rb +33 -0
- data/lib/shoes/drawables/rect.rb +17 -0
- data/lib/shoes/{widgets → drawables}/shape.rb +6 -7
- data/lib/shoes/{widgets → drawables}/slot.rb +32 -20
- data/lib/shoes/{widgets → drawables}/span.rb +8 -7
- data/lib/shoes/{widgets → drawables}/stack.rb +6 -4
- data/lib/shoes/drawables/star.rb +50 -0
- data/lib/shoes/drawables/subscription_item.rb +93 -0
- data/lib/shoes/drawables/text_drawable.rb +63 -0
- data/lib/shoes/drawables/video.rb +16 -0
- data/lib/shoes/drawables/widget.rb +69 -0
- data/lib/shoes/drawables.rb +31 -0
- data/lib/shoes/errors.rb +28 -0
- data/lib/shoes/log.rb +2 -2
- data/lib/shoes/ruby_extensions.rb +15 -0
- data/lib/shoes/spacing.rb +2 -2
- data/lib/shoes-spec.rb +93 -0
- data/lib/shoes.rb +27 -7
- metadata +55 -28
- data/lib/shoes/widget.rb +0 -218
- data/lib/shoes/widgets/alert.rb +0 -19
- data/lib/shoes/widgets/arc.rb +0 -51
- data/lib/shoes/widgets/button.rb +0 -35
- data/lib/shoes/widgets/font.rb +0 -14
- data/lib/shoes/widgets/link.rb +0 -25
- data/lib/shoes/widgets/list_box.rb +0 -25
- data/lib/shoes/widgets/para.rb +0 -68
- data/lib/shoes/widgets/radio.rb +0 -35
- data/lib/shoes/widgets/star.rb +0 -44
- data/lib/shoes/widgets/subscription_item.rb +0 -60
- data/lib/shoes/widgets/text_widget.rb +0 -51
- data/lib/shoes/widgets/video.rb +0 -15
- data/lib/shoes/widgets.rb +0 -29
data/lib/shoes.rb
CHANGED
@@ -12,38 +12,53 @@ if RUBY_VERSION[0..2] < "3.2"
|
|
12
12
|
exit(-1)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
class Shoes; end
|
16
16
|
class Shoes::Error < StandardError; end
|
17
|
+
require_relative "shoes/errors"
|
17
18
|
|
18
19
|
require_relative "shoes/constants"
|
20
|
+
require_relative "shoes/ruby_extensions"
|
19
21
|
|
20
22
|
# Shoes adds some top-level methods and constants that can be used everywhere. Kernel is where they go.
|
21
23
|
module Kernel
|
22
24
|
include Shoes::Constants
|
23
25
|
end
|
24
26
|
|
25
|
-
require_relative "shoes/log"
|
26
27
|
require_relative "shoes/display_service"
|
28
|
+
|
29
|
+
# Pre-declare classes that get referenced outside their own require file
|
30
|
+
class Shoes::Drawable < Shoes::Linkable; end
|
31
|
+
class Shoes::Slot < Shoes::Drawable; end
|
32
|
+
class Shoes::Widget < Shoes::Slot; end
|
33
|
+
|
34
|
+
require_relative "shoes/log"
|
27
35
|
require_relative "shoes/colors"
|
28
36
|
|
37
|
+
require_relative "shoes/builtins"
|
38
|
+
|
29
39
|
require_relative "shoes/background"
|
30
40
|
require_relative "shoes/border"
|
31
41
|
require_relative "shoes/spacing"
|
32
42
|
|
33
|
-
require_relative "shoes/
|
43
|
+
require_relative "shoes/drawable"
|
34
44
|
require_relative "shoes/app"
|
35
|
-
require_relative "shoes/
|
45
|
+
require_relative "shoes/drawables"
|
36
46
|
|
37
47
|
require_relative "shoes/download"
|
38
48
|
|
49
|
+
# No easy way to tell at this point whether
|
50
|
+
# we will later load Shoes-Spec code, e.g.
|
51
|
+
# by running a segmented app with test code.
|
52
|
+
require_relative "shoes-spec"
|
53
|
+
|
39
54
|
# The module containing Shoes in all its glory.
|
40
55
|
# Shoes is a platform-independent GUI library, designed to create
|
41
56
|
# small visual applications in Ruby.
|
42
57
|
#
|
43
|
-
|
58
|
+
class Shoes
|
44
59
|
class << self
|
45
60
|
# Creates a Shoes app with a new window. The block parameter is used to create
|
46
|
-
#
|
61
|
+
# drawables and set up handlers. Arguments are passed to Shoes::App.new internally.
|
47
62
|
#
|
48
63
|
# @incompatibility In Shoes3, this method will return normally.
|
49
64
|
# In Scarpe, after the block is executed, the method will not return and Scarpe
|
@@ -81,11 +96,16 @@ module Shoes
|
|
81
96
|
# more loaders, a Lacci-based display library can accept new file formats as
|
82
97
|
# well, not just raw Shoes .rb files.
|
83
98
|
#
|
84
|
-
# @param
|
99
|
+
# @param relative_path [String] The current-dir-relative path to the file
|
85
100
|
# @return [void]
|
86
101
|
# @see Shoes.add_file_loader
|
87
102
|
def run_app(relative_path)
|
88
103
|
path = File.expand_path relative_path
|
104
|
+
dir = File.dirname(path)
|
105
|
+
|
106
|
+
# Shoes assumes we're starting from the app code's path
|
107
|
+
Dir.chdir(dir)
|
108
|
+
|
89
109
|
loaded = false
|
90
110
|
file_loaders.each do |loader|
|
91
111
|
if loader.call(path)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lacci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Concetto Rudilosso
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
13
|
-
dependencies:
|
12
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: scarpe-components
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
14
28
|
description:
|
15
29
|
email:
|
16
30
|
- marcoc.r@outlook.com
|
@@ -25,41 +39,54 @@ files:
|
|
25
39
|
- lib/lacci/scarpe_cli.rb
|
26
40
|
- lib/lacci/scarpe_core.rb
|
27
41
|
- lib/lacci/version.rb
|
42
|
+
- lib/scarpe/niente.rb
|
43
|
+
- lib/scarpe/niente/app.rb
|
44
|
+
- lib/scarpe/niente/display_service.rb
|
45
|
+
- lib/scarpe/niente/drawable.rb
|
46
|
+
- lib/scarpe/niente/logger.rb
|
47
|
+
- lib/scarpe/niente/shoes_spec.rb
|
48
|
+
- lib/shoes-spec.rb
|
28
49
|
- lib/shoes.rb
|
29
50
|
- lib/shoes/app.rb
|
30
51
|
- lib/shoes/background.rb
|
31
52
|
- lib/shoes/border.rb
|
53
|
+
- lib/shoes/builtins.rb
|
54
|
+
- lib/shoes/changelog.rb
|
32
55
|
- lib/shoes/colors.rb
|
33
56
|
- lib/shoes/constants.rb
|
34
57
|
- lib/shoes/display_service.rb
|
35
58
|
- lib/shoes/download.rb
|
59
|
+
- lib/shoes/drawable.rb
|
60
|
+
- lib/shoes/drawables.rb
|
61
|
+
- lib/shoes/drawables/arc.rb
|
62
|
+
- lib/shoes/drawables/arrow.rb
|
63
|
+
- lib/shoes/drawables/button.rb
|
64
|
+
- lib/shoes/drawables/check.rb
|
65
|
+
- lib/shoes/drawables/document_root.rb
|
66
|
+
- lib/shoes/drawables/edit_box.rb
|
67
|
+
- lib/shoes/drawables/edit_line.rb
|
68
|
+
- lib/shoes/drawables/flow.rb
|
69
|
+
- lib/shoes/drawables/image.rb
|
70
|
+
- lib/shoes/drawables/line.rb
|
71
|
+
- lib/shoes/drawables/link.rb
|
72
|
+
- lib/shoes/drawables/list_box.rb
|
73
|
+
- lib/shoes/drawables/para.rb
|
74
|
+
- lib/shoes/drawables/progress.rb
|
75
|
+
- lib/shoes/drawables/radio.rb
|
76
|
+
- lib/shoes/drawables/rect.rb
|
77
|
+
- lib/shoes/drawables/shape.rb
|
78
|
+
- lib/shoes/drawables/slot.rb
|
79
|
+
- lib/shoes/drawables/span.rb
|
80
|
+
- lib/shoes/drawables/stack.rb
|
81
|
+
- lib/shoes/drawables/star.rb
|
82
|
+
- lib/shoes/drawables/subscription_item.rb
|
83
|
+
- lib/shoes/drawables/text_drawable.rb
|
84
|
+
- lib/shoes/drawables/video.rb
|
85
|
+
- lib/shoes/drawables/widget.rb
|
86
|
+
- lib/shoes/errors.rb
|
36
87
|
- lib/shoes/log.rb
|
88
|
+
- lib/shoes/ruby_extensions.rb
|
37
89
|
- lib/shoes/spacing.rb
|
38
|
-
- lib/shoes/widget.rb
|
39
|
-
- lib/shoes/widgets.rb
|
40
|
-
- lib/shoes/widgets/alert.rb
|
41
|
-
- lib/shoes/widgets/arc.rb
|
42
|
-
- lib/shoes/widgets/button.rb
|
43
|
-
- lib/shoes/widgets/check.rb
|
44
|
-
- lib/shoes/widgets/document_root.rb
|
45
|
-
- lib/shoes/widgets/edit_box.rb
|
46
|
-
- lib/shoes/widgets/edit_line.rb
|
47
|
-
- lib/shoes/widgets/flow.rb
|
48
|
-
- lib/shoes/widgets/font.rb
|
49
|
-
- lib/shoes/widgets/image.rb
|
50
|
-
- lib/shoes/widgets/line.rb
|
51
|
-
- lib/shoes/widgets/link.rb
|
52
|
-
- lib/shoes/widgets/list_box.rb
|
53
|
-
- lib/shoes/widgets/para.rb
|
54
|
-
- lib/shoes/widgets/radio.rb
|
55
|
-
- lib/shoes/widgets/shape.rb
|
56
|
-
- lib/shoes/widgets/slot.rb
|
57
|
-
- lib/shoes/widgets/span.rb
|
58
|
-
- lib/shoes/widgets/stack.rb
|
59
|
-
- lib/shoes/widgets/star.rb
|
60
|
-
- lib/shoes/widgets/subscription_item.rb
|
61
|
-
- lib/shoes/widgets/text_widget.rb
|
62
|
-
- lib/shoes/widgets/video.rb
|
63
90
|
homepage: https://github.com/scarpe-team/scarpe
|
64
91
|
licenses:
|
65
92
|
- MIT
|
data/lib/shoes/widget.rb
DELETED
@@ -1,218 +0,0 @@
|
|
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 Shoes::Log
|
15
|
-
include Shoes::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
|
-
# Shoes uses a "hidden" style property for hide/show
|
76
|
-
display_property :hidden
|
77
|
-
|
78
|
-
def initialize(*args, **kwargs)
|
79
|
-
log_init("Widget")
|
80
|
-
|
81
|
-
self.class.display_property_names.each do |prop|
|
82
|
-
if kwargs[prop.to_sym]
|
83
|
-
instance_variable_set("@" + prop, kwargs[prop.to_sym])
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
super() # linkable_id defaults to object_id
|
88
|
-
end
|
89
|
-
|
90
|
-
def inspect
|
91
|
-
"#<#{self.class}:#{self.object_id} " +
|
92
|
-
"@linkable_id=#{@linkable_id.inspect} @parent=#{@parent.inspect} " +
|
93
|
-
"@children=#{@children.inspect} properties=#{display_property_values.inspect}>"
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def bind_self_event(event_name, &block)
|
99
|
-
raise("Widget has no linkable_id! #{inspect}") unless linkable_id
|
100
|
-
|
101
|
-
bind_shoes_event(event_name: event_name, target: linkable_id, &block)
|
102
|
-
end
|
103
|
-
|
104
|
-
def bind_no_target_event(event_name, &block)
|
105
|
-
bind_shoes_event(event_name:, &block)
|
106
|
-
end
|
107
|
-
|
108
|
-
public
|
109
|
-
|
110
|
-
def display_property_values
|
111
|
-
all_property_names = self.class.display_property_names
|
112
|
-
|
113
|
-
properties = {}
|
114
|
-
all_property_names.each do |prop|
|
115
|
-
properties[prop] = instance_variable_get("@" + prop)
|
116
|
-
end
|
117
|
-
properties["shoes_linkable_id"] = self.linkable_id
|
118
|
-
properties
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def create_display_widget
|
124
|
-
klass_name = self.class.name.delete_prefix("Scarpe::").delete_prefix("Shoes::")
|
125
|
-
|
126
|
-
# Should we save a reference to widget for later reference?
|
127
|
-
::Shoes::DisplayService.display_service.create_display_widget_for(klass_name, self.linkable_id, display_property_values)
|
128
|
-
end
|
129
|
-
|
130
|
-
public
|
131
|
-
|
132
|
-
attr_reader :parent
|
133
|
-
|
134
|
-
def set_parent(new_parent)
|
135
|
-
@parent&.remove_child(self)
|
136
|
-
new_parent&.add_child(self)
|
137
|
-
@parent = new_parent
|
138
|
-
send_shoes_event(new_parent.linkable_id, event_name: "parent", target: linkable_id)
|
139
|
-
end
|
140
|
-
|
141
|
-
# Removes the element from the Shoes::Widget tree
|
142
|
-
def destroy
|
143
|
-
@parent&.remove_child(self)
|
144
|
-
send_shoes_event(event_name: "destroy", target: linkable_id)
|
145
|
-
end
|
146
|
-
alias_method :remove, :destroy
|
147
|
-
|
148
|
-
# Hide the widget.
|
149
|
-
def hide
|
150
|
-
self.hidden = true
|
151
|
-
end
|
152
|
-
|
153
|
-
# Show the widget.
|
154
|
-
def show
|
155
|
-
self.hidden = false
|
156
|
-
end
|
157
|
-
|
158
|
-
# Hide the widget if it is currently shown. Show it if it is currently hidden.
|
159
|
-
def toggle
|
160
|
-
self.hidden = !self.hidden
|
161
|
-
end
|
162
|
-
|
163
|
-
# We use method_missing for widget-creating methods like "button",
|
164
|
-
# and also to auto-create display-property getters and setters.
|
165
|
-
def method_missing(name, *args, **kwargs, &block)
|
166
|
-
name_s = name.to_s
|
167
|
-
|
168
|
-
if name_s[-1] == "="
|
169
|
-
prop_name = name_s[0..-2]
|
170
|
-
if self.class.display_property_name?(prop_name)
|
171
|
-
self.class.define_method(name) do |new_value|
|
172
|
-
raise "Trying to set display properties in an object with no linkable ID!" unless linkable_id
|
173
|
-
|
174
|
-
instance_variable_set("@" + prop_name, new_value)
|
175
|
-
send_shoes_event({ prop_name => new_value }, event_name: "prop_change", target: linkable_id)
|
176
|
-
end
|
177
|
-
|
178
|
-
return self.send(name, *args, **kwargs, &block)
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
if self.class.display_property_name?(name_s)
|
183
|
-
self.class.define_method(name) do
|
184
|
-
raise "Trying to get display properties in an object with no linkable ID!" unless linkable_id
|
185
|
-
|
186
|
-
instance_variable_get("@" + name_s)
|
187
|
-
end
|
188
|
-
|
189
|
-
return self.send(name, *args, **kwargs, &block)
|
190
|
-
end
|
191
|
-
|
192
|
-
klass = Widget.widget_class_by_name(name)
|
193
|
-
return super unless klass
|
194
|
-
|
195
|
-
::Shoes::Widget.define_method(name) do |*args, **kwargs, &block|
|
196
|
-
# Look up the Shoes widget and create it...
|
197
|
-
widget_instance = klass.new(*args, **kwargs, &block)
|
198
|
-
|
199
|
-
unless klass.ancestors.include?(Shoes::TextWidget)
|
200
|
-
widget_instance.set_parent Shoes::App.instance.current_slot
|
201
|
-
end
|
202
|
-
|
203
|
-
widget_instance
|
204
|
-
end
|
205
|
-
|
206
|
-
send(name, *args, **kwargs, &block)
|
207
|
-
end
|
208
|
-
|
209
|
-
def respond_to_missing?(name, include_private = false)
|
210
|
-
name_s = name.to_s
|
211
|
-
return true if self.class.display_property_name?(name_s)
|
212
|
-
return true if self.class.display_property_name?(name_s[0..-2]) && name_s[-1] == "="
|
213
|
-
return true if Widget.widget_class_by_name(name_s)
|
214
|
-
|
215
|
-
super
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
data/lib/shoes/widgets/alert.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class Alert < Shoes::Widget
|
5
|
-
display_property :text
|
6
|
-
|
7
|
-
def initialize(text)
|
8
|
-
@text = text
|
9
|
-
|
10
|
-
super
|
11
|
-
|
12
|
-
bind_self_event("click") do
|
13
|
-
remove
|
14
|
-
end
|
15
|
-
|
16
|
-
create_display_widget
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/shoes/widgets/arc.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class InvalidAttributeValueError < Shoes::Error; end
|
5
|
-
|
6
|
-
class Arc < Shoes::Widget
|
7
|
-
display_properties :left, :top, :width, :height, :angle1, :angle2, :draw_context
|
8
|
-
|
9
|
-
def initialize(*args)
|
10
|
-
@left, @top, @width, @height, @angle1, @angle2 = args
|
11
|
-
|
12
|
-
@left = convert_to_integer(@left, "left")
|
13
|
-
@top = convert_to_integer(@top, "top")
|
14
|
-
@width = convert_to_integer(@width, "width")
|
15
|
-
@height = convert_to_integer(@height, "height")
|
16
|
-
@angle1 = convert_to_float(@angle1, "angle1")
|
17
|
-
@angle2 = convert_to_float(@angle2, "angle2")
|
18
|
-
|
19
|
-
@draw_context = Shoes::App.instance.current_draw_context
|
20
|
-
|
21
|
-
super
|
22
|
-
create_display_widget
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def convert_to_integer(value, attribute_name)
|
28
|
-
begin
|
29
|
-
value = Integer(value)
|
30
|
-
raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
31
|
-
|
32
|
-
value
|
33
|
-
rescue ArgumentError
|
34
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
35
|
-
raise InvalidAttributeValueError, error_message
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def convert_to_float(value, attribute_name)
|
40
|
-
begin
|
41
|
-
value = Float(value)
|
42
|
-
raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
43
|
-
|
44
|
-
value
|
45
|
-
rescue ArgumentError
|
46
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
47
|
-
raise InvalidAttributeValueError, error_message
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/shoes/widgets/button.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class Button < Shoes::Widget
|
5
|
-
include Shoes::Log
|
6
|
-
display_properties :text, :width, :height, :top, :left, :color, :padding_top, :padding_bottom, :text_color, :size, :font_size
|
7
|
-
|
8
|
-
def initialize(text, width: nil, height: nil, top: nil, left: nil, color: nil, padding_top: nil, padding_bottom: nil, size: 12, text_color: nil,
|
9
|
-
font_size: nil, & block)
|
10
|
-
|
11
|
-
log_init("Button")
|
12
|
-
|
13
|
-
# Properties passed as positional args, not keywords, don't get auto-set
|
14
|
-
@text = text
|
15
|
-
@color = color
|
16
|
-
|
17
|
-
@block = block
|
18
|
-
|
19
|
-
super
|
20
|
-
|
21
|
-
# Bind to a handler named "click"
|
22
|
-
bind_self_event("click") do
|
23
|
-
@log.debug("Button clicked, calling handler") if @block
|
24
|
-
@block&.call
|
25
|
-
end
|
26
|
-
|
27
|
-
create_display_widget
|
28
|
-
end
|
29
|
-
|
30
|
-
# Set the click handler
|
31
|
-
def click(&block)
|
32
|
-
@block = block
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/shoes/widgets/font.rb
DELETED
data/lib/shoes/widgets/link.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class Link < Shoes::TextWidget
|
5
|
-
display_properties :text, :click, :has_block
|
6
|
-
|
7
|
-
def initialize(text, click: nil, &block)
|
8
|
-
@text = text
|
9
|
-
@block = block
|
10
|
-
# We can't send a block to the display widget, but we can send a boolean
|
11
|
-
@has_block = !block.nil?
|
12
|
-
|
13
|
-
super
|
14
|
-
|
15
|
-
# The click property should be changed before it gets sent to the display widget
|
16
|
-
@click ||= "#"
|
17
|
-
|
18
|
-
bind_self_event("click") do
|
19
|
-
@block&.call
|
20
|
-
end
|
21
|
-
|
22
|
-
create_display_widget
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class ListBox < Shoes::Widget
|
5
|
-
display_properties :selected_item, :items, :height, :width
|
6
|
-
|
7
|
-
def initialize(args = {}, &block)
|
8
|
-
@items = args[:items] || []
|
9
|
-
@selected_item = args[:selected_item]
|
10
|
-
super()
|
11
|
-
|
12
|
-
bind_self_event("change") do |new_item|
|
13
|
-
self.selected_item = new_item
|
14
|
-
@callback&.call(new_item)
|
15
|
-
end
|
16
|
-
|
17
|
-
create_display_widget
|
18
|
-
end
|
19
|
-
|
20
|
-
def change(&block)
|
21
|
-
@callback = block
|
22
|
-
self # Allow chaining calls
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/shoes/widgets/para.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class Para < Shoes::Widget
|
5
|
-
display_properties :text_items, :stroke, :size, :font, :html_attributes, :hidden
|
6
|
-
|
7
|
-
def initialize(*args, stroke: nil, size: :para, font: nil, hidden: false, **html_attributes)
|
8
|
-
@text_children = args || []
|
9
|
-
if hidden
|
10
|
-
@hidden_text_items = text_children_to_items(@text_children)
|
11
|
-
@text_items = []
|
12
|
-
else
|
13
|
-
# Text_children alternates strings and TextWidgets, so we can't just pass
|
14
|
-
# it as a display property. It won't serialize.
|
15
|
-
@text_items = text_children_to_items(@text_children)
|
16
|
-
@hidden_text_items = []
|
17
|
-
end
|
18
|
-
stroke = to_rgb(stroke)
|
19
|
-
|
20
|
-
@html_attributes = html_attributes || {}
|
21
|
-
|
22
|
-
super
|
23
|
-
|
24
|
-
create_display_widget
|
25
|
-
end
|
26
|
-
|
27
|
-
def text_children_to_items(text_children)
|
28
|
-
text_children.map { |arg| arg.is_a?(String) ? arg : arg.linkable_id }
|
29
|
-
end
|
30
|
-
|
31
|
-
def replace(*children)
|
32
|
-
@text_children = children
|
33
|
-
|
34
|
-
# This should signal the display widget to change
|
35
|
-
self.text_items = text_children_to_items(@text_children)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
module Shoes
|
41
|
-
class Widget
|
42
|
-
def banner(*args, **kwargs)
|
43
|
-
para(*args, **{ size: :banner }.merge(kwargs))
|
44
|
-
end
|
45
|
-
|
46
|
-
def title(*args, **kwargs)
|
47
|
-
para(*args, **{ size: :title }.merge(kwargs))
|
48
|
-
end
|
49
|
-
|
50
|
-
def subtitle(*args, **kwargs)
|
51
|
-
para(*args, **{ size: :subtitle }.merge(kwargs))
|
52
|
-
end
|
53
|
-
|
54
|
-
def tagline(*args, **kwargs)
|
55
|
-
para(*args, **{ size: :tagline }.merge(kwargs))
|
56
|
-
end
|
57
|
-
|
58
|
-
def caption(*args, **kwargs)
|
59
|
-
para(*args, **{ size: :caption }.merge(kwargs))
|
60
|
-
end
|
61
|
-
|
62
|
-
def inscription(*args, **kwargs)
|
63
|
-
para(*args, **{ size: :inscription }.merge(kwargs))
|
64
|
-
end
|
65
|
-
|
66
|
-
alias_method :ins, :inscription
|
67
|
-
end
|
68
|
-
end
|
data/lib/shoes/widgets/radio.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shoes
|
4
|
-
class Radio < Shoes::Widget
|
5
|
-
display_properties :group, :checked
|
6
|
-
|
7
|
-
def initialize(group = nil, checked = nil, &block)
|
8
|
-
@group = group
|
9
|
-
@block = block
|
10
|
-
super
|
11
|
-
|
12
|
-
bind_self_event("click") { click }
|
13
|
-
create_display_widget
|
14
|
-
end
|
15
|
-
|
16
|
-
def click(&block)
|
17
|
-
@block = block
|
18
|
-
self.checked = !checked?
|
19
|
-
end
|
20
|
-
|
21
|
-
def checked?
|
22
|
-
@checked ? true : false
|
23
|
-
end
|
24
|
-
|
25
|
-
def checked(value)
|
26
|
-
self.checked = value
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def group_name
|
32
|
-
@group || @parent
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|