vedeu 0.6.4 → 0.6.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/.codeclimate.yml +40 -0
- data/README.md +1 -0
- data/docs/dsl.md +24 -24
- data/lib/vedeu/all.rb +21 -44
- data/lib/vedeu/api.rb +13 -13
- data/lib/vedeu/application/application_controller.rb +2 -0
- data/lib/vedeu/bindings/movement.rb +53 -18
- data/lib/vedeu/bindings/refresh.rb +1 -1
- data/lib/vedeu/bindings/system.rb +2 -2
- data/lib/vedeu/bindings/visibility.rb +3 -3
- data/lib/vedeu/borders/all.rb +13 -0
- data/lib/vedeu/borders/border.rb +209 -202
- data/lib/vedeu/{dsl/border.rb → borders/dsl.rb} +15 -15
- data/lib/vedeu/{null/border.rb → borders/null.rb} +9 -9
- data/lib/vedeu/borders/render.rb +347 -0
- data/lib/vedeu/borders/repository.rb +19 -0
- data/lib/vedeu/buffers/all.rb +13 -0
- data/lib/vedeu/buffers/buffer.rb +182 -176
- data/lib/vedeu/{null/buffer.rb → buffers/null.rb} +8 -8
- data/lib/vedeu/buffers/repository.rb +24 -0
- data/lib/vedeu/buffers/virtual_buffer.rb +2 -2
- data/lib/vedeu/cursors/all.rb +11 -0
- data/lib/vedeu/cursors/cursor.rb +276 -0
- data/lib/vedeu/cursors/refresh.rb +84 -0
- data/lib/vedeu/cursors/repository.rb +34 -0
- data/lib/vedeu/dsl/interface.rb +9 -9
- data/lib/vedeu/dsl/shared.rb +11 -11
- data/lib/vedeu/{exceptions.rb → error.rb} +2 -2
- data/lib/vedeu/esc/esc.rb +1 -1
- data/lib/vedeu/geometry/all.rb +18 -0
- data/lib/vedeu/geometry/area.rb +170 -160
- data/lib/vedeu/geometry/coordinate.rb +61 -39
- data/lib/vedeu/geometry/dimension.rb +139 -132
- data/lib/vedeu/{dsl/geometry.rb → geometry/dsl.rb} +11 -11
- data/lib/vedeu/geometry/generic_coordinate.rb +159 -153
- data/lib/vedeu/geometry/geometry.rb +310 -212
- data/lib/vedeu/geometry/grid.rb +73 -69
- data/lib/vedeu/{null/geometry.rb → geometry/null.rb} +10 -10
- data/lib/vedeu/geometry/position.rb +124 -120
- data/lib/vedeu/geometry/repository.rb +19 -0
- data/lib/vedeu/input/editor/document.rb +2 -2
- data/lib/vedeu/internal_api.rb +8 -8
- data/lib/vedeu/models/escape.rb +2 -2
- data/lib/vedeu/models/interface.rb +1 -1
- data/lib/vedeu/models/page.rb +89 -0
- data/lib/vedeu/models/row.rb +66 -0
- data/lib/vedeu/models/toggleable.rb +1 -1
- data/lib/vedeu/models/views/char.rb +7 -6
- data/lib/vedeu/models/views/line.rb +1 -1
- data/lib/vedeu/models/views/view.rb +2 -2
- data/lib/vedeu/options.rb +19 -0
- data/lib/vedeu/output/clear/named_interface.rb +1 -1
- data/lib/vedeu/output/direct.rb +1 -1
- data/lib/vedeu/output/presentation.rb +2 -1
- data/lib/vedeu/output/viewport.rb +3 -3
- data/lib/vedeu/repositories/model.rb +9 -1
- data/lib/vedeu/repositories/repository.rb +5 -0
- data/lib/vedeu/terminal/terminal.rb +3 -3
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/borders/border_test.rb +299 -291
- data/test/lib/vedeu/{dsl/border_test.rb → borders/dsl_test.rb} +6 -6
- data/test/lib/vedeu/{null/border_test.rb → borders/null_test.rb} +6 -6
- data/test/lib/vedeu/borders/render_test.rb +125 -0
- data/test/lib/vedeu/borders/repository_test.rb +17 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +116 -112
- data/test/lib/vedeu/{null/buffer_test.rb → buffers/null_test.rb} +5 -5
- data/test/lib/vedeu/buffers/repository_test.rb +18 -0
- data/test/lib/vedeu/cursors/cursor_test.rb +370 -0
- data/test/lib/vedeu/cursors/refresh_test.rb +69 -0
- data/test/lib/vedeu/cursors/repository_test.rb +41 -0
- data/test/lib/vedeu/dsl/interface_test.rb +5 -5
- data/test/lib/vedeu/{exceptions_test.rb → error_test.rb} +0 -0
- data/test/lib/vedeu/geometry/area_test.rb +141 -137
- data/test/lib/vedeu/geometry/coordinate_test.rb +93 -89
- data/test/lib/vedeu/geometry/dimension_test.rb +137 -133
- data/test/lib/vedeu/{dsl/geometry_test.rb → geometry/dsl_test.rb} +17 -17
- data/test/lib/vedeu/geometry/generic_coordinate_test.rb +32 -28
- data/test/lib/vedeu/geometry/geometry_test.rb +282 -157
- data/test/lib/vedeu/geometry/grid_test.rb +35 -31
- data/test/lib/vedeu/{null/geometry_test.rb → geometry/null_test.rb} +5 -5
- data/test/lib/vedeu/geometry/position_test.rb +146 -142
- data/test/lib/vedeu/geometry/repository_test.rb +19 -0
- data/test/lib/vedeu/input/editor/document_test.rb +1 -1
- data/test/lib/vedeu/models/escape_test.rb +1 -1
- data/test/lib/vedeu/models/interface_test.rb +2 -2
- data/test/lib/vedeu/models/page_test.rb +235 -0
- data/test/lib/vedeu/models/row_test.rb +111 -0
- data/test/lib/vedeu/models/views/char_test.rb +3 -3
- data/test/lib/vedeu/options_test.rb +57 -0
- data/test/lib/vedeu/output/clear/named_interface_test.rb +1 -1
- data/test/lib/vedeu/output/renderers/json_test.rb +1 -1
- data/test/lib/vedeu/output/viewport_test.rb +15 -9
- data/test/lib/vedeu/refresh/refresh_buffer_test.rb +12 -12
- data/test/lib/vedeu/repositories/repositories_test.rb +1 -1
- data/test/lib/vedeu/repositories/repository_test.rb +7 -0
- data/test/lib/vedeu/terminal/terminal_test.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/vedeu.gemspec +2 -2
- metadata +57 -63
- data/lib/vedeu/borders/borders.rb +0 -15
- data/lib/vedeu/borders/render_border.rb +0 -331
- data/lib/vedeu/buffers/buffers.rb +0 -20
- data/lib/vedeu/cursor/cursor.rb +0 -174
- data/lib/vedeu/cursor/cursors.rb +0 -30
- data/lib/vedeu/cursor/move.rb +0 -239
- data/lib/vedeu/cursor/reposition.rb +0 -78
- data/lib/vedeu/geometry/geometries.rb +0 -15
- data/lib/vedeu/refresh/refresh_cursor.rb +0 -92
- data/test/lib/vedeu/borders/borders_test.rb +0 -13
- data/test/lib/vedeu/borders/render_border_test.rb +0 -121
- data/test/lib/vedeu/buffers/buffers_test.rb +0 -14
- data/test/lib/vedeu/cursor/cursor_test.rb +0 -246
- data/test/lib/vedeu/cursor/cursors_test.rb +0 -37
- data/test/lib/vedeu/cursor/move_test.rb +0 -301
- data/test/lib/vedeu/cursor/reposition_test.rb +0 -63
- data/test/lib/vedeu/geometry/geometries_test.rb +0 -15
- data/test/lib/vedeu/refresh/refresh_cursor_test.rb +0 -65
@@ -1,15 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Allows the storing of interface/view borders independent of the interface
|
4
|
-
# instance.
|
5
|
-
#
|
6
|
-
class Borders < Vedeu::Repository
|
7
|
-
|
8
|
-
singleton_class.send(:alias_method, :borders, :repository)
|
9
|
-
|
10
|
-
null Vedeu::Null::Border
|
11
|
-
real Vedeu::Border
|
12
|
-
|
13
|
-
end # Borders
|
14
|
-
|
15
|
-
end # Vedeu
|
@@ -1,331 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Renders the provided border.
|
4
|
-
#
|
5
|
-
class RenderBorder
|
6
|
-
|
7
|
-
extend Forwardable
|
8
|
-
include Vedeu::Common
|
9
|
-
|
10
|
-
def_delegators :border,
|
11
|
-
:bottom?,
|
12
|
-
:bottom_left,
|
13
|
-
:bottom_right,
|
14
|
-
:bx,
|
15
|
-
:bxn,
|
16
|
-
:by,
|
17
|
-
:byn,
|
18
|
-
:caption,
|
19
|
-
:colour,
|
20
|
-
:enabled?,
|
21
|
-
:height,
|
22
|
-
:horizontal,
|
23
|
-
:left?,
|
24
|
-
:name,
|
25
|
-
:right?,
|
26
|
-
:style,
|
27
|
-
:title,
|
28
|
-
:top?,
|
29
|
-
:top_left,
|
30
|
-
:top_right,
|
31
|
-
:width,
|
32
|
-
:vertical
|
33
|
-
|
34
|
-
def_delegators :geometry,
|
35
|
-
:x,
|
36
|
-
:xn,
|
37
|
-
:y,
|
38
|
-
:yn
|
39
|
-
|
40
|
-
# @return [Array<Array<Vedeu::Views::Char>>]
|
41
|
-
# @see Vedeu::RenderBorder#initialize
|
42
|
-
def self.with(border)
|
43
|
-
new(border).render
|
44
|
-
end
|
45
|
-
|
46
|
-
# Returns a new instance of Vedeu::RenderBorder.
|
47
|
-
#
|
48
|
-
# @param border [Vedeu::Border]
|
49
|
-
# @return [Vedeu::RenderBorder]
|
50
|
-
def initialize(border)
|
51
|
-
@border = border
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [Array<Array<Vedeu::Views::Char>>]
|
55
|
-
def render
|
56
|
-
return [] unless enabled?
|
57
|
-
|
58
|
-
Vedeu.timer("Bordering: '#{name}'") do
|
59
|
-
out = [top, bottom]
|
60
|
-
|
61
|
-
height.times { |y| out << [left(y), right(y)] }
|
62
|
-
|
63
|
-
out.flatten
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
protected
|
68
|
-
|
69
|
-
# @!attribute [r] border
|
70
|
-
# @return [Vedeu::Border]
|
71
|
-
attr_reader :border
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
# @param value [String]
|
76
|
-
# @param type [Symbol|NilClass]
|
77
|
-
# @param iy [Fixnum]
|
78
|
-
# @param ix [Fixnum]
|
79
|
-
# @return [Vedeu::Views::Char]
|
80
|
-
def build(value, type = :border, iy = 0, ix = 0)
|
81
|
-
Vedeu::Views::Char.new(value: value,
|
82
|
-
parent: interface,
|
83
|
-
colour: colour,
|
84
|
-
style: style,
|
85
|
-
position: [iy, ix],
|
86
|
-
border: type)
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [Vedeu::Views::Char]
|
90
|
-
def build_bottom_left
|
91
|
-
build(bottom_left, :bottom_left, yn, x) if left?
|
92
|
-
end
|
93
|
-
|
94
|
-
# @return [Vedeu::Views::Char]
|
95
|
-
def build_bottom_right
|
96
|
-
build(bottom_right, :bottom_right, yn, xn) if right?
|
97
|
-
end
|
98
|
-
|
99
|
-
# @return [Array<Vedeu::Views::Char>]
|
100
|
-
def build_top
|
101
|
-
build_horizontal(:bottom_horizontal, y)
|
102
|
-
end
|
103
|
-
|
104
|
-
# @return [Array<Vedeu::Views::Char>]
|
105
|
-
def build_bottom
|
106
|
-
build_horizontal(:bottom_horizontal, yn)
|
107
|
-
end
|
108
|
-
|
109
|
-
# @return [Vedeu::Views::Char]
|
110
|
-
def build_top_left
|
111
|
-
build(top_left, :top_left, y, x) if left?
|
112
|
-
end
|
113
|
-
|
114
|
-
# @return [Vedeu::Views::Char]
|
115
|
-
def build_top_right
|
116
|
-
build(top_right, :top_right, y, xn) if right?
|
117
|
-
end
|
118
|
-
|
119
|
-
# Renders the bottom border for the interface.
|
120
|
-
#
|
121
|
-
# @note
|
122
|
-
# If a caption has been specified, then the bottom border will include
|
123
|
-
# this caption unless the size of the interface is smaller than the padded
|
124
|
-
# caption length.
|
125
|
-
#
|
126
|
-
# @return [String]
|
127
|
-
def bottom
|
128
|
-
return [] unless bottom?
|
129
|
-
|
130
|
-
[build_bottom_left, captionbar, build_bottom_right].compact
|
131
|
-
end
|
132
|
-
|
133
|
-
# @return [Vedeu::Geometry]
|
134
|
-
def geometry
|
135
|
-
Vedeu.geometries.by_name(name)
|
136
|
-
end
|
137
|
-
|
138
|
-
# @param position [Symbol] Either :top_horizontal, or :bottom_horizontal.
|
139
|
-
# @param y_coordinate [Fixnum] The value of either y or yn.
|
140
|
-
# @return [Array<Vedeu::Views::Char>]
|
141
|
-
def build_horizontal(position, y_coordinate)
|
142
|
-
Array.new(width) do |ix|
|
143
|
-
build(horizontal, position, y_coordinate, (bx + ix))
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# The parent of a border is always an interface.
|
148
|
-
#
|
149
|
-
# @return [Vedeu::Interface]
|
150
|
-
def interface
|
151
|
-
@interface ||= Vedeu.interfaces.by_name(name)
|
152
|
-
end
|
153
|
-
alias_method :parent, :interface
|
154
|
-
|
155
|
-
# Renders the left border for the interface.
|
156
|
-
#
|
157
|
-
# @param iy [Fixnum]
|
158
|
-
# @return [String]
|
159
|
-
def left(iy = 0)
|
160
|
-
return [] unless left?
|
161
|
-
|
162
|
-
build(vertical, :left_vertical, (by + iy), x)
|
163
|
-
end
|
164
|
-
|
165
|
-
# Renders the right border for the interface.
|
166
|
-
#
|
167
|
-
# @param iy [Fixnum]
|
168
|
-
# @return [String]
|
169
|
-
def right(iy = 0)
|
170
|
-
return [] unless right?
|
171
|
-
|
172
|
-
build(vertical, :right_vertical, (by + iy), xn)
|
173
|
-
end
|
174
|
-
|
175
|
-
# Renders the top border for the interface.
|
176
|
-
#
|
177
|
-
# @note
|
178
|
-
# If a title has been specified, then the top border will include this
|
179
|
-
# title unless the size of the interface is smaller than the padded title
|
180
|
-
# length.
|
181
|
-
#
|
182
|
-
# @return [String]
|
183
|
-
def top
|
184
|
-
return [] unless top?
|
185
|
-
|
186
|
-
[build_top_left, titlebar, build_top_right].compact
|
187
|
-
end
|
188
|
-
|
189
|
-
# Overwrite the border from {#build_horizontal} on the bottom border to
|
190
|
-
# include the caption if given.
|
191
|
-
#
|
192
|
-
# @return [Array<Vedeu::Views::Char>]
|
193
|
-
def captionbar
|
194
|
-
return build_bottom unless caption? && caption_fits?
|
195
|
-
|
196
|
-
caption_starts_at = (width - caption_characters.size) - 2
|
197
|
-
|
198
|
-
caption_char = 0
|
199
|
-
build_bottom.each_with_index do |char, index|
|
200
|
-
next if index <= caption_starts_at || index > (width - 2)
|
201
|
-
|
202
|
-
char.border = nil
|
203
|
-
char.value = caption_characters[caption_char]
|
204
|
-
caption_char += 1
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
# Overwrite the border from {#build_horizontal} on the top border to
|
209
|
-
# include the title if given.
|
210
|
-
#
|
211
|
-
# @return [Array<Vedeu::Views::Char>]
|
212
|
-
def titlebar
|
213
|
-
return build_top unless title? && title_fits?
|
214
|
-
|
215
|
-
build_top.each_with_index do |char, index|
|
216
|
-
next if index == 0 || index > title_characters.size
|
217
|
-
|
218
|
-
char.border = nil
|
219
|
-
char.value = title_characters[(index - 1)]
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
# Return boolean indicating whether this border has a non-empty title.
|
224
|
-
#
|
225
|
-
# @return [Boolean]
|
226
|
-
def title?
|
227
|
-
present?(title)
|
228
|
-
end
|
229
|
-
|
230
|
-
# Return boolean indicating whether this border has a non-empty caption.
|
231
|
-
#
|
232
|
-
# @return [Boolean]
|
233
|
-
def caption?
|
234
|
-
present?(caption)
|
235
|
-
end
|
236
|
-
|
237
|
-
# Return boolean indicating whether the title fits within the width of the
|
238
|
-
# top border.
|
239
|
-
#
|
240
|
-
# @return [Boolean]
|
241
|
-
def title_fits?
|
242
|
-
width > title_characters.size
|
243
|
-
end
|
244
|
-
|
245
|
-
# Return boolean indicating whether the caption fits within the width of the
|
246
|
-
# bottom border.
|
247
|
-
#
|
248
|
-
# @return [Boolean]
|
249
|
-
def caption_fits?
|
250
|
-
width > caption_characters.size
|
251
|
-
end
|
252
|
-
|
253
|
-
# @return [Array<String>]
|
254
|
-
def title_characters
|
255
|
-
@title_characters ||= title_padded.chars
|
256
|
-
end
|
257
|
-
|
258
|
-
# @return [Array<String>]
|
259
|
-
def caption_characters
|
260
|
-
@caption_characters ||= caption_padded.chars
|
261
|
-
end
|
262
|
-
|
263
|
-
# Pads the title with a single whitespace either side.
|
264
|
-
#
|
265
|
-
# @example
|
266
|
-
# title = 'Truncated!'
|
267
|
-
# width = 20
|
268
|
-
# # => ' Truncated! '
|
269
|
-
#
|
270
|
-
# width = 10
|
271
|
-
# # => ' Trunca '
|
272
|
-
#
|
273
|
-
# @return [String]
|
274
|
-
# @see #truncated_title
|
275
|
-
def title_padded
|
276
|
-
truncated_title.center(truncated_title.size + 2)
|
277
|
-
end
|
278
|
-
|
279
|
-
# Pads the caption with a single whitespace either side.
|
280
|
-
#
|
281
|
-
# @example
|
282
|
-
# caption = 'Truncated!'
|
283
|
-
# width = 20
|
284
|
-
# # => ' Truncated! '
|
285
|
-
#
|
286
|
-
# width = 10
|
287
|
-
# # => ' Trunca '
|
288
|
-
#
|
289
|
-
# @return [String]
|
290
|
-
# @see #truncated_caption
|
291
|
-
def caption_padded
|
292
|
-
truncated_caption.center(truncated_caption.size + 2)
|
293
|
-
end
|
294
|
-
|
295
|
-
# Truncates the title to the width of the interface, minus characters needed
|
296
|
-
# to ensure there is at least a single character of horizontal border and a
|
297
|
-
# whitespace on either side of the title.
|
298
|
-
#
|
299
|
-
# @example
|
300
|
-
# title = 'Truncated!'
|
301
|
-
# width = 20
|
302
|
-
# # => 'Truncated!'
|
303
|
-
#
|
304
|
-
# width = 10
|
305
|
-
# # => 'Trunca'
|
306
|
-
#
|
307
|
-
# @return [String]
|
308
|
-
def truncated_title
|
309
|
-
title.chomp.slice(0..(width - 5))
|
310
|
-
end
|
311
|
-
|
312
|
-
# Truncates the caption to the width of the interface, minus characters
|
313
|
-
# needed to ensure there is at least a single character of horizontal border
|
314
|
-
# and a whitespace on either side of the caption.
|
315
|
-
#
|
316
|
-
# @example
|
317
|
-
# caption = 'Truncated!'
|
318
|
-
# width = 20
|
319
|
-
# # => 'Truncated!'
|
320
|
-
#
|
321
|
-
# width = 10
|
322
|
-
# # => 'Trunca'
|
323
|
-
#
|
324
|
-
# @return [String]
|
325
|
-
def truncated_caption
|
326
|
-
caption.chomp.slice(0..(width - 5))
|
327
|
-
end
|
328
|
-
|
329
|
-
end # RenderBorder
|
330
|
-
|
331
|
-
end # Vedeu
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Allows the storing of view buffers.
|
4
|
-
#
|
5
|
-
class Buffers < Vedeu::Repository
|
6
|
-
|
7
|
-
singleton_class.send(:alias_method, :buffers, :repository)
|
8
|
-
|
9
|
-
null Vedeu::Null::Buffer
|
10
|
-
real Vedeu::Buffer
|
11
|
-
|
12
|
-
end # Buffers
|
13
|
-
|
14
|
-
class Buffer
|
15
|
-
|
16
|
-
repo Vedeu::Buffers.repository
|
17
|
-
|
18
|
-
end # Buffer
|
19
|
-
|
20
|
-
end # Vedeu
|
data/lib/vedeu/cursor/cursor.rb
DELETED
@@ -1,174 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Each interface has its own Cursor which maintains the position and
|
4
|
-
# visibility of the cursor within that interface.
|
5
|
-
#
|
6
|
-
class Cursor
|
7
|
-
|
8
|
-
include Vedeu::Model
|
9
|
-
include Vedeu::Toggleable
|
10
|
-
extend Forwardable
|
11
|
-
|
12
|
-
def_delegators :border,
|
13
|
-
:bx,
|
14
|
-
:bxn,
|
15
|
-
:by,
|
16
|
-
:byn
|
17
|
-
|
18
|
-
# @!attribute [r] attributes
|
19
|
-
# @return [Hash]
|
20
|
-
attr_reader :attributes
|
21
|
-
|
22
|
-
# @!attribute [r] name
|
23
|
-
# @return [String]
|
24
|
-
attr_reader :name
|
25
|
-
|
26
|
-
# @!attribute [rw] ox
|
27
|
-
# @return [Fixnum]
|
28
|
-
attr_accessor :ox
|
29
|
-
|
30
|
-
# @!attribute [rw] oy
|
31
|
-
# @return [Fixnum]
|
32
|
-
attr_accessor :oy
|
33
|
-
|
34
|
-
# @!attribute [r] state
|
35
|
-
# @return [Boolean|Symbol]
|
36
|
-
attr_reader :state
|
37
|
-
|
38
|
-
# @!attribute [w] x
|
39
|
-
# @return [Fixnum]
|
40
|
-
attr_writer :x
|
41
|
-
|
42
|
-
# @!attribute [sw] y
|
43
|
-
# @return [Fixnum]
|
44
|
-
attr_writer :y
|
45
|
-
|
46
|
-
# Returns a new instance of Vedeu::Cursor.
|
47
|
-
#
|
48
|
-
# @param attributes [Hash]
|
49
|
-
# @option attributes name [String] The name of the interface this cursor
|
50
|
-
# belongs to.
|
51
|
-
# @option attributes ox [Fixnum] The offset x coordinate.
|
52
|
-
# @option attributes oy [Fixnum] The offset y coordinate.
|
53
|
-
# @option attributes repository [Vedeu::Repository]
|
54
|
-
# @option attributes visible [Boolean] The visibility of the cursor.
|
55
|
-
# @option attributes x [Fixnum] The terminal x coordinate for the cursor.
|
56
|
-
# @option attributes y [Fixnum] The terminal y coordinate for the cursor.
|
57
|
-
#
|
58
|
-
# @return [Vedeu::Cursor]
|
59
|
-
def initialize(attributes = {})
|
60
|
-
@attributes = defaults.merge!(attributes)
|
61
|
-
|
62
|
-
@attributes.each { |key, value| instance_variable_set("@#{key}", value) }
|
63
|
-
end
|
64
|
-
|
65
|
-
# Renders the cursor.
|
66
|
-
#
|
67
|
-
# @return [Array<Vedeu::Escape>]
|
68
|
-
def render
|
69
|
-
Vedeu::Output.render(visibility)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns an escape sequence to position the cursor and set its visibility.
|
73
|
-
# When passed a block, will position the cursor, yield and return the
|
74
|
-
# original position.
|
75
|
-
#
|
76
|
-
# @return [String]
|
77
|
-
def to_s
|
78
|
-
if block_given?
|
79
|
-
"#{position}#{yield}#{visibility}"
|
80
|
-
|
81
|
-
else
|
82
|
-
"#{visibility}"
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
86
|
-
alias_method :to_str, :to_s
|
87
|
-
|
88
|
-
# Hide a named cursor, or without a name, the cursor of the currently
|
89
|
-
# focussed interface.
|
90
|
-
#
|
91
|
-
# @example
|
92
|
-
# Vedeu.hide_cursor(name)
|
93
|
-
#
|
94
|
-
# @return [Vedeu::Escape]
|
95
|
-
def hide
|
96
|
-
super
|
97
|
-
|
98
|
-
render
|
99
|
-
end
|
100
|
-
|
101
|
-
# Return the position of this cursor.
|
102
|
-
#
|
103
|
-
# @return [Vedeu::Position]
|
104
|
-
def position
|
105
|
-
@position = Vedeu::Position[y, x]
|
106
|
-
end
|
107
|
-
|
108
|
-
# Show a named cursor, or without a name, the cursor of the currently
|
109
|
-
# focussed interface.
|
110
|
-
#
|
111
|
-
# @example
|
112
|
-
# Vedeu.show_cursor(name)
|
113
|
-
#
|
114
|
-
# @return [Vedeu::Escape]
|
115
|
-
def show
|
116
|
-
super
|
117
|
-
|
118
|
-
render
|
119
|
-
end
|
120
|
-
|
121
|
-
# @return [Fixnum] The column/character coordinate.
|
122
|
-
def x
|
123
|
-
@x = bx if @x < bx
|
124
|
-
@x = bxn if @x > bxn
|
125
|
-
|
126
|
-
@attributes[:x] = @x
|
127
|
-
|
128
|
-
@x
|
129
|
-
end
|
130
|
-
|
131
|
-
# @return [Fixnum] The row/line coordinate.
|
132
|
-
def y
|
133
|
-
@y = by if @y < by
|
134
|
-
@y = byn if @y > byn
|
135
|
-
|
136
|
-
@attributes[:y] = @y
|
137
|
-
|
138
|
-
@y
|
139
|
-
end
|
140
|
-
|
141
|
-
private
|
142
|
-
|
143
|
-
# @see Vedeu::Borders#by_name
|
144
|
-
def border
|
145
|
-
@border ||= Vedeu.borders.by_name(name)
|
146
|
-
end
|
147
|
-
|
148
|
-
# The default values for a new instance of this class.
|
149
|
-
#
|
150
|
-
# @return [Hash]
|
151
|
-
def defaults
|
152
|
-
{
|
153
|
-
name: '',
|
154
|
-
ox: 0,
|
155
|
-
oy: 0,
|
156
|
-
repository: Vedeu.cursors,
|
157
|
-
visible: false,
|
158
|
-
x: 1,
|
159
|
-
y: 1,
|
160
|
-
}
|
161
|
-
end
|
162
|
-
|
163
|
-
# Returns the escape sequence for setting the visibility of the cursor.
|
164
|
-
#
|
165
|
-
# @return [String]
|
166
|
-
def visibility
|
167
|
-
value = visible? ? Vedeu::Esc.show_cursor : Vedeu::Esc.hide_cursor
|
168
|
-
|
169
|
-
Vedeu::Escape.new(position: position, value: value)
|
170
|
-
end
|
171
|
-
|
172
|
-
end # Cursor
|
173
|
-
|
174
|
-
end # Vedeu
|