vedeu 0.4.24 → 0.4.25

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d53834cae0f1a3dc8708b3706bf87d4014f16c90
4
- data.tar.gz: 08bc9cd02ad0672be13d272172912d6b7975fd41
3
+ metadata.gz: bb6dc29e78bc70eab80c780ef16626cddbdcdf0b
4
+ data.tar.gz: e83efc8abd484c8436ae562fd393bfb745706475
5
5
  SHA512:
6
- metadata.gz: 522ba5bc35cfb89d15c28b8784da90634a80106e3aaa463e039c9b1c01c310a4cec9e87dccc7b9fba55a6b5f81bd39573cf854241e203c7400bbe8652cc593d1
7
- data.tar.gz: 44e0de6a4e2541b1672e0c79bfdf183bd4b2ce9e408525c41c79c9772ca160a6e6387d46950201ef05eb925672e3b6329347eaa61db186d08525af144fed640e
6
+ metadata.gz: fe72d64a341a1447e93f85ffcc7213d3e598ad682ab912689be1c3a0b825c82c9dcaa4402513a9b738f0f9b43b18257d8d161ef384573248588c1690a40d2e4f
7
+ data.tar.gz: 183b719c6624c17c606fc29a3d163cd2b6ded9138a9943c032292f50a0155c8c47abc2474cfcd0da284a506c0830d48761cbcf18e679808b9daae2aaa17458db
@@ -5,23 +5,24 @@ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
5
 
6
6
  require 'vedeu'
7
7
 
8
- # An example application to demonstrate colours.
8
+ # An example application to demonstrate colours, cursor and interface movement,
9
+ # maximising/unmaximising of interfaces and toggling of cursors and interfaces.
9
10
  class VedeuMaterialColoursApp
10
11
 
11
12
  include Vedeu
12
13
 
13
14
  configure do
14
- # debug!
15
+ debug!
15
16
  log '/tmp/vedeu_material_colours_app.log'
16
- renderers Vedeu::Renderers::File
17
+ # renderers Vedeu::Renderers::File
17
18
  end
18
19
 
19
20
  interface 'main_interface' do
20
21
  border 'main_interface' do
21
- colour foreground: '#ffffff', background: '#000000'
22
+ colour foreground: '#ffffff', background: :default
22
23
  title 'Rainbow!'
23
24
  end
24
- colour foreground: '#ffffff', background: '#000000'
25
+ colour foreground: '#ffffff', background: :default
25
26
  cursor!
26
27
  geometry 'main_interface' do
27
28
  x 5
@@ -33,10 +34,10 @@ class VedeuMaterialColoursApp
33
34
 
34
35
  interface 'other_interface' do
35
36
  border 'other_interface' do
36
- colour foreground: '#ffffff', background: '#000000'
37
+ colour foreground: '#ffffff', background: :default
37
38
  title 'Wow!'
38
39
  end
39
- colour foreground: '#ffffff', background: '#000000'
40
+ colour foreground: '#ffffff', background: :default
40
41
  cursor!
41
42
  geometry 'other_interface' do
42
43
  x 27
@@ -47,10 +48,21 @@ class VedeuMaterialColoursApp
47
48
  end
48
49
 
49
50
  keymap('_global_') do
50
- key(:up, 'k') { Vedeu.trigger(:_cursor_up_) }
51
- key(:right, 'l') { Vedeu.trigger(:_cursor_right_) }
52
- key(:down, 'j') { Vedeu.trigger(:_cursor_down_) }
53
- key(:left, 'h') { Vedeu.trigger(:_cursor_left_) }
51
+ key(:up) { Vedeu.trigger(:_cursor_up_) }
52
+ key(:right) { Vedeu.trigger(:_cursor_right_) }
53
+ key(:down) { Vedeu.trigger(:_cursor_down_) }
54
+ key(:left) { Vedeu.trigger(:_cursor_left_) }
55
+
56
+ key('a') { Vedeu.trigger(:_view_left_, 'main_interface') }
57
+ key('s') { Vedeu.trigger(:_view_down_, 'main_interface') }
58
+ key('d') { Vedeu.trigger(:_view_up_, 'main_interface') }
59
+ key('f') { Vedeu.trigger(:_view_right_, 'main_interface') }
60
+
61
+ key('h') { Vedeu.trigger(:_view_left_, 'other_interface') }
62
+ key('j') { Vedeu.trigger(:_view_down_, 'other_interface') }
63
+ key('k') { Vedeu.trigger(:_view_up_, 'other_interface') }
64
+ key('l') { Vedeu.trigger(:_view_right_, 'other_interface') }
65
+
54
66
  key('t') do
