vedeu 0.8.4 → 0.8.5
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/TODO.md +4 -0
- data/docs/dsl.md +1 -11
- data/docs/dsl/by_method/geometry/align.md +1 -0
- data/docs/dsl/by_method/geometry/align_bottom.md +40 -0
- data/docs/dsl/by_method/geometry/align_centre.md +40 -0
- data/docs/dsl/by_method/geometry/align_left.md +40 -0
- data/docs/dsl/by_method/geometry/align_middle.md +40 -0
- data/docs/dsl/by_method/geometry/align_right.md +40 -0
- data/docs/dsl/by_method/geometry/align_top.md +40 -0
- data/docs/dsl/by_method/geometry/columns.md +1 -0
- data/docs/dsl/by_method/geometry/height.md +0 -0
- data/docs/dsl/by_method/geometry/horizontal_alignment.md +1 -0
- data/docs/dsl/by_method/geometry/rows.md +1 -0
- data/docs/dsl/by_method/geometry/vertical_alignment.md +1 -0
- data/docs/dsl/by_method/geometry/width.md +0 -0
- data/docs/dsl/by_method/geometry/x.md +1 -0
- data/docs/dsl/by_method/geometry/xn.md +1 -0
- data/docs/dsl/by_method/geometry/y.md +1 -0
- data/docs/dsl/by_method/geometry/yn.md +1 -0
- data/docs/dsl/by_method/render.md +5 -1
- data/docs/dsl/by_method/renders.md +31 -1
- data/docs/dsl/by_method/view.md +26 -0
- data/docs/dsl/by_method/view/stream.md +18 -0
- data/docs/dsl/by_method/views.md +32 -1
- data/docs/events/by_name/set_border_caption.md +2 -4
- data/docs/events/by_name/set_border_title.md +2 -4
- data/examples/views/empty_template.rb +0 -4
- data/examples/views/full_screen.rb +30 -5
- data/examples/views/misc_view.rb +464 -0
- data/examples/views/wordwrap.rb +72 -0
- data/examples/views/wordwrap.txt +8 -0
- data/integrations/dsl_app_021.rb +127 -0
- data/integrations/dsl_app_022.rb +133 -0
- data/integrations/expected/342_streams.out +1 -1
- data/integrations/expected/dsl_app_001.out +1 -1
- data/integrations/expected/dsl_app_002.out +1 -1
- data/integrations/expected/dsl_app_003.out +1 -1
- data/integrations/expected/dsl_app_004.out +1 -1
- data/integrations/expected/dsl_app_005.out +1 -1
- data/integrations/expected/dsl_app_006.out +1 -1
- data/integrations/expected/dsl_app_007.out +1 -1
- data/integrations/expected/dsl_app_008.out +1 -1
- data/integrations/expected/dsl_app_009.out +1 -1
- data/integrations/expected/dsl_app_010.out +1 -1
- data/integrations/expected/dsl_app_011.out +1 -1
- data/integrations/expected/dsl_app_012.out +1 -1
- data/integrations/expected/dsl_app_013.out +1 -1
- data/integrations/expected/dsl_app_014.out +1 -1
- data/integrations/expected/dsl_app_015.out +1 -1
- data/integrations/expected/dsl_app_016.out +1 -1
- data/integrations/expected/dsl_app_021.out +1 -0
- data/integrations/expected/dsl_app_022.out +1 -0
- data/integrations/support/test_interface_021.rb +7 -0
- data/integrations/support/test_interface_022.rb +15 -0
- data/lib/vedeu/all.rb +4 -2
- data/lib/vedeu/borders/border.rb +22 -6
- data/lib/vedeu/borders/repository.rb +4 -8
- data/lib/vedeu/buffers/buffer.rb +9 -6
- data/lib/vedeu/buffers/empty.rb +26 -23
- data/lib/vedeu/buffers/view.rb +44 -41
- data/lib/vedeu/cells/cursor.rb +0 -2
- data/lib/vedeu/cells/empty.rb +0 -1
- data/lib/vedeu/cells/escape.rb +0 -2
- data/lib/vedeu/coercers/alignment.rb +58 -8
- data/lib/vedeu/coercers/horizontal_alignment.rb +13 -9
- data/lib/vedeu/coercers/vertical_alignment.rb +13 -8
- data/lib/vedeu/common.rb +1 -1
- data/lib/vedeu/configuration/configuration.rb +41 -3
- data/lib/vedeu/cursors/coordinate.rb +1 -3
- data/lib/vedeu/cursors/cursor.rb +2 -6
- data/lib/vedeu/dsl/all.rb +1 -2
- data/lib/vedeu/dsl/border.rb +6 -6
- data/lib/vedeu/dsl/elements.rb +2 -2
- data/lib/vedeu/dsl/geometry.rb +7 -7
- data/lib/vedeu/dsl/{string → helpers}/align.rb +0 -0
- data/lib/vedeu/dsl/helpers/all.rb +17 -0
- data/lib/vedeu/dsl/{attributes.rb → helpers/attributes.rb} +0 -0
- data/lib/vedeu/dsl/{string → helpers}/text.rb +0 -0
- data/lib/vedeu/dsl/{string → helpers}/truncate.rb +0 -0
- data/lib/vedeu/dsl/{string → helpers}/wordwrap.rb +0 -0
- data/lib/vedeu/dsl/view.rb +11 -19
- data/lib/vedeu/dsl/views.rb +16 -106
- data/lib/vedeu/geometries/all.rb +0 -1
- data/lib/vedeu/geometries/area/area.rb +6 -12
- data/lib/vedeu/geometries/area/dimension.rb +21 -44
- data/lib/vedeu/geometries/dsl/all.rb +0 -1
- data/lib/vedeu/geometries/dsl/dsl.rb +22 -31
- data/lib/vedeu/geometries/geometry.rb +6 -0
- data/lib/vedeu/geometries/position.rb +6 -3
- data/lib/vedeu/geometries/repository.rb +1 -1
- data/lib/vedeu/input/mouse.rb +1 -0
- data/lib/vedeu/logging/log.rb +3 -6
- data/lib/vedeu/menus/dsl.rb +4 -5
- data/lib/vedeu/output/compressor.rb +11 -1
- data/lib/vedeu/output/viewport.rb +59 -59
- data/lib/vedeu/presentation/all.rb +1 -2
- data/lib/vedeu/presentation/colour.rb +75 -3
- data/lib/vedeu/{geometries/positionable.rb → presentation/position.rb} +4 -4
- data/lib/vedeu/presentation/presentation.rb +1 -3
- data/lib/vedeu/presentation/styles.rb +16 -1
- data/lib/vedeu/repositories/all.rb +0 -1
- data/lib/vedeu/sentence.rb +91 -0
- data/lib/vedeu/support/point.rb +72 -0
- data/lib/vedeu/terminal/terminal.rb +11 -53
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu/views/composition.rb +11 -1
- data/lib/vedeu/views/default_attributes.rb +2 -0
- data/lib/vedeu/views/line.rb +16 -1
- data/lib/vedeu/views/stream.rb +16 -1
- data/lib/vedeu/views/view.rb +25 -17
- data/test/lib/vedeu/borders/border_test.rb +20 -2
- data/test/lib/vedeu/buffers/buffer_test.rb +15 -2
- data/test/lib/vedeu/buffers/empty_test.rb +51 -18
- data/test/lib/vedeu/buffers/view_test.rb +2 -2
- data/test/lib/vedeu/coercers/alignment_test.rb +32 -0
- data/test/lib/vedeu/coercers/horizontal_alignment_test.rb +16 -0
- data/test/lib/vedeu/coercers/vertical_alignment_test.rb +16 -0
- data/test/lib/vedeu/cursors/cursor_test.rb +4 -4
- data/test/lib/vedeu/cursors/dsl_test.rb +35 -21
- data/test/lib/vedeu/dsl/elements_test.rb +94 -2
- data/test/lib/vedeu/dsl/{string → helpers}/align_test.rb +0 -0
- data/test/lib/vedeu/dsl/{attributes_test.rb → helpers/attributes_test.rb} +0 -0
- data/test/lib/vedeu/dsl/{string → helpers}/text_test.rb +0 -0
- data/test/lib/vedeu/dsl/{string → helpers}/truncate_test.rb +0 -0
- data/test/lib/vedeu/dsl/{string → helpers}/wordwrap_test.rb +0 -0
- data/test/lib/vedeu/dsl/view_test.rb +22 -4
- data/test/lib/vedeu/dsl/views_test.rb +8 -5
- data/test/lib/vedeu/geometries/dsl/dsl_test.rb +2 -159
- data/test/lib/vedeu/geometries/position_test.rb +118 -60
- data/test/lib/vedeu/input/mouse_test.rb +1 -6
- data/test/lib/vedeu/logging/log_test.rb +14 -3
- data/test/lib/vedeu/presentation/colour_test.rb +77 -0
- data/test/lib/vedeu/{geometries/positionable_test.rb → presentation/position_test.rb} +4 -4
- data/test/lib/vedeu/sentence_test.rb +49 -0
- data/test/lib/vedeu/support/point_test.rb +139 -0
- data/test/lib/vedeu/terminal/terminal_test.rb +3 -44
- data/test/lib/vedeu/views/composition_test.rb +24 -4
- data/test/lib/vedeu/views/default_attributes_test.rb +10 -2
- data/test/lib/vedeu/views/view_test.rb +8 -15
- data/test/support/examples/material_colours_app.rb +0 -6
- data/vedeu.gemspec +1 -1
- metadata +58 -38
- data/examples/views/lines_line_stream.rb +0 -95
- data/examples/views/lines_line_streams.rb +0 -75
- data/examples/views/lines_line_streams_stream.rb +0 -78
- data/examples/views/lines_line_streams_stream_stream.rb +0 -50
- data/examples/views/lines_streams.rb +0 -93
- data/lib/vedeu/dsl/string/all.rb +0 -16
- data/lib/vedeu/geometries/dsl/validator.rb +0 -62
- data/lib/vedeu/presentation/background.rb +0 -54
- data/lib/vedeu/presentation/foreground.rb +0 -54
- data/lib/vedeu/repositories/parent.rb +0 -34
- data/test/lib/vedeu/geometries/dsl/validator_test.rb +0 -85
- data/test/lib/vedeu/presentation/background_test.rb +0 -74
- data/test/lib/vedeu/presentation/foreground_test.rb +0 -75
data/lib/vedeu/geometries/all.rb
CHANGED
@@ -70,14 +70,14 @@ module Vedeu
|
|
70
70
|
d_dn: attributes[:width],
|
71
71
|
maximised: attributes[:maximised],
|
72
72
|
}
|
73
|
-
|
74
|
-
|
73
|
+
dy, dyn = Vedeu::Geometries::YDimension.pair(y_attributes)
|
74
|
+
dx, dxn = Vedeu::Geometries::XDimension.pair(x_attributes)
|
75
75
|
|
76
76
|
new(name: attributes[:name],
|
77
|
-
y:
|
78
|
-
yn:
|
79
|
-
x:
|
80
|
-
xn:
|
77
|
+
y: dy,
|
78
|
+
yn: dyn,
|
79
|
+
x: dx,
|
80
|
+
xn: dxn)
|
81
81
|
end
|
82
82
|
|
83
83
|
# Returns a new instance of Vedeu::Area.
|
@@ -205,9 +205,6 @@ module Vedeu
|
|
205
205
|
# @return [Fixnum]
|
206
206
|
def height
|
207
207
|
(yn - y) + 1
|
208
|
-
|
209
|
-
# (yn - y) + 2
|
210
|
-
# (y..yn).size# + 1
|
211
208
|
end
|
212
209
|
|
213
210
|
# Returns the width of the interface.
|
@@ -215,9 +212,6 @@ module Vedeu
|
|
215
212
|
# @return [Fixnum]
|
216
213
|
def width
|
217
214
|
(xn - x) + 1
|
218
|
-
|
219
|
-
# (xn - x) + 2
|
220
|
-
# (x..xn).size# + 1
|
221
215
|
end
|
222
216
|
|
223
217
|
# Returns the row above the top by default.
|
@@ -46,11 +46,30 @@ module Vedeu
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
49
|
+
# Return the coordinate pair.
|
50
|
+
#
|
51
|
+
# 1) If maximised, it will be from the first row/line or column/
|
52
|
+
# character to the last row/line or column/character of the
|
53
|
+
# terminal.
|
50
54
|
#
|
51
55
|
# @return [Array<Fixnum>]
|
52
56
|
def pair
|
53
|
-
|
57
|
+
if maximised?
|
58
|
+
[1, default]
|
59
|
+
|
60
|
+
elsif bottom_aligned? || right_aligned?
|
61
|
+
[start_coordinate, default]
|
62
|
+
|
63
|
+
elsif centre_aligned? || middle_aligned?
|
64
|
+
[centred_d, centred_dn]
|
65
|
+
|
66
|
+
elsif left_aligned? || top_aligned?
|
67
|
+
[1, end_coordinate]
|
68
|
+
|
69
|
+
else
|
70
|
+
[_d, _dn]
|
71
|
+
|
72
|
+
end
|
54
73
|
end
|
55
74
|
|
56
75
|
protected
|
@@ -83,43 +102,6 @@ module Vedeu
|
|
83
102
|
@_alignment ||= Vedeu::Coercers::Alignment.coerce(@alignment)
|
84
103
|
end
|
85
104
|
|
86
|
-
# Return the dimension.
|
87
|
-
#
|
88
|
-
# 1) If maximised, it will be from the first row/line or column/
|
89
|
-
# character to the last row/line or column/character of the
|
90
|
-
# terminal.
|
91
|
-
# 2) If centred,
|
92
|
-
#
|
93
|
-
# @return [Array<Fixnum>]
|
94
|
-
def dimension
|
95
|
-
@dimension = if maximised?
|
96
|
-
[1, default]
|
97
|
-
|
98
|
-
elsif bottom_aligned? || right_aligned?
|
99
|
-
[start_coordinate, default]
|
100
|
-
|
101
|
-
elsif centre_aligned? || middle_aligned?
|
102
|
-
[centred_d, centred_dn]
|
103
|
-
|
104
|
-
elsif left_aligned? || top_aligned?
|
105
|
-
[1, end_coordinate]
|
106
|
-
|
107
|
-
else
|
108
|
-
[_d, _dn]
|
109
|
-
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# Return a boolean indicating we know the length if a we know
|
114
|
-
# either the terminal width or height, or we can determine a
|
115
|
-
# length from the values provided.
|
116
|
-
#
|
117
|
-
# @return [Boolean]
|
118
|
-
# @todo Investigate: should this be && or ||. (GL: 2015-10-16)
|
119
|
-
def length?
|
120
|
-
default && length
|
121
|
-
end
|
122
|
-
|
123
105
|
# Provide the number of rows/lines or columns/characters.
|
124
106
|
#
|
125
107
|
# 1) Use the starting (x or y) and ending (xn or yn) values.
|
@@ -227,23 +209,18 @@ module Vedeu
|
|
227
209
|
# @return [Fixnum]
|
228
210
|
def _dn
|
229
211
|
if dn
|
230
|
-
# fail "_dn 1 v:#{d} #{dn}"
|
231
212
|
dn
|
232
213
|
|
233
214
|
elsif d.nil? && d_dn
|
234
|
-
# fail "_dn 2 v:#{d_dn}"
|
235
215
|
d_dn
|
236
216
|
|
237
217
|
elsif d && d_dn
|
238
|
-
# fail "_dn 3 v:#{d} #{d_dn}"
|
239
218
|
(d + d_dn) - 1
|
240
219
|
|
241
220
|
elsif default
|
242
|
-
# fail "_dn 4 v:#{default}"
|
243
221
|
default
|
244
222
|
|
245
223
|
else
|
246
|
-
# fail "_dn 5 v:1"
|
247
224
|
1
|
248
225
|
|
249
226
|
end
|
@@ -75,10 +75,10 @@ module Vedeu
|
|
75
75
|
#
|
76
76
|
class DSL
|
77
77
|
|
78
|
+
include Vedeu::Common
|
78
79
|
include Vedeu::DSL
|
79
80
|
include Vedeu::DSL::Geometry
|
80
81
|
include Vedeu::DSL::Use
|
81
|
-
include Vedeu::Geometries::Validator
|
82
82
|
|
83
83
|
# Align the interface/view horizontally or vertically within
|
84
84
|
# the terminal.
|
@@ -100,12 +100,7 @@ module Vedeu
|
|
100
100
|
# - When the vertical is given (and not :none) and the height
|
101
101
|
# is not given.
|
102
102
|
# @return [Vedeu::Geometries::Geometry]
|
103
|
-
def align(vertical, horizontal, width, height)
|
104
|
-
validate_vertical_alignment!(vertical)
|
105
|
-
validate_horizontal_alignment!(horizontal)
|
106
|
-
validate_height!(height) unless vertical == :none
|
107
|
-
validate_width!(width) unless horizontal == :none
|
108
|
-
|
103
|
+
def align(vertical: :none, horizontal: :none, width: nil, height: nil)
|
109
104
|
horizontal_alignment(horizontal, width)
|
110
105
|
vertical_alignment(vertical, height)
|
111
106
|
end
|
@@ -114,26 +109,22 @@ module Vedeu
|
|
114
109
|
# :right.
|
115
110
|
# @param width [Fixnum] The number of characters/columns.
|
116
111
|
# @return [Vedeu::Geometries::Geometry]
|
117
|
-
def horizontal_alignment(value, width)
|
118
|
-
|
119
|
-
validate_width!(width)
|
112
|
+
def horizontal_alignment(value = :none, width = nil)
|
113
|
+
alignment = Vedeu::Coercers::HorizontalAlignment.validate(value)
|
120
114
|
|
121
|
-
model.
|
122
|
-
|
123
|
-
model.width = width
|
115
|
+
model.width = width if width
|
116
|
+
model.horizontal_alignment = alignment
|
124
117
|
model
|
125
118
|
end
|
126
119
|
|
127
120
|
# @param value [Symbol] One of :bottom, :middle, :none, :top.
|
128
121
|
# @param height [Fixnum] The number of lines/rows.
|
129
122
|
# @return [Vedeu::Geometries::Geometry]
|
130
|
-
def vertical_alignment(value, height)
|
131
|
-
|
132
|
-
validate_height!(height)
|
123
|
+
def vertical_alignment(value = :none, height = nil)
|
124
|
+
alignment = Vedeu::Coercers::VerticalAlignment.validate(value)
|
133
125
|
|
134
|
-
model.
|
135
|
-
|
136
|
-
model.height = height
|
126
|
+
model.height = height if height
|
127
|
+
model.vertical_alignment = alignment
|
137
128
|
model
|
138
129
|
end
|
139
130
|
|
@@ -148,7 +139,7 @@ module Vedeu
|
|
148
139
|
# # vertical_alignment(:bottom, 30)
|
149
140
|
#
|
150
141
|
# # or you can use: (see notes)
|
151
|
-
# # align(:bottom, :
|
142
|
+
# # align(vertical: :bottom, height: 30)
|
152
143
|
#
|
153
144
|
# # ... some code
|
154
145
|
# end
|
@@ -161,7 +152,7 @@ module Vedeu
|
|
161
152
|
# @raise [Vedeu::Error::InvalidSyntax] When the height is not
|
162
153
|
# given.
|
163
154
|
# @return [Vedeu::Geometries::Geometry]
|
164
|
-
def align_bottom(height)
|
155
|
+
def align_bottom(height = nil)
|
165
156
|
vertical_alignment(:bottom, height)
|
166
157
|
end
|
167
158
|
|
@@ -175,7 +166,7 @@ module Vedeu
|
|
175
166
|
# # horizontal_alignment(:centre, 30)
|
176
167
|
#
|
177
168
|
# # or you can use: (see notes)
|
178
|
-
# # align(:
|
169
|
+
# # align(horizontal: :centre, width: 30)
|
179
170
|
#
|
180
171
|
# # ... some code
|
181
172
|
# end
|
@@ -190,7 +181,7 @@ module Vedeu
|
|
190
181
|
# @raise [Vedeu::Error::InvalidSyntax] When the width is not
|
191
182
|
# given.
|
192
183
|
# @return [Vedeu::Geometries::Geometry]
|
193
|
-
def align_centre(width)
|
184
|
+
def align_centre(width = nil)
|
194
185
|
horizontal_alignment(:centre, width)
|
195
186
|
end
|
196
187
|
alias_method :align_center, :align_centre
|
@@ -205,7 +196,7 @@ module Vedeu
|
|
205
196
|
# # horizontal_alignment(:left, 30)
|
206
197
|
#
|
207
198
|
# # or you can use: (see notes)
|
208
|
-
# # align(:
|
199
|
+
# # align(horizontal: :left, width: 30)
|
209
200
|
#
|
210
201
|
# # ... some code
|
211
202
|
# end
|
@@ -218,7 +209,7 @@ module Vedeu
|
|
218
209
|
# @raise [Vedeu::Error::InvalidSyntax] When the width is not
|
219
210
|
# given.
|
220
211
|
# @return [Vedeu::Geometries::Geometry]
|
221
|
-
def align_left(width)
|
212
|
+
def align_left(width = nil)
|
222
213
|
horizontal_alignment(:left, width)
|
223
214
|
end
|
224
215
|
|
@@ -233,7 +224,7 @@ module Vedeu
|
|
233
224
|
# # vertical_alignment(:middle, 30)
|
234
225
|
#
|
235
226
|
# # or you can use: (see notes)
|
236
|
-
# # align(:middle, :
|
227
|
+
# # align(vertical: :middle, height: 30)
|
237
228
|
#
|
238
229
|
# # ... some code
|
239
230
|
# end
|
@@ -246,7 +237,7 @@ module Vedeu
|
|
246
237
|
# @raise [Vedeu::Error::InvalidSyntax] When the height is not
|
247
238
|
# given.
|
248
239
|
# @return [Vedeu::Geometries::Geometry]
|
249
|
-
def align_middle(height)
|
240
|
+
def align_middle(height = nil)
|
250
241
|
vertical_alignment(:middle, height)
|
251
242
|
end
|
252
243
|
|
@@ -260,7 +251,7 @@ module Vedeu
|
|
260
251
|
# # horizontal_alignment(:right, 30)
|
261
252
|
#
|
262
253
|
# # or you can use: (see notes)
|
263
|
-
# # align(:
|
254
|
+
# # align(horizontal: :right, width: 30)
|
264
255
|
#
|
265
256
|
# # ... some code
|
266
257
|
# end
|
@@ -273,7 +264,7 @@ module Vedeu
|
|
273
264
|
# @raise [Vedeu::Error::InvalidSyntax] When the width is not
|
274
265
|
# given.
|
275
266
|
# @return [Vedeu::Geometries::Geometry]
|
276
|
-
def align_right(width)
|
267
|
+
def align_right(width = nil)
|
277
268
|
horizontal_alignment(:right, width)
|
278
269
|
end
|
279
270
|
|
@@ -288,7 +279,7 @@ module Vedeu
|
|
288
279
|
# # vertical_alignment(:top, 30)
|
289
280
|
#
|
290
281
|
# # or you can use: (see notes)
|
291
|
-
# # align(:top, :
|
282
|
+
# # align(vertical: :top, height: 30)
|
292
283
|
#
|
293
284
|
# # ... some code
|
294
285
|
# end
|
@@ -301,7 +292,7 @@ module Vedeu
|
|
301
292
|
# @raise [Vedeu::Error::InvalidSyntax] When the height is not
|
302
293
|
# given.
|
303
294
|
# @return [Vedeu::Geometries::Geometry]
|
304
|
-
def align_top(height)
|
295
|
+
def align_top(height = nil)
|
305
296
|
vertical_alignment(:top, height)
|
306
297
|
end
|
307
298
|
|
@@ -189,6 +189,12 @@ module Vedeu
|
|
189
189
|
|
190
190
|
private
|
191
191
|
|
192
|
+
# @todo Investigate the differences between memoizing this and
|
193
|
+
# not memoizing. Memoizing saves ~80ms on running test suite
|
194
|
+
# and considerably impacts app responsiveness, however changes
|
195
|
+
# to the geometry (such as movement or maximising) are not
|
196
|
+
# reflected. (GL: 2016-01-11)
|
197
|
+
#
|
192
198
|
# @return [Vedeu::Geometries::Area]
|
193
199
|
def area
|
194
200
|
Vedeu::Geometries::Area.from_attributes(area_attributes)
|
@@ -44,6 +44,9 @@ module Vedeu
|
|
44
44
|
elsif value.is_a?(Hash)
|
45
45
|
new(value.fetch(:y, 1), value.fetch(:x, 1))
|
46
46
|
|
47
|
+
elsif value.is_a?(NilClass)
|
48
|
+
nil
|
49
|
+
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
@@ -53,8 +56,8 @@ module Vedeu
|
|
53
56
|
# @param x [Fixnum] The column/character position.
|
54
57
|
# @return [Vedeu::Geometries::Position]
|
55
58
|
def initialize(y = 1, x = 1)
|
56
|
-
@y = (
|
57
|
-
@x = (
|
59
|
+
@y = Vedeu::Point.coerce(value: y, max: Vedeu.height).value
|
60
|
+
@x = Vedeu::Point.coerce(value: x, max: Vedeu.width).value
|
58
61
|
|
59
62
|
freeze
|
60
63
|
end
|
@@ -87,7 +90,7 @@ module Vedeu
|
|
87
90
|
# @param other [Vedeu::Geometries::Position]
|
88
91
|
# @return [Boolean]
|
89
92
|
def eql?(other)
|
90
|
-
self.class == other.class &&
|
93
|
+
self.class == other.class && x == other.x && y == other.y
|
91
94
|
end
|
92
95
|
alias_method :==, :eql?
|
93
96
|
|
data/lib/vedeu/input/mouse.rb
CHANGED
data/lib/vedeu/logging/log.rb
CHANGED
@@ -26,14 +26,11 @@ module Vedeu
|
|
26
26
|
#
|
27
27
|
# @return [String]
|
28
28
|
def log(message:, force: false, type: :info)
|
29
|
-
|
30
|
-
|
31
|
-
if (Vedeu.config.log? || force) &&
|
32
|
-
Vedeu.config.loggable?(type)
|
29
|
+
if (Vedeu.config.log? || force) && Vedeu.config.loggable?(type)
|
30
|
+
output = log_entry(type, message)
|
33
31
|
logger.debug(output)
|
32
|
+
output
|
34
33
|
end
|
35
|
-
|
36
|
-
output
|
37
34
|
end
|
38
35
|
|
39
36
|
# Write a message to STDOUT.
|
data/lib/vedeu/menus/dsl.rb
CHANGED
@@ -20,8 +20,7 @@ module Vedeu
|
|
20
20
|
# @param name [String|Symbol] The name of the interface or
|
21
21
|
# view to which this menu belongs.
|
22
22
|
# @param block [Proc] A set of attributes which define the
|
23
|
-
# features of the menu.
|
24
|
-
# {Vedeu::Menus::DSL#name}.
|
23
|
+
# features of the menu.
|
25
24
|
#
|
26
25
|
# @example
|
27
26
|
# Vedeu.menu :my_interface do
|
@@ -35,9 +34,9 @@ module Vedeu
|
|
35
34
|
# # ...
|
36
35
|
# end
|
37
36
|
#
|
38
|
-
# @
|
39
|
-
#
|
40
|
-
#
|
37
|
+
# @macro raise_requires_block
|
38
|
+
# @raise [Vedeu::Error::MissingRequired] When a name is not
|
39
|
+
# given.
|
41
40
|
# @return [API::Menu]
|
42
41
|
def menu(name, &block)
|
43
42
|
fail Vedeu::Error::MissingRequired unless name
|
@@ -84,15 +84,25 @@ module Vedeu
|
|
84
84
|
def compress
|
85
85
|
message = "Compression for #{content.size} objects"
|
86
86
|
|
87
|
+
@same = ''
|
87
88
|
@compress ||= Vedeu.timer(message) do
|
88
89
|
out = content.map do |cell|
|
89
|
-
[
|
90
|
+
rendered = [
|
90
91
|
# position_for(cell),
|
91
92
|
cell.position.to_s,
|
92
93
|
colour_for(cell),
|
93
94
|
style_for(cell),
|
94
95
|
cell.value,
|
95
96
|
].join
|
97
|
+
|
98
|
+
if @same == rendered
|
99
|
+
next
|
100
|
+
|
101
|
+
else
|
102
|
+
@same = rendered
|
103
|
+
@same
|
104
|
+
|
105
|
+
end
|
96
106
|
end.join
|
97
107
|
|
98
108
|
Vedeu.log(type: :compress,
|