vedeu 0.4.17 → 0.4.18
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/docs/dsl.md +54 -0
- data/docs/views.md +25 -25
- data/examples/cursor_app.rb +1 -1
- data/examples/material_colours_app.rb +1 -1
- data/lib/vedeu/all.rb +1 -0
- data/lib/vedeu/bindings.rb +2 -15
- data/lib/vedeu/buffers/buffer.rb +30 -7
- data/lib/vedeu/buffers/display_buffer.rb +1 -1
- data/lib/vedeu/configuration/configuration.rb +1 -1
- data/lib/vedeu/cursor/refresh_cursor.rb +4 -0
- data/lib/vedeu/dsl/components/border.rb +6 -1
- data/lib/vedeu/geometry/all.rb +0 -1
- data/lib/vedeu/geometry/area.rb +0 -20
- data/lib/vedeu/geometry/coordinate.rb +0 -50
- data/lib/vedeu/geometry/geometry.rb +1 -5
- data/lib/vedeu/geometry/position.rb +9 -0
- data/lib/vedeu/geometry/position_index.rb +19 -14
- data/lib/vedeu/geometry/position_validator.rb +3 -0
- data/lib/vedeu/models/all.rb +0 -3
- data/lib/vedeu/models/interface.rb +2 -4
- data/lib/vedeu/null/all.rb +5 -0
- data/lib/vedeu/null/border.rb +79 -0
- data/lib/vedeu/null/buffer.rb +44 -0
- data/lib/vedeu/null/generic.rb +52 -0
- data/lib/vedeu/null/geometry.rb +70 -0
- data/lib/vedeu/null/interface.rb +23 -0
- data/lib/vedeu/output/all.rb +0 -1
- data/lib/vedeu/output/border.rb +9 -9
- data/lib/vedeu/output/clear.rb +2 -1
- data/lib/vedeu/output/output.rb +1 -1
- data/lib/vedeu/output/refresh.rb +1 -1
- data/lib/vedeu/output/renderers/all.rb +7 -7
- data/lib/vedeu/output/renderers/escape_sequence.rb +47 -0
- data/lib/vedeu/output/renderers/{file_renderer.rb → file.rb} +11 -6
- data/lib/vedeu/output/renderers/{html_renderer.rb → html.rb} +4 -4
- data/lib/vedeu/output/renderers/{json_renderer.rb → json.rb} +4 -4
- data/lib/vedeu/output/renderers/{null_renderer.rb → null.rb} +2 -2
- data/lib/vedeu/output/renderers/{terminal_renderer.rb → terminal.rb} +4 -4
- data/lib/vedeu/output/renderers/{text_renderer.rb → text.rb} +4 -4
- data/lib/vedeu/output/text.rb +2 -2
- data/lib/vedeu/output/virtual_terminal.rb +2 -2
- data/lib/vedeu/repositories/all.rb +2 -0
- data/lib/vedeu/repositories/repositories/borders.rb +4 -2
- data/lib/vedeu/repositories/repositories/buffers.rb +11 -9
- data/lib/vedeu/repositories/repositories/cursors.rb +2 -0
- data/lib/vedeu/repositories/repositories/events_repository.rb +2 -0
- data/lib/vedeu/repositories/repositories/geometries.rb +4 -2
- data/lib/vedeu/repositories/repositories/groups.rb +2 -0
- data/lib/vedeu/repositories/repositories/interfaces_repository.rb +4 -2
- data/lib/vedeu/repositories/repositories/keymaps.rb +2 -0
- data/lib/vedeu/repositories/repositories/menus.rb +2 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +1 -1
- data/test/lib/vedeu/cursor/move_test.rb +21 -33
- data/test/lib/vedeu/cursor/refresh_cursor_test.rb +16 -1
- data/test/lib/vedeu/distributed/test_application_test.rb +1 -1
- data/test/lib/vedeu/dsl/components/border_test.rb +1 -1
- data/test/lib/vedeu/dsl/components/geometry_test.rb +5 -5
- data/test/lib/vedeu/dsl/components/menu_test.rb +1 -1
- data/test/lib/vedeu/dsl/composition_test.rb +1 -1
- data/test/lib/vedeu/dsl/group_test.rb +1 -1
- data/test/lib/vedeu/dsl/interface_test.rb +1 -1
- data/test/lib/vedeu/dsl/stream_test.rb +1 -1
- data/test/lib/vedeu/events/event_test.rb +8 -8
- data/test/lib/vedeu/events/trigger_test.rb +1 -1
- data/test/lib/vedeu/geometry/area_test.rb +4 -36
- data/test/lib/vedeu/geometry/canvas_test.rb +2 -2
- data/test/lib/vedeu/geometry/coordinate_test.rb +0 -56
- data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
- data/test/lib/vedeu/geometry/geometry_test.rb +1 -1
- data/test/lib/vedeu/geometry/grid_test.rb +1 -1
- data/test/lib/vedeu/geometry/position_index_test.rb +21 -23
- data/test/lib/vedeu/geometry/position_validator_test.rb +121 -3
- data/test/lib/vedeu/input/input_test.rb +1 -1
- data/test/lib/vedeu/input/key_test.rb +1 -1
- data/test/lib/vedeu/input/keymap_test.rb +1 -1
- data/test/lib/vedeu/models/interface_test.rb +14 -0
- data/test/lib/vedeu/null/border_test.rb +76 -0
- data/test/lib/vedeu/null/generic_test.rb +69 -0
- data/test/lib/vedeu/null/geometry_test.rb +63 -0
- data/test/lib/vedeu/null/interface_test.rb +13 -0
- data/test/lib/vedeu/output/clear_test.rb +1 -1
- data/test/lib/vedeu/output/compressor_test.rb +1 -1
- data/test/lib/vedeu/output/html_char_test.rb +1 -1
- data/test/lib/vedeu/output/output_test.rb +1 -1
- data/test/lib/vedeu/output/refresh_test.rb +17 -5
- data/test/lib/vedeu/output/renderers/escape_sequence_renderer_test.rb +4 -4
- data/test/lib/vedeu/output/renderers/{file_renderer_test.rb → file_test.rb} +4 -4
- data/test/lib/vedeu/output/renderers/{html_renderer_test.rb → html_test.rb} +4 -4
- data/test/lib/vedeu/output/renderers/{json_renderer_test.rb → json_test.rb} +4 -4
- data/test/lib/vedeu/output/renderers/{null_renderer_test.rb → null_test.rb} +3 -3
- data/test/lib/vedeu/output/renderers/{terminal_renderer_test.rb → terminal_test.rb} +4 -4
- data/test/lib/vedeu/output/renderers/{text_renderer_test.rb → text_test.rb} +4 -4
- data/test/lib/vedeu/output/style_test.rb +1 -1
- data/test/lib/vedeu/output/translator_test.rb +1 -1
- data/test/lib/vedeu/output/viewport_test.rb +1 -1
- data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
- data/test/lib/vedeu/repositories/collection_test.rb +2 -2
- data/test/lib/vedeu/repositories/collections/chars_test.rb +1 -1
- data/test/lib/vedeu/repositories/collections/events_test.rb +1 -1
- data/test/lib/vedeu/repositories/collections/interfaces_test.rb +1 -1
- data/test/lib/vedeu/repositories/collections/keys_test.rb +1 -1
- data/test/lib/vedeu/repositories/collections/lines_test.rb +1 -1
- data/test/lib/vedeu/repositories/collections/streams_test.rb +1 -1
- data/test/lib/vedeu/repositories/repositories/borders_test.rb +1 -1
- data/test/lib/vedeu/repositories/repositories/buffers_test.rb +11 -23
- data/test/lib/vedeu/repositories/repositories/colours_test.rb +1 -1
- data/test/lib/vedeu/repositories/repositories/geometries_test.rb +1 -1
- data/test/lib/vedeu/repositories/repository_test.rb +1 -1
- data/test/lib/vedeu/storage/associative_store_test.rb +1 -1
- data/test/lib/vedeu/storage/conveyor_store_test.rb +1 -1
- data/test/lib/vedeu/storage/fifo_store_test.rb +1 -1
- data/test/lib/vedeu/support/template_test.rb +1 -1
- data/test/lib/vedeu/support/trace_test.rb +1 -1
- data/test/lib/vedeu/support/visibility_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- data/vedeu.gemspec +1 -1
- metadata +36 -33
- data/lib/vedeu/geometry/null_geometry.rb +0 -70
- data/lib/vedeu/models/null.rb +0 -48
- data/lib/vedeu/models/null_interface.rb +0 -20
- data/lib/vedeu/output/null_border.rb +0 -75
- data/lib/vedeu/output/renderers/escape_sequence_renderer.rb +0 -43
- data/test/lib/vedeu/geometry/null_geometry_test.rb +0 -59
- data/test/lib/vedeu/models/null_interface_test.rb +0 -9
- data/test/lib/vedeu/models/null_test.rb +0 -66
- data/test/lib/vedeu/output/null_border_test.rb +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9465a952ab6e8149c69de234c8e51c5e6f09a2a2
|
4
|
+
data.tar.gz: 6eb60784e45eea477870787e5a5ced902dc5f1c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48866fecffced7581f359ed1fb6107aedfa746d1035dd0c26443920b158f090ab45199c0d4cdcb84c4cea5d9aefdcc3210895e9cb86bc6d53e033b71692f646d
|
7
|
+
data.tar.gz: 1774d54f66bf61ff8639891c5ec3572740f9ae8f8be1d7019b9a603315720f17ccf61f92b534fc2c78c4f1a8e80577221bf98e944745966d3753feefb59f0d39
|
data/docs/dsl.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
Coupled with the API (for interacting with the running client application), the
|
2
|
+
DSL provides the mechanism to configure aspects of your application whilst
|
3
|
+
using Vedeu.
|
4
|
+
|
5
|
+
|
6
|
+
### Borders
|
7
|
+
|
8
|
+
Borders are defined by name for each of the client application's interfaces or
|
9
|
+
views. They can be enabled or disabled (which controls whether they are
|
10
|
+
rendered or not), they have their own colours and styles, and each aspect of
|
11
|
+
the border can be controlled. The RubyDoc contains information for
|
12
|
+
configuring borders.
|
13
|
+
|
14
|
+
### Geometry
|
15
|
+
|
16
|
+
Geometry is defined by name and allows the configuration of the position and
|
17
|
+
size of an interface.
|
18
|
+
|
19
|
+
### Groups
|
20
|
+
|
21
|
+
Interfaces can be configured to be part of a named group. Once an interface is a
|
22
|
+
member of group, the group can be affected by other controls. For example,
|
23
|
+
assuming the client application is a simple Git client, it may have a group
|
24
|
+
called 'commit'. The 'commit' group will contain the interfaces 'diff' (to show
|
25
|
+
the changes), 'staged' (to show which files are staged) and 'unstaged'. A
|
26
|
+
refresh of the 'commit' group would cause all interfaces belonging to the group
|
27
|
+
to refresh. Similarly, showing or hiding the group would of course, show or
|
28
|
+
hide the interfaces of that group.
|
29
|
+
|
30
|
+
### Interfaces
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
### Keymaps
|
35
|
+
|
36
|
+
There are two built in keymaps with Vedeu, 'system' (keys needed by Vedeu to
|
37
|
+
operate, e.g. 'q' for quit, to quit the client application), and 'global' which
|
38
|
+
holds keys which perform actions no matter which interface is currently
|
39
|
+
focussed.
|
40
|
+
|
41
|
+
You can define keymaps by name which matches a defined interface. When that
|
42
|
+
interface is in focus, keys pressed as part of this definition will affect
|
43
|
+
that interface. This allows you to form context driven behaviour for your
|
44
|
+
application.
|
45
|
+
|
46
|
+
|
47
|
+
### Menus
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
### Views
|
52
|
+
|
53
|
+
|
54
|
+
|
data/docs/views.md
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
## Views with Vedeu
|
2
2
|
|
3
3
|
There are two ways to construct views with Vedeu. You would like to draw the
|
4
|
-
view to the screen immediately (immediate render) or you want to save a view to
|
5
|
-
be drawn when you trigger a refresh event later (deferred view).
|
4
|
+
view to the screen immediately (immediate render) or you want to save a view to
|
5
|
+
be drawn when you trigger a refresh event later (deferred view).
|
6
6
|
|
7
7
|
** LINK Both of these approaches require that you have defined an interface (or
|
8
|
-
'visible area') first. You can find out how to define an interface with Vedeu
|
9
|
-
here. The examples in 'Immediate Render' and 'Deferred View' use these
|
10
|
-
definitions: (Note: if you use these examples, ensure your terminal
|
11
|
-
70 characters in width and 5 lines in height.)
|
8
|
+
'visible area') first. You can find out how to define an interface with Vedeu
|
9
|
+
here. The examples in 'Immediate Render' and 'Deferred View' use these
|
10
|
+
interface definitions: (Note: if you use these examples, ensure your terminal
|
11
|
+
is at least 70 characters in width and 5 lines in height.)
|
12
12
|
|
13
13
|
```ruby
|
14
14
|
Vedeu.interface 'main' do
|
@@ -30,31 +30,31 @@ definitions: (Note: if you use these examples, ensure your terminal is at least
|
|
30
30
|
```
|
31
31
|
|
32
32
|
Both of these approaches use a concept of Buffers in Vedeu. There are three
|
33
|
-
buffers for any defined interface. These are imaginatively called: 'back',
|
34
|
-
'front' and 'previous'.
|
33
|
+
buffers for any defined interface. These are imaginatively called: 'back',
|
34
|
+
'front' and 'previous'.
|
35
35
|
|
36
36
|
The 'back' buffer is the content for an interface which will be shown next time
|
37
|
-
a refresh event is fired globally or for that interface. So, 'back' becomes
|
38
|
-
'front'.
|
37
|
+
a refresh event is fired globally or for that interface. So, 'back' becomes
|
38
|
+
'front'.
|
39
39
|
|
40
40
|
The 'front' buffer is the content for an interface which is currently showing.
|
41
41
|
When a refresh event is fired, again, globally or for that interface
|
42
|
-
specifically, the content of this 'front' buffer is first copied to the
|
43
|
-
'previous' buffer, and then the current 'back' buffer overwrites this 'front'
|
44
|
-
buffer.
|
42
|
+
specifically, the content of this 'front' buffer is first copied to the
|
43
|
+
'previous' buffer, and then the current 'back' buffer overwrites this 'front'
|
44
|
+
buffer.
|
45
45
|
|
46
46
|
The 'previous' buffer contains what was shown on the 'front' before the current
|
47
|
-
'front'.
|
47
|
+
'front'.
|
48
48
|
|
49
49
|
You can only write to either the 'front' (you want the content to be drawn
|
50
|
-
immediately) or the 'back' (you would like the content to be
|
51
|
-
refresh).
|
50
|
+
immediately (immediate render)) or the 'back' (you would like the content to be
|
51
|
+
drawn on the next refresh (deferred view)).
|
52
52
|
|
53
53
|
### Immediate Render
|
54
54
|
|
55
55
|
The immediate render DSL for Vedeu is accessed via `Vedeu.renders`. When this
|
56
|
-
approach is used, the content defined is written directly to the 'front'
|
57
|
-
buffer(s) for the interface(s) concerned. Take a glance at the example below:
|
56
|
+
approach is used, the content defined is written directly to the 'front'
|
57
|
+
buffer(s) for the interface(s) concerned. Take a glance at the example below:
|
58
58
|
|
59
59
|
```ruby
|
60
60
|
Vedeu.renders do
|
@@ -81,13 +81,13 @@ buffer(s) for the interface(s) concerned. Take a glance at the example below:
|
|
81
81
|
### Deferred View
|
82
82
|
|
83
83
|
The deferred view DSL for Vedeu is accessed via `Vedeu.views`. This approach
|
84
|
-
writes the content defined to the 'back' buffer(s) for the interface(s)
|
85
|
-
concerned. It will become the front when your application triggers the refresh
|
86
|
-
event for the interface(s).
|
84
|
+
writes the content defined to the 'back' buffer(s) for the interface(s)
|
85
|
+
concerned. It will become the front when your application triggers the refresh
|
86
|
+
event for the interface(s).
|
87
87
|
|
88
88
|
As you can see by comparing the examples above to these below, the immediate
|
89
|
-
render simply wraps what is already here in the deferred view. Again, more
|
90
|
-
specific information is available in the Rubydoc.
|
89
|
+
render simply wraps what is already here in the deferred view. Again, more
|
90
|
+
specific information is available in the Rubydoc.
|
91
91
|
|
92
92
|
```ruby
|
93
93
|
Vedeu.views do
|
@@ -151,8 +151,8 @@ renders/views
|
|
151
151
|
#### Authors Notes
|
152
152
|
|
153
153
|
The Rubydoc documentation has more specific information about the DSL methods
|
154
|
-
demonstrated above: [RubyDoc](http://rubydoc.info/gems/vedeu).
|
154
|
+
demonstrated above: [RubyDoc](http://rubydoc.info/gems/vedeu).
|
155
155
|
|
156
156
|
I've tried to write the DSL in a way which makes it read nice; believing that
|
157
|
-
this will make it easier to use. I hope this is the case for you.
|
157
|
+
this will make it easier to use. I hope this is the case for you.
|
158
158
|
|
data/examples/cursor_app.rb
CHANGED
data/lib/vedeu/all.rb
CHANGED
data/lib/vedeu/bindings.rb
CHANGED
@@ -229,14 +229,7 @@ module Vedeu
|
|
229
229
|
# Triggering the ':_hide_group_' event to which this named interface belongs
|
230
230
|
# will also hide the interface.
|
231
231
|
Vedeu.bind(:_hide_interface_) do |name|
|
232
|
-
|
233
|
-
interface = Vedeu.interfaces.find(name)
|
234
|
-
|
235
|
-
if interface.visible?
|
236
|
-
interface = Vedeu::Visibility.hide(interface)
|
237
|
-
Vedeu.buffers.clear(interface.name)
|
238
|
-
end
|
239
|
-
end
|
232
|
+
Vedeu.buffers.by_name(name).hide
|
240
233
|
end
|
241
234
|
|
242
235
|
# Will show the named interface. If the interface is currently invisible, it
|
@@ -245,13 +238,7 @@ module Vedeu
|
|
245
238
|
# Triggering the ':_show_group_' event to which this named interface belongs
|
246
239
|
# will also show the interface.
|
247
240
|
Vedeu.bind(:_show_interface_) do |name|
|
248
|
-
|
249
|
-
interface = Vedeu.interfaces.find(name)
|
250
|
-
|
251
|
-
interface = Vedeu::Visibility.show(interface) unless interface.visible?
|
252
|
-
|
253
|
-
Vedeu.buffers.render(interface.name)
|
254
|
-
end
|
241
|
+
Vedeu.buffers.by_name(name).show
|
255
242
|
end
|
256
243
|
|
257
244
|
# Will toggle the visibility of the named interface. If the interface is
|
data/lib/vedeu/buffers/buffer.rb
CHANGED
@@ -65,6 +65,23 @@ module Vedeu
|
|
65
65
|
true
|
66
66
|
end
|
67
67
|
|
68
|
+
# Returns the front buffer or, if that is empty, the interface cleared.
|
69
|
+
#
|
70
|
+
# @return [void]
|
71
|
+
def clear
|
72
|
+
Vedeu::Output.render(clear_buffer) unless clear_buffer.empty?
|
73
|
+
|
74
|
+
clear_buffer
|
75
|
+
end
|
76
|
+
|
77
|
+
# @return [void]
|
78
|
+
def hide
|
79
|
+
if visible?
|
80
|
+
Vedeu::Visibility.hide(interface)
|
81
|
+
clear
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
68
85
|
# Return the content for this buffer.
|
69
86
|
#
|
70
87
|
# - If we have new content (i.e. content on 'back') to be shown, we first
|
@@ -84,13 +101,12 @@ module Vedeu
|
|
84
101
|
end
|
85
102
|
alias_method :content, :render
|
86
103
|
|
87
|
-
# Returns the front buffer or, if that is empty, the interface cleared.
|
88
|
-
#
|
89
104
|
# @return [void]
|
90
|
-
def
|
91
|
-
|
92
|
-
|
93
|
-
|
105
|
+
def show
|
106
|
+
unless visible?
|
107
|
+
Vedeu::Visibility.show(interface)
|
108
|
+
render
|
109
|
+
end
|
94
110
|
end
|
95
111
|
|
96
112
|
private
|
@@ -131,6 +147,8 @@ module Vedeu
|
|
131
147
|
#
|
132
148
|
# @return [Boolean]
|
133
149
|
def swap
|
150
|
+
Vedeu.log(type: :output, message: "Buffer swapping: '#{name}'")
|
151
|
+
|
134
152
|
@previous = front
|
135
153
|
@front = back
|
136
154
|
@back = nil
|
@@ -153,7 +171,7 @@ module Vedeu
|
|
153
171
|
|
154
172
|
# @return [Vedeu::Interface]
|
155
173
|
def interface
|
156
|
-
@interface ||= Vedeu.interfaces.
|
174
|
+
@interface ||= Vedeu.interfaces.by_name(name)
|
157
175
|
end
|
158
176
|
|
159
177
|
# @return [Vedeu::Interface]
|
@@ -167,6 +185,11 @@ module Vedeu
|
|
167
185
|
end
|
168
186
|
end
|
169
187
|
|
188
|
+
# @see Vedeu::Interface#visible
|
189
|
+
def visible?
|
190
|
+
interface.visible?
|
191
|
+
end
|
192
|
+
|
170
193
|
end # Buffer
|
171
194
|
|
172
195
|
end # Vedeu
|
@@ -24,6 +24,10 @@ module Vedeu
|
|
24
24
|
@name = name
|
25
25
|
end
|
26
26
|
|
27
|
+
# Renders the cursor in the terminal. If the cursor's x or y offsets are
|
28
|
+
# greater or equal to the interface's width or height respectively, then
|
29
|
+
# the view is also refreshed, causing the content to be offset also.
|
30
|
+
#
|
27
31
|
# @return [Array]
|
28
32
|
def render
|
29
33
|
Vedeu.log(type: :info, message: "Refreshing cursor: '#{name}'")
|
@@ -12,7 +12,12 @@ module Vedeu
|
|
12
12
|
# drawn or not.
|
13
13
|
#
|
14
14
|
# @example
|
15
|
-
# # Borders can be defined
|
15
|
+
# # Borders can be defined when defining your interface...
|
16
|
+
# Vedeu.interface 'my_interface' do
|
17
|
+
# border do
|
18
|
+
# # ...
|
19
|
+
#
|
20
|
+
# # ...or as part of a view definition...
|
16
21
|
# Vedeu.renders do
|
17
22
|
# view 'border_demo' do
|
18
23
|
# border do
|
data/lib/vedeu/geometry/all.rb
CHANGED
data/lib/vedeu/geometry/area.rb
CHANGED
@@ -148,26 +148,6 @@ module Vedeu
|
|
148
148
|
x - offset
|
149
149
|
end
|
150
150
|
|
151
|
-
# @return [Vedeu::Position]
|
152
|
-
def top_left
|
153
|
-
Vedeu::Position[y, x]
|
154
|
-
end
|
155
|
-
|
156
|
-
# @return [Vedeu::Position]
|
157
|
-
def bottom_left
|
158
|
-
Vedeu::Position[yn, x]
|
159
|
-
end
|
160
|
-
|
161
|
-
# @return [Vedeu::Position]
|
162
|
-
def top_right
|
163
|
-
Vedeu::Position[y, xn]
|
164
|
-
end
|
165
|
-
|
166
|
-
# @return [Vedeu::Position]
|
167
|
-
def bottom_right
|
168
|
-
Vedeu::Position[yn, xn]
|
169
|
-
end
|
170
|
-
|
171
151
|
end # Area
|
172
152
|
|
173
153
|
end # Vedeu
|
@@ -70,56 +70,6 @@ module Vedeu
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
# Returns the index for a given y position.
|
74
|
-
#
|
75
|
-
# @example
|
76
|
-
# # y_range = [7, 8, 9, 10]
|
77
|
-
# # y = 8
|
78
|
-
# y_index # => 1 # because (y_range[1] = 8)
|
79
|
-
# y_index(10) # => 3
|
80
|
-
# y_index(5) # => 0
|
81
|
-
# y_index(15) # => 3
|
82
|
-
#
|
83
|
-
# @param position [Fixnum]
|
84
|
-
# @return [Fixnum]
|
85
|
-
def y_index(position = y)
|
86
|
-
if height <= 0 || position <= y
|
87
|
-
0
|
88
|
-
|
89
|
-
elsif position >= yn
|
90
|
-
yn_index
|
91
|
-
|
92
|
-
else
|
93
|
-
y_range.index(position)
|
94
|
-
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# Returns the index for a given x position.
|
99
|
-
#
|
100
|
-
# @example
|
101
|
-
# # x_range = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
|
102
|
-
# # x = 8
|
103
|
-
# x_index # => 4 # because (x_range[4] = 8)
|
104
|
-
# x_index(11) # => 7
|
105
|
-
# x_index(2) # => 0
|
106
|
-
# x_index(15) # => 9
|
107
|
-
#
|
108
|
-
# @param position [Fixnum]
|
109
|
-
# @return [Fixnum]
|
110
|
-
def x_index(position = x)
|
111
|
-
if width <= 0 || position <= x
|
112
|
-
0
|
113
|
-
|
114
|
-
elsif position >= xn
|
115
|
-
xn_index
|
116
|
-
|
117
|
-
else
|
118
|
-
x_range.index(position)
|
119
|
-
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
73
|
# Returns the y coordinate for a given index.
|
124
74
|
#
|
125
75
|
# @example
|
@@ -15,6 +15,8 @@ module Vedeu
|
|
15
15
|
alias_method :first, :y
|
16
16
|
alias_method :last, :x
|
17
17
|
|
18
|
+
# Convenience constructor for Vedeu::Position.
|
19
|
+
#
|
18
20
|
# @param (see #initialize)
|
19
21
|
def self.[](y, x)
|
20
22
|
new(y, x)
|
@@ -52,6 +54,13 @@ module Vedeu
|
|
52
54
|
end
|
53
55
|
alias_method :==, :eql?
|
54
56
|
|
57
|
+
# Return a tuple containing the y and x coordinates.
|
58
|
+
#
|
59
|
+
# @return [Array<Fixnum>]
|
60
|
+
def to_a
|
61
|
+
[y, x]
|
62
|
+
end
|
63
|
+
|
55
64
|
# Return the escape sequence required to position the cursor at a particular
|
56
65
|
# point on the screen. When passed a block, will do the aforementioned,
|
57
66
|
# call the block and then reposition to this location.
|
@@ -4,17 +4,8 @@ module Vedeu
|
|
4
4
|
#
|
5
5
|
class PositionIndex
|
6
6
|
|
7
|
-
#
|
8
|
-
#
|
9
|
-
attr_reader :y
|
10
|
-
|
11
|
-
# @!attribute [r] x
|
12
|
-
# @return [Fixnum]
|
13
|
-
attr_reader :x
|
14
|
-
|
15
|
-
alias_method :first, :y
|
16
|
-
alias_method :last, :x
|
17
|
-
|
7
|
+
# Convenience constructor for Vedeu::Position.
|
8
|
+
#
|
18
9
|
# @param (see #initialize)
|
19
10
|
def self.[](y, x)
|
20
11
|
new(y, x).[]
|
@@ -26,11 +17,13 @@ module Vedeu
|
|
26
17
|
# @param x [Fixnum]
|
27
18
|
# @return [Vedeu::PositionIndex]
|
28
19
|
def initialize(y, x)
|
29
|
-
@y =
|
30
|
-
@x =
|
20
|
+
@y = y
|
21
|
+
@x = x
|
31
22
|
end
|
32
23
|
|
33
|
-
#
|
24
|
+
# Returns a tuple containing the y and x coordinates.
|
25
|
+
#
|
26
|
+
# @return [Array<Fixnum>]
|
34
27
|
def []
|
35
28
|
[y, x]
|
36
29
|
end
|
@@ -47,6 +40,18 @@ module Vedeu
|
|
47
40
|
Vedeu::Position.new(y, x)
|
48
41
|
end
|
49
42
|
|
43
|
+
# @return [Fixnum]
|
44
|
+
def x
|
45
|
+
@_x ||= ((@x - 1) <= 1) ? 0 : (@x - 1)
|
46
|
+
end
|
47
|
+
alias_method :last, :x
|
48
|
+
|
49
|
+
# @return [Fixnum]
|
50
|
+
def y
|
51
|
+
@_y ||= ((@y - 1) <= 1) ? 0 : (@y - 1)
|
52
|
+
end
|
53
|
+
alias_method :first, :y
|
54
|
+
|
50
55
|
end # PositionIndex
|
51
56
|
|
52
57
|
end # Vedeu
|
data/lib/vedeu/models/all.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'vedeu/models/all'
|
2
|
-
require 'vedeu/output/null_border'
|
3
2
|
require 'vedeu/output/presentation'
|
4
3
|
require 'vedeu/buffers/display_buffer'
|
5
|
-
require 'vedeu/buffers/buffer'
|
6
4
|
|
7
5
|
module Vedeu
|
8
6
|
|
@@ -42,7 +40,7 @@ module Vedeu
|
|
42
40
|
attr_accessor :parent
|
43
41
|
|
44
42
|
# @!attribute [rw] visible
|
45
|
-
# @return [
|
43
|
+
# @return [Boolean] Whether the interface is visible.
|
46
44
|
attr_accessor :visible
|
47
45
|
alias_method :visible?, :visible
|
48
46
|
|
@@ -111,7 +109,7 @@ module Vedeu
|
|
111
109
|
hide_cursor,
|
112
110
|
Vedeu::Clear.new(self).render,
|
113
111
|
Vedeu.borders.by_name(name).render,
|
114
|
-
Vedeu::Viewport.
|
112
|
+
Vedeu::Viewport.render(self),
|
115
113
|
show_cursor,
|
116
114
|
]
|
117
115
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Null
|
4
|
+
|
5
|
+
# Provides a non-existent Vedeu::Border that acts like the real thing, but
|
6
|
+
# does nothing.
|
7
|
+
#
|
8
|
+
class Border
|
9
|
+
|
10
|
+
# @!attribute [r] name
|
11
|
+
# @return [String|NilClass]
|
12
|
+
attr_reader :name
|
13
|
+
|
14
|
+
# Returns a new instance of Vedeu::Null::Border.
|
15
|
+
#
|
16
|
+
# @param name [String|NilClass]
|
17
|
+
# @return [Vedeu::Null::Border]
|
18
|
+
def initialize(name = nil)
|
19
|
+
@name = name
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Fixnum]
|
23
|
+
def bx
|
24
|
+
geometry.x
|
25
|
+
end
|
26
|
+
alias_method :x, :bx
|
27
|
+
|
28
|
+
# @return [Fixnum]
|
29
|
+
def bxn
|
30
|
+
geometry.xn
|
31
|
+
end
|
32
|
+
alias_method :xn, :bxn
|
33
|
+
|
34
|
+
# @return [Fixnum]
|
35
|
+
def by
|
36
|
+
geometry.y
|
37
|
+
end
|
38
|
+
alias_method :y, :by
|
39
|
+
|
40
|
+
# @return [Fixnum]
|
41
|
+
def byn
|
42
|
+
geometry.yn
|
43
|
+
end
|
44
|
+
alias_method :yn, :byn
|
45
|
+
|
46
|
+
# @return [FalseClass]
|
47
|
+
def enabled?
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Fixnum]
|
52
|
+
def height
|
53
|
+
(by..byn).size
|
54
|
+
end
|
55
|
+
|
56
|
+
# @return [Array]
|
57
|
+
def render
|
58
|
+
[]
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [Fixnum]
|
62
|
+
def width
|
63
|
+
(bx..bxn).size
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
# Returns the geometry for the interface.
|
69
|
+
#
|
70
|
+
# @return (see Vedeu::Geometries#by_name)
|
71
|
+
def geometry
|
72
|
+
@geometry ||= Vedeu.geometries.by_name(name)
|
73
|
+
end
|
74
|
+
|
75
|
+
end # Border
|
76
|
+
|
77
|
+
end # Null
|
78
|
+
|
79
|
+
end # Vedeu
|