55
67
  Vedeu.trigger(:_toggle_interface_, 'main_interface')
56
68
  Vedeu.trigger(:_toggle_interface_, 'other_interface')
@@ -59,6 +71,10 @@ class VedeuMaterialColoursApp
59
71
  key('2') { Vedeu.trigger(:_show_interface_, 'main_interface') }
60
72
  key('3') { Vedeu.trigger(:_hide_interface_, 'other_interface') }
61
73
  key('4') { Vedeu.trigger(:_show_interface_, 'other_interface') }
74
+ key('m') { Vedeu.trigger(:_maximise_, 'main_interface') }
75
+ key('n') { Vedeu.trigger(:_unmaximise_, 'main_interface') }
76
+ key('b') { Vedeu.trigger(:_maximise_, 'other_interface') }
77
+ key('v') { Vedeu.trigger(:_unmaximise_, 'other_interface') }
62
78
  end
63
79
 
64
80
  renders do
@@ -92,23 +92,17 @@ module Vedeu
92
92
  end
93
93
 
94
94
  # @see {Vedeu::Move}
95
- Vedeu.bind(:_cursor_down_) do |name|
96
- Vedeu::Move.by_name(Vedeu::Cursor, :down, name)
97
- end
98
-
99
- # @see {Vedeu::Move}
100
- Vedeu.bind(:_cursor_left_) do |name|
101
- Vedeu::Move.by_name(Vedeu::Cursor, :left, name)
102
- end
103
-
104
- # @see {Vedeu::Move}
105
- Vedeu.bind(:_cursor_right_) do |name|
106
- Vedeu::Move.by_name(Vedeu::Cursor, :right, name)
107
- end
108
-
109
- # @see {Vedeu::Move}
110
- Vedeu.bind(:_cursor_up_) do |name|
111
- Vedeu::Move.by_name(Vedeu::Cursor, :up, name)
95
+ %w(cursor view).each do |model|
96
+ [:down, :left, :right, :up].each do |direction|
97
+ Vedeu.bind("_#{model}_#{direction}_".to_sym) do |name|
98
+ klass = {
99
+ 'cursor' => Vedeu::Cursor,
100
+ 'view' => Vedeu::Geometry,
101
+ }.fetch(model)
102
+
103
+ Vedeu::Move.by_name(klass, direction, name)
104
+ end
105
+ end
112
106
  end
113
107
 
114
108
  # @see {Vedeu::Move}
@@ -116,26 +110,6 @@ module Vedeu
116
110
  Vedeu::Move.by_name(Vedeu::Cursor, :origin, name)
117
111
  end
118
112
 
119
- # @see {Vedeu::Move}
120
- Vedeu.bind(:_geometry_down_) do |name|
121
- Vedeu.geometries.by_name(name).move(1, 0)
122
- end
123
-
124
- # @see {Vedeu::Move}
125
- Vedeu.bind(:_geometry_left_) do |name|
126
- Vedeu.geometries.by_name(name).move(0, -1)
127
- end
128
-
129
- # @see {Vedeu::Move}
130
- Vedeu.bind(:_geometry_right_) do |name|
131
- Vedeu.geometries.by_name(name).move(0, 1)
132
- end
133
-
134
- # @see {Vedeu::Move}
135
- Vedeu.bind(:_geometry_up_) do |name|
136
- Vedeu.geometries.by_name(name).move(-1, 0)
137
- end
138
-
139
113
  # @see {Vedeu::Move}
140
114
  Vedeu.bind(:_cursor_reset_) { |name| Vedeu.trigger(:_cursor_origin_, name) }
141
115
 
@@ -191,14 +165,10 @@ module Vedeu
191
165
  # Clears the whole terminal space, or the named interface area to be cleared
