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
@@ -0,0 +1,24 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Buffers
|
4
|
+
|
5
|
+
# Allows the storing of view buffers.
|
6
|
+
#
|
7
|
+
class Repository < Vedeu::Repository
|
8
|
+
|
9
|
+
singleton_class.send(:alias_method, :buffers, :repository)
|
10
|
+
|
11
|
+
null Vedeu::Buffers::Null
|
12
|
+
real Vedeu::Buffers::Buffer
|
13
|
+
|
14
|
+
end # Buffers
|
15
|
+
|
16
|
+
class Buffer
|
17
|
+
|
18
|
+
repo Vedeu::Buffers::Repository.repository
|
19
|
+
|
20
|
+
end # Buffer
|
21
|
+
|
22
|
+
end # Buffers
|
23
|
+
|
24
|
+
end # Vedeu
|
@@ -55,7 +55,7 @@ module Vedeu
|
|
55
55
|
# @param x [Fixnum] The column/character coordinate.
|
56
56
|
# @return [Vedeu::Views::Char]
|
57
57
|
def read(y, x)
|
58
|
-
cy, cx = Vedeu::Position[y, x].as_indices
|
58
|
+
cy, cx = Vedeu::Geometry::Position[y, x].as_indices
|
59
59
|
|
60
60
|
row = fetch(cells, cy)
|
61
61
|
cell = fetch(row, cx)
|
@@ -103,7 +103,7 @@ module Vedeu
|
|
103
103
|
def write(y, x, data)
|
104
104
|
return false unless read(y, x).is_a?(Vedeu::Cell)
|
105
105
|
|
106
|
-
cy, cx = Vedeu::Position[y, x].as_indices
|
106
|
+
cy, cx = Vedeu::Geometry::Position[y, x].as_indices
|
107
107
|
cells[cy][cx] = data
|
108
108
|
|
109
109
|
true
|
@@ -0,0 +1,276 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Cursors
|
4
|
+
|
5
|
+
# Each interface has its own Cursor which maintains the position and
|
6
|
+
# visibility of the cursor within that interface.
|
7
|
+
#
|
8
|
+
class Cursor
|
9
|
+
|
10
|
+
include Vedeu::Model
|
11
|
+
include Vedeu::Toggleable
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
def_delegators :border,
|
15
|
+
:bx,
|
16
|
+
:bxn,
|
17
|
+
:by,
|
18
|
+
:byn
|
19
|
+
|
20
|
+
# @!attribute [r] attributes
|
21
|
+
# @return [Hash]
|
22
|
+
attr_reader :attributes
|
23
|
+
|
24
|
+
# @!attribute [r] name
|
25
|
+
# @return [String]
|
26
|
+
attr_reader :name
|
27
|
+
|
28
|
+
# @!attribute [w] ox
|
29
|
+
# @return [Fixnum]
|
30
|
+
attr_writer :ox
|
31
|
+
|
32
|
+
# @!attribute [w] oy
|
33
|
+
# @return [Fixnum]
|
34
|
+
attr_writer :oy
|
35
|
+
|
36
|
+
# @!attribute [r] state
|
37
|
+
# @return [Boolean|Symbol]
|
38
|
+
attr_reader :state
|
39
|
+
|
40
|
+
# @!attribute [w] x
|
41
|
+
# @return [Fixnum]
|
42
|
+
attr_writer :x
|
43
|
+
|
44
|
+
# @!attribute [w] y
|
45
|
+
# @return [Fixnum]
|
46
|
+
attr_writer :y
|
47
|
+
|
48
|
+
# Returns a new instance of Vedeu::Cursors::Cursor.
|
49
|
+
#
|
50
|
+
# @param attributes [Hash]
|
51
|
+
# @option attributes name [String] The name of the interface this cursor
|
52
|
+
# belongs to.
|
53
|
+
# @option attributes ox [Fixnum] The offset x coordinate.
|
54
|
+
# @option attributes oy [Fixnum] The offset y coordinate.
|
55
|
+
# @option attributes repository [Vedeu::Repository]
|
56
|
+
# @option attributes visible [Boolean] The visibility of the cursor.
|
57
|
+
# @option attributes x [Fixnum] The terminal x coordinate for the cursor.
|
58
|
+
# @option attributes y [Fixnum] The terminal y coordinate for the cursor.
|
59
|
+
#
|
60
|
+
# @return [Vedeu::Cursors::Cursor]
|
61
|
+
def initialize(attributes = {})
|
62
|
+
@attributes = defaults.merge!(attributes)
|
63
|
+
|
64
|
+
@attributes.each do |key, value|
|
65
|
+
instance_variable_set("@#{key}", value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Moves the cursor down by one row.
|
70
|
+
#
|
71
|
+
# @return [Vedeu::Cursors::Cursor]
|
72
|
+
def move_down
|
73
|
+
@oy = @oy + 1
|
74
|
+
|
75
|
+
@attributes = attributes.merge!(x: x,
|
76
|
+
y: coordinate.y_position,
|
77
|
+
ox: ox,
|
78
|
+
oy: oy)
|
79
|
+
|
80
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
81
|
+
end
|
82
|
+
|
83
|
+
# Moves the cursor left by one column.
|
84
|
+
#
|
85
|
+
# @return [Vedeu::Cursors::Cursor]
|
86
|
+
def move_left
|
87
|
+
@ox = @ox - 1
|
88
|
+
|
89
|
+
@attributes = attributes.merge!(x: coordinate.x_position,
|
90
|
+
y: y,
|
91
|
+
ox: ox,
|
92
|
+
oy: oy)
|
93
|
+
|
94
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
95
|
+
end
|
96
|
+
|
97
|
+
# Moves the cursor to the top left of the named interface.
|
98
|
+
#
|
99
|
+
# @return [Vedeu::Cursors::Cursor]
|
100
|
+
def move_origin
|
101
|
+
@attributes = attributes.merge!(x: bx, y: by, ox: 0, oy: 0)
|
102
|
+
|
103
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
104
|
+
end
|
105
|
+
|
106
|
+
# Moves the cursor right by one column.
|
107
|
+
#
|
108
|
+
# @return [Vedeu::Cursors::Cursor]
|
109
|
+
def move_right
|
110
|
+
@ox = @ox + 1
|
111
|
+
|
112
|
+
@attributes = attributes.merge!(x: coordinate.x_position,
|
113
|
+
y: y,
|
114
|
+
ox: ox,
|
115
|
+
oy: oy)
|
116
|
+
|
117
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
118
|
+
end
|
119
|
+
|
120
|
+
# Moves the cursor up by one row.
|
121
|
+
#
|
122
|
+
# @return [Vedeu::Cursors::Cursor]
|
123
|
+
def move_up
|
124
|
+
@oy = @oy - 1
|
125
|
+
|
126
|
+
@attributes = attributes.merge!(x: x,
|
127
|
+
y: coordinate.y_position,
|
128
|
+
ox: ox,
|
129
|
+
oy: oy)
|
130
|
+
|
131
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
132
|
+
end
|
133
|
+
|
134
|
+
# Renders the cursor.
|
135
|
+
#
|
136
|
+
# @return [Array<Vedeu::Escape>]
|
137
|
+
def render
|
138
|
+
Vedeu::Output.render(visibility)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Arbitrarily move the cursor to a given position.
|
142
|
+
#
|
143
|
+
# @param new_y [Fixnum] The row/line position.
|
144
|
+
# @param new_x [Fixnum] The column/character position.
|
145
|
+
# @return [Vedeu::Cursors::Cursor]
|
146
|
+
def reposition(new_y, new_x)
|
147
|
+
@attributes = attributes.merge!(x: coordinate.x_position,
|
148
|
+
y: coordinate.y_position,
|
149
|
+
ox: new_x,
|
150
|
+
oy: new_y)
|
151
|
+
|
152
|
+
Vedeu::Cursors::Cursor.new(@attributes).store
|
153
|
+
end
|
154
|
+
|
155
|
+
# Returns an escape sequence to position the cursor and set its
|
156
|
+
# visibility. When passed a block, will position the cursor, yield and
|
157
|
+
# return the original position.
|
158
|
+
#
|
159
|
+
# @return [String]
|
160
|
+
def to_s
|
161
|
+
if block_given?
|
162
|
+
"#{position}#{yield}#{visibility}"
|
163
|
+
|
164
|
+
else
|
165
|
+
"#{visibility}"
|
166
|
+
|
167
|
+
end
|
168
|
+
end
|
169
|
+
alias_method :to_str, :to_s
|
170
|
+
|
171
|
+
# Hide a named cursor, or without a name, the cursor of the currently
|
172
|
+
# focussed interface.
|
173
|
+
#
|
174
|
+
# @example
|
175
|
+
# Vedeu.hide_cursor(name)
|
176
|
+
#
|
177
|
+
# @return [Vedeu::Escape]
|
178
|
+
def hide
|
179
|
+
super
|
180
|
+
|
181
|
+
render
|
182
|
+
end
|
183
|
+
|
184
|
+
# @return [Fixnum]
|
185
|
+
def ox
|
186
|
+
@ox = 0 if @ox < 0
|
187
|
+
@ox
|
188
|
+
end
|
189
|
+
|
190
|
+
# @return [Fixnum]
|
191
|
+
def oy
|
192
|
+
@oy = 0 if @oy < 0
|
193
|
+
@oy
|
194
|
+
end
|
195
|
+
|
196
|
+
# Return the position of this cursor.
|
197
|
+
#
|
198
|
+
# @return [Vedeu::Geometry::Position]
|
199
|
+
def position
|
200
|
+
@position = Vedeu::Geometry::Position[y, x]
|
201
|
+
end
|
202
|
+
|
203
|
+
# Show a named cursor, or without a name, the cursor of the currently
|
204
|
+
# focussed interface.
|
205
|
+
#
|
206
|
+
# @example
|
207
|
+
# Vedeu.show_cursor(name)
|
208
|
+
#
|
209
|
+
# @return [Vedeu::Escape]
|
210
|
+
def show
|
211
|
+
super
|
212
|
+
|
213
|
+
render
|
214
|
+
end
|
215
|
+
|
216
|
+
# @return [Fixnum] The column/character coordinate.
|
217
|
+
def x
|
218
|
+
@x = bx if @x < bx
|
219
|
+
@x = bxn if @x > bxn
|
220
|
+
|
221
|
+
@attributes[:x] = @x
|
222
|
+
|
223
|
+
@x
|
224
|
+
end
|
225
|
+
|
226
|
+
# @return [Fixnum] The row/line coordinate.
|
227
|
+
def y
|
228
|
+
@y = by if @y < by
|
229
|
+
@y = byn if @y > byn
|
230
|
+
|
231
|
+
@attributes[:y] = @y
|
232
|
+
|
233
|
+
@y
|
234
|
+
end
|
235
|
+
|
236
|
+
private
|
237
|
+
|
238
|
+
# @see Vedeu::Borders::Repository#by_name
|
239
|
+
def border
|
240
|
+
@border ||= Vedeu.borders.by_name(name)
|
241
|
+
end
|
242
|
+
|
243
|
+
# @return [Vedeu::Geometry::Coordinate]
|
244
|
+
def coordinate
|
245
|
+
@coordinate ||= Vedeu::Geometry::Coordinate.new(name, oy, ox)
|
246
|
+
end
|
247
|
+
|
248
|
+
# The default values for a new instance of this class.
|
249
|
+
#
|
250
|
+
# @return [Hash]
|
251
|
+
def defaults
|
252
|
+
{
|
253
|
+
name: '',
|
254
|
+
ox: 0,
|
255
|
+
oy: 0,
|
256
|
+
repository: Vedeu.cursors,
|
257
|
+
visible: false,
|
258
|
+
x: 1,
|
259
|
+
y: 1,
|
260
|
+
}
|
261
|
+
end
|
262
|
+
|
263
|
+
# Returns the escape sequence for setting the visibility of the cursor.
|
264
|
+
#
|
265
|
+
# @return [String]
|
266
|
+
def visibility
|
267
|
+
value = visible? ? Vedeu::Esc.show_cursor : Vedeu::Esc.hide_cursor
|
268
|
+
|
269
|
+
Vedeu::Escape.new(position: position, value: value)
|
270
|
+
end
|
271
|
+
|
272
|
+
end # Cursor
|
273
|
+
|
274
|
+
end # Cursors
|
275
|
+
|
276
|
+
end # Vedeu
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Cursors
|
4
|
+
|
5
|
+
# Handle the refreshing (redrawing) of a cursor, without redrawing the whole
|
6
|
+
# interface; unless the cursor's offset has caused the view to change.
|
7
|
+
#
|
8
|
+
class Refresh
|
9
|
+
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
def_delegators :border,
|
13
|
+
:height,
|
14
|
+
:width
|
15
|
+
|
16
|
+
# @param (see #initialize)
|
17
|
+
def self.by_name(name = Vedeu.focus)
|
18
|
+
new(name).by_name
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns a new instance of Vedeu::Cursors::Refresh.
|
22
|
+
#
|
23
|
+
# @param name [String] The name of the cursor.
|
24
|
+
# @return [Vedeu::Cursors::Refresh]
|
25
|
+
def initialize(name)
|
26
|
+
@name = name
|
27
|
+
end
|
28
|
+
|
29
|
+
# Renders the cursor in the terminal. If the cursor's x or y offsets are
|
30
|
+
# greater or equal to the interface's width or height respectively, then
|
31
|
+
# the view is also refreshed, causing the content to be offset also.
|
32
|
+
#
|
33
|
+
# @return [Array]
|
34
|
+
def by_name
|
35
|
+
Vedeu.log(type: :info, message: "Refreshing cursor: '#{name}'")
|
36
|
+
|
37
|
+
Vedeu.trigger(:_refresh_, name) if refresh_view?
|
38
|
+
|
39
|
+
Vedeu::Terminal.output(cursor.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
# @!attribute [r] name
|
45
|
+
# @return [String]
|
46
|
+
attr_reader :name
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# Returns true when the view should be refreshed. This is determined by
|
51
|
+
# checking that the offsets for x and y are outside the width and height
|
52
|
+
# of the named interface.
|
53
|
+
#
|
54
|
+
# @return [Boolean]
|
55
|
+
def refresh_view?
|
56
|
+
cursor.ox >= width || cursor.oy >= height
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [Vedeu::Cursors::Cursor]
|
60
|
+
# @see Vedeu::Cursors::Repository#by_name
|
61
|
+
def cursor
|
62
|
+
@cursor ||= Vedeu.cursors.by_name(name)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Fetch the border by name.
|
66
|
+
#
|
67
|
+
# @note
|
68
|
+
# Vedeu::Borders::Border is used in this way because when there is not a
|
69
|
+
# border defined, it will fallback to a Vedeu::Borders::Null which uses
|
70
|
+
# Vedeu::Geometry::Geometry to determine it's dimensions based on the
|
71
|
+
# name also. When a Vedeu::Geometry::Geometry cannot be found, this
|
72
|
+
# falls back to a Vedeu::Geometry::Null which uses the dimensions of the
|
73
|
+
# current terminal.
|
74
|
+
#
|
75
|
+
# @return (see Vedeu::Borders::Repository#by_name)
|
76
|
+
def border
|
77
|
+
@border ||= Vedeu.borders.by_name(name)
|
78
|
+
end
|
79
|
+
|
80
|
+
end # Refresh
|
81
|
+
|
82
|
+
end # Cursors
|
83
|
+
|
84
|
+
end # Vedeu
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Cursors
|
4
|
+
|
5
|
+
# Allows the storing of each interface's cursor.
|
6
|
+
#
|
7
|
+
class Repository < Vedeu::Repository
|
8
|
+
|
9
|
+
singleton_class.send(:alias_method, :cursors, :repository)
|
10
|
+
|
11
|
+
class << self
|
12
|
+
|
13
|
+
# @return [Vedeu::Cursors::Cursor]
|
14
|
+
# @see Vedeu::API.cursor
|
15
|
+
def cursor
|
16
|
+
cursors.by_name(Vedeu.focus) if Vedeu.focus
|
17
|
+
end
|
18
|
+
|
19
|
+
end # Eigenclass
|
20
|
+
|
21
|
+
null Vedeu::Cursors::Cursor
|
22
|
+
real Vedeu::Cursors::Cursor
|
23
|
+
|
24
|
+
end # Repository
|
25
|
+
|
26
|
+
class Cursor
|
27
|
+
|
28
|
+
repo Vedeu::Cursors::Repository.repository
|
29
|
+
|
30
|
+
end # Cursor
|
31
|
+
|
32
|
+
end # Cursors
|
33
|
+
|
34
|
+
end # Vedeu
|