192
166
  # if given.
193
167
  Vedeu.bind(:_clear_) do |name|
194
- if name
195
- Vedeu::Clear.clear(Vedeu.interfaces.by_name(name),
196
- clear_border: true, use_terminal_colours: true)
168
+ Vedeu::Terminal.clear unless name
197
169
 
198
- else
199
- Vedeu::Terminal.virtual.clear if Vedeu::Configuration.drb?
200
- Vedeu::Terminal.clear
201
- end
170
+ Vedeu::Clear.clear(Vedeu.interfaces.by_name(name),
171
+ clear_border: true, use_terminal_colours: true)
202
172
  end
203
173
 
204
174
  # Clears the spaces occupied by the interfaces belonging to the named group.
@@ -237,27 +207,21 @@ module Vedeu
237
207
  # This may be rarely used, since the action of showing a group using
238
208
  # `Vedeu.trigger(:_show_group_, group_name)` will effectively clear the
239
209
  # terminal and show the new group.
240
- Vedeu.bind(:_hide_group_) do |name|
241
- Vedeu.trigger(:_clear_group_, name)
242
- end
210
+ Vedeu.bind(:_hide_group_) { |name| Vedeu.trigger(:_clear_group_, name) }
243
211
 
244
212
  # Will hide the named interface. If the interface is currently visible, it
245
213
  # will be cleared- rendered blank. To show the interface, the
246
214
  # ':_show_interface_' event should be triggered.
247
215
  # Triggering the ':_hide_group_' event to which this named interface belongs
248
216
  # will also hide the interface.
249
- Vedeu.bind(:_hide_interface_) do |name|
250
- Vedeu.buffers.by_name(name).hide
251
- end
217
+ Vedeu.bind(:_hide_interface_) { |name| Vedeu.buffers.by_name(name).hide }
252
218
 
253
219
  # Will show the named interface. If the interface is currently invisible, it
254
220
  # will be shown- rendered with its latest content. To hide the interface,
255
221
  # the ':_hide_interface_' event should be triggered.
256
222
  # Triggering the ':_show_group_' event to which this named interface belongs
257
223
  # will also show the interface.
258
- Vedeu.bind(:_show_interface_) do |name|
259
- Vedeu.buffers.by_name(name).show
260
- end
224
+ Vedeu.bind(:_show_interface_) { |name| Vedeu.buffers.by_name(name).show }
261
225
 
262
226
  # Will toggle the visibility of the named interface. If the interface is
263
227
  # currently visible, the area it occupies will be clears and the interface
@@ -269,24 +233,18 @@ module Vedeu
269
233
  # or all of the interface's current position, the interface will overwrite
270
234
  # this area- this may cause visual corruption.
271
235
  Vedeu.bind(:_toggle_interface_) do |name|
272
- if name && Vedeu.interfaces.registered?(name)
273
- interface = Vedeu.interfaces.find(name)
236
+ if Vedeu.interfaces.by_name(name).visible?
237
+ Vedeu.trigger(:_hide_interface_, name)
274
238
 
275
- if interface.visible?
276
- Vedeu.trigger(:_hide_interface_, name)
277
-
278
- else
279
- Vedeu.trigger(:_show_interface_, name)
239
+ else
240
+ Vedeu.trigger(:_show_interface_, name)
280
241
 
281
- end
282
242
  end
283
243
  end
284
244
 
285
245
  # Will maximise the named interface geometry. This means it will occupy all
286
246
  # of the available space on the terminal window.
287
- Vedeu.bind(:_maximise_) do |name|
288
- Vedeu.geometries.by_name(name).maximise
289
- end
247
+ Vedeu.bind(:_maximise_) { |name| Vedeu.geometries.by_name(name).maximise }
290
248
 
291
249
  # Will unmaximise the named interface geometry. Previously, if a geometry
292
250
  # was maximised, then triggering the unmaximise event will return it to its
@@ -4,11 +4,8 @@ module Vedeu
4
4
  # visibility of the cursor within that interface.
5
5
  class Cursor
6
6
 
7
- extend Forwardable
8
7
  include Vedeu::Model
9
8
 
10
- def_delegators Vedeu::Esc, :hide_cursor, :show_cursor
11
-
12
9
  # @!attribute [r] attributes
13
10
  # @return [Hash]
14
11
  attr_reader :attributes
@@ -97,6 +94,17 @@ module Vedeu
97
94
 
98
95
  end
99
96
  end
97
+ alias_method :to_str, :to_s
98
+
99
+ # @return [Vedeu::EscapeChar]
100
+ def hide_cursor
101
+ @hide_cursor ||= Vedeu::EscapeChar.new(Vedeu::Esc.hide_cursor)
102
+ end
103
+
104
+ # @return [Vedeu::EscapeChar]
105
+ def show_cursor
106
+ @show_cursor ||= Vedeu::EscapeChar.new(Vedeu::Esc.show_cursor)
107
+ end
100
108
 
101
109
  private
102
110
 
@@ -133,13 +141,9 @@ module Vedeu
133
141
  #
134
142
  # @return [String]
135
143
  def visibility
136
- if visible?
137
- show_cursor
138
-
139
- else
140
- hide_cursor
144
+ return show_cursor if visible?
141
145
 
142
- end
146
+ hide_cursor
143
147
  end
144
148
 
145
149
  end # Cursor
@@ -1,7 +1,7 @@
1
1
  module Vedeu
2
2
 
3
- # Adjusts the position of the cursor. To use this class, call the appropriate
4
- # event:
3
+ # Adjusts the position of the cursor or view. To use this class, call the
4
+ # appropriate event:
5
5
  #
6
6
  # @example
7
7
  # Vedeu.trigger(:_cursor_down_)
@@ -23,14 +23,28 @@ module Vedeu
23
23
  # # Moves the cursor to the top left of the
24
24
  # # named or current interface in focus.
25
25
  #
26
+ # Vedeu.trigger(:_view_down_, 'my_interface')
27
+ # Vedeu.trigger(:_view_left_, 'my_interface')
28
+ # Vedeu.trigger(:_view_right_, 'my_interface')
29
+ # Vedeu.trigger(:_view_up_, 'my_interface')
30
+ #
26
31
  # @note
27
- # The cursor may not be visible, but it will still move if requested.
28
- # The cursor will not exceed the border or boundary of the interface.
32
+ # The cursor or view may not be visible, but it will still move if
33
+ # requested.
34
+ # The cursor will not exceed the border or boundary of the interface, or
35
+ # boundary of the visible terminal.
29
36
  # The cursor will move freely within the bounds of the interface,
30
37
  # irrespective of content.
38
+ # The view will not exceed the boundary of the visible terminal.
39
+ # The view will move freely within the bounds of the interface,
40
+ # irrespective of content.
31
41
  class Move
32
42
 
33
- # Move the named cursor, or that which is currently in focus in the
43
+ extend Forwardable
44
+
45
+ def_delegators :geometry, :x, :xn, :y, :yn
46
+
47
+ # Move the named cursor or view, or that which is currently in focus in the
34
48
  # specified direction.
35
49
  #
36
50
  # @param direction [Symbol] The direction of travel. Directions include:
@@ -46,7 +60,7 @@ module Vedeu
46
60
  Vedeu::Move.send(direction, entity, name)
47
61
  end
48
62
 
49
- # Moves the cursor down by one row.
63
+ # Moves the cursor or view down by one row.
50
64
  #
51
65
  # @param entity [Class]
52
66
  # @param name [String]
@@ -55,7 +69,7 @@ module Vedeu
55
69
  new(entity, name, 1, 0).move
56
70
  end
57
71
 
58
- # Moves the cursor left by one column.
72
+ # Moves the cursor or view left by one column.
59
73
  #
60
74
  # @param entity [Class]
61
75
  # @param name [String]
@@ -64,7 +78,7 @@ module Vedeu
64
78
  new(entity, name, 0, -1).move
65
79
  end
66
80
 
67
- # Moves the cursor right by one column.
81
+ # Moves the cursor or view right by one column.
68
82
  #
69
83
  # @param entity [Class]
70
84
  # @param name [String]
@@ -73,7 +87,7 @@ module Vedeu
73
87
  new(entity, name, 0, 1).move
74
88
  end
75
89
 
76
- # Moves the cursor up by one row.
90
+ # Moves the cursor or view up by one row.
77
91
  #
78
92
  # @param entity [Class]
79
93
  # @param name [String]
@@ -82,7 +96,8 @@ module Vedeu
82
96
  new(entity, name, -1, 0).move
83
97
  end
84
98
 
85
- # Moves the cursor to the top left coordinate of the interface.
99
+ # Moves the cursor or view to the top left coordinate of the interface or
100
+ # terminal screen.
86
101
  #
87
102
  # @param entity [Class]
88
103
  # @param name [String]
@@ -94,7 +109,7 @@ module Vedeu
94
109
  # Returns an instance of Vedeu::Move.
95
110
  #
96
111
  # @param entity [Class]
97
- # @param name [String] The name of the cursor.
112
+ # @param name [String] The name of the cursor or view.
98
113
  # @param dy [Fixnum] Move up (-1), or down (1), or no action (0).
99
114
  # @param dx [Fixnum] Move left (-1), or right (1), or no action (0).
100
115
  # @return [Move]
@@ -105,23 +120,52 @@ module Vedeu
105
120
  @dx = dx
106
121
  end
107
122
 
108
- # Returns a newly positioned and stored Cursor.
123
+ # Returns a newly positioned and stored cursor or view.
109
124
  #
110
- # @return [Cursor]
125
+ # @return [Vedeu::Cursor|Vedeu::Geometry]
111
126
  def move
112
- attrs = attributes.merge!(new_attributes)
127
+ model = entity.new(merged_attributes).store
113
128
 
114
- model = entity.new(attrs).store
129
+ refresh
115
130
 
116
- if model.is_a?(Vedeu::Cursor)
117
- Vedeu.trigger(:_refresh_cursor_, name)
131
+ model
132
+ end
118
133
 
119
- else
134
+ # @return [void]
135
+ def refresh
136
+ if entity.to_s == 'Vedeu::Geometry'
137
+ Vedeu.trigger(:_clear_)
138
+ Vedeu.trigger(:_refresh_)
139
+ Vedeu.trigger(:_clear_, name)
120
140
  Vedeu.trigger(:_refresh_, name)
121
141
 
142
+ else
143
+ Vedeu.trigger(:_refresh_cursor_, name)
144
+
122
145
  end
146
+ end
123
147
 
124
- model
148
+ # @return [Hash<Symbol => Boolean,Fixnum, String>]
149
+ def merged_attributes
150
+ if entity.to_s == 'Vedeu::Geometry'
151
+ {
152
+ centred: false,
153
+ maximised: false,
154
+ name: name,
155
+ x: (x + dx),
156
+ y: (y + dy),
157
+ xn: (xn + dx),
158
+ yn: (yn + dy),
159
+ }
160
+
161
+ else
162
+ cursor.attributes.merge!(
163
+ x: x_position,
164
+ y: y_position,
165
+ ox: ox,
166
+ oy: oy)
167
+
168
+ end
125
169
  end
126
170
 
127
171
  protected
@@ -144,25 +188,6 @@ module Vedeu
144
188
 
145
189
  private
146
190
 
147
- # Retrieve the attributes of the cursor.
148
- #
149
- # @return [Hash<Symbol => Fixnum, String>]
150
- def attributes
151
- cursor.attributes
152
- end
153
-
154
- # Provide the new attributes for the cursor.
155
- #
156
- # @return [Hash<Symbol => Fixnum>]
157
- def new_attributes
158
- {
159
- x: x_position,
160
- y: y_position,
161
- ox: ox,
162
- oy: oy,
163
- }
164
- end
165
-
166
191
  # Returns the cursors x position based on its current offset.
167
192
  #
168
193
  # @return [Fixnum]
@@ -187,6 +212,11 @@ module Vedeu
187
212
  @cursor ||= Vedeu.cursors.by_name(name)
188
213
  end
189
214
 
215
+ # @return (see Vedeu::Geometries#by_name)
216
+ def geometry
217
+ @geometry ||= Vedeu.geometries.by_name(name)
218
+ end
219
+
190
220
  # Apply the direction amount to the cursor offset. If the offset is less
191
221
  # than 0, correct to 0.
192
222
  #