vedeu 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/.travis.yml +2 -1
  4. data/Guardfile +6 -5
  5. data/README.md +3 -30
  6. data/Rakefile +5 -5
  7. data/bin/vedeu_drb_client +1 -1
  8. data/bin/vedeu_drb_server +91 -89
  9. data/bin/vedeu_test +4 -0
  10. data/config/rubocop_enabled.yml +5 -10
  11. data/examples/borders_app.rb +2 -1
  12. data/examples/colours_app.rb +13 -8
  13. data/examples/configuration_app.rb +3 -2
  14. data/examples/cursor_app.rb +16 -11
  15. data/examples/drb_app.rb +88 -89
  16. data/examples/focus_app.rb +31 -32
  17. data/examples/geometry_app.rb +2 -1
  18. data/examples/hello_world.rb +2 -1
  19. data/examples/lines_app.rb +2 -1
  20. data/examples/material_colours_app.rb +126 -0
  21. data/examples/typed_commands/typed_commands_app.rb +5 -1
  22. data/examples/view_templates_app/view_templates_app.rb +6 -3
  23. data/lib/vedeu/all.rb +1 -1
  24. data/lib/vedeu/api.rb +18 -10
  25. data/lib/vedeu/application.rb +0 -1
  26. data/lib/vedeu/bindings.rb +77 -16
  27. data/lib/vedeu/buffers/all.rb +2 -5
  28. data/lib/vedeu/buffers/buffer.rb +69 -25
  29. data/lib/vedeu/buffers/display_buffer.rb +3 -7
  30. data/lib/vedeu/configuration/all.rb +3 -6
  31. data/lib/vedeu/configuration/api.rb +28 -4
  32. data/lib/vedeu/configuration/cli.rb +9 -9
  33. data/lib/vedeu/configuration/configuration.rb +11 -7
  34. data/lib/vedeu/cursor/all.rb +3 -6
  35. data/lib/vedeu/cursor/cursor.rb +22 -14
  36. data/lib/vedeu/cursor/move.rb +32 -22
  37. data/lib/vedeu/cursor/refresh_cursor.rb +1 -1
  38. data/lib/vedeu/debug.rb +2 -1
  39. data/lib/vedeu/distributed/client.rb +1 -7
  40. data/lib/vedeu/distributed/server.rb +0 -4
  41. data/lib/vedeu/distributed/subprocess.rb +1 -1
  42. data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -1
  43. data/lib/vedeu/distributed/test_application.rb +3 -5
  44. data/lib/vedeu/distributed/uri.rb +2 -2
  45. data/lib/vedeu/dsl/all.rb +6 -6
  46. data/lib/vedeu/dsl/components/all.rb +0 -3
  47. data/lib/vedeu/dsl/components/border.rb +20 -12
  48. data/lib/vedeu/dsl/components/geometry.rb +68 -3
  49. data/lib/vedeu/dsl/components/keymap.rb +1 -2
  50. data/lib/vedeu/dsl/composition.rb +8 -1
  51. data/lib/vedeu/dsl/interface.rb +61 -11
  52. data/lib/vedeu/dsl/line.rb +12 -12
  53. data/lib/vedeu/dsl/shared/all.rb +4 -7
  54. data/lib/vedeu/dsl/shared/colour.rb +2 -2
  55. data/lib/vedeu/dsl/shared/text.rb +2 -35
  56. data/lib/vedeu/dsl/shared/use.rb +2 -2
  57. data/lib/vedeu/dsl/view.rb +4 -4
  58. data/lib/vedeu/events/all.rb +3 -5
  59. data/lib/vedeu/events/event.rb +5 -5
  60. data/lib/vedeu/geometry/all.rb +11 -16
  61. data/lib/vedeu/geometry/area.rb +2 -5
  62. data/lib/vedeu/geometry/canvas.rb +12 -16
  63. data/lib/vedeu/geometry/dimension.rb +20 -22
  64. data/lib/vedeu/geometry/geometry.rb +28 -30
  65. data/lib/vedeu/geometry/grid.rb +1 -1
  66. data/lib/vedeu/geometry/index_position.rb +7 -0
  67. data/lib/vedeu/geometry/null_geometry.rb +61 -0
  68. data/lib/vedeu/geometry/position.rb +0 -3
  69. data/lib/vedeu/geometry/position_index.rb +7 -0
  70. data/lib/vedeu/geometry/position_validator.rb +44 -33
  71. data/lib/vedeu/input/all.rb +5 -4
  72. data/lib/vedeu/input/keymap.rb +0 -1
  73. data/lib/vedeu/input/mapper.rb +1 -3
  74. data/lib/vedeu/launcher.rb +6 -7
  75. data/lib/vedeu/main_loop.rb +1 -2
  76. data/lib/vedeu/models/all.rb +1 -0
  77. data/lib/vedeu/models/cell.rb +5 -8
  78. data/lib/vedeu/models/char.rb +50 -15
  79. data/lib/vedeu/models/composition.rb +8 -1
  80. data/lib/vedeu/models/focus.rb +4 -4
  81. data/lib/vedeu/models/group.rb +3 -3
  82. data/lib/vedeu/models/interface.rb +62 -46
  83. data/lib/vedeu/models/line.rb +1 -1
  84. data/lib/vedeu/models/null.rb +48 -0
  85. data/lib/vedeu/models/stream.rb +5 -5
  86. data/lib/vedeu/output/all.rb +20 -30
  87. data/lib/vedeu/output/border.rb +93 -40
  88. data/lib/vedeu/output/clear.rb +100 -15
  89. data/lib/vedeu/output/colour.rb +56 -12
  90. data/lib/vedeu/output/compressor.rb +59 -0
  91. data/lib/vedeu/output/html_char.rb +4 -2
  92. data/lib/vedeu/output/null_border.rb +16 -4
  93. data/lib/vedeu/output/output.rb +13 -21
  94. data/lib/vedeu/output/presentation.rb +28 -23
  95. data/lib/vedeu/output/refresh.rb +2 -2
  96. data/lib/vedeu/output/renderers/all.rb +80 -3
  97. data/lib/vedeu/output/renderers/file_renderer.rb +38 -2
  98. data/lib/vedeu/output/renderers/html_renderer.rb +6 -4
  99. data/lib/vedeu/output/renderers/json_renderer.rb +52 -0
  100. data/lib/vedeu/output/renderers/null_renderer.rb +14 -0
  101. data/lib/vedeu/output/renderers/terminal_renderer.rb +2 -12
  102. data/lib/vedeu/output/style.rb +33 -3
  103. data/lib/vedeu/output/text.rb +98 -1
  104. data/lib/vedeu/output/translator.rb +30 -7
  105. data/lib/vedeu/output/viewport.rb +43 -79
  106. data/lib/vedeu/output/wordwrap.rb +4 -4
  107. data/lib/vedeu/repositories/all.rb +22 -179
  108. data/lib/vedeu/repositories/collection.rb +11 -13
  109. data/lib/vedeu/repositories/collections/all.rb +8 -0
  110. data/lib/vedeu/repositories/collections/chars.rb +9 -0
  111. data/lib/vedeu/repositories/collections/events.rb +9 -0
  112. data/lib/vedeu/repositories/collections/interfaces.rb +9 -0
  113. data/lib/vedeu/repositories/collections/keys.rb +9 -0
  114. data/lib/vedeu/repositories/collections/lines.rb +9 -0
  115. data/lib/vedeu/repositories/collections/streams.rb +9 -0
  116. data/lib/vedeu/repositories/model.rb +7 -2
  117. data/lib/vedeu/repositories/repositories/all.rb +14 -0
  118. data/lib/vedeu/repositories/repositories/background_colours.rb +14 -0
  119. data/lib/vedeu/repositories/repositories/borders.rb +38 -0
  120. data/lib/vedeu/repositories/repositories/buffers.rb +36 -0
  121. data/lib/vedeu/repositories/repositories/colours.rb +63 -0
  122. data/lib/vedeu/repositories/repositories/cursors.rb +29 -0
  123. data/lib/vedeu/repositories/repositories/events_repository.rb +24 -0
  124. data/lib/vedeu/repositories/repositories/foreground_colours.rb +14 -0
  125. data/lib/vedeu/repositories/repositories/geometries.rb +37 -0
  126. data/lib/vedeu/repositories/repositories/groups.rb +24 -0
  127. data/lib/vedeu/repositories/repositories/interfaces_repository.rb +24 -0
  128. data/lib/vedeu/repositories/repositories/keymaps.rb +24 -0
  129. data/lib/vedeu/repositories/repositories/menus.rb +24 -0
  130. data/lib/vedeu/repositories/repository.rb +29 -47
  131. data/lib/vedeu/storage/all.rb +6 -0
  132. data/lib/vedeu/storage/associative_store.rb +47 -0
  133. data/lib/vedeu/storage/conveyor_store.rb +69 -0
  134. data/lib/vedeu/storage/fifo_store.rb +37 -0
  135. data/lib/vedeu/storage/store.rb +58 -0
  136. data/lib/vedeu/support/all.rb +5 -10
  137. data/lib/vedeu/support/common.rb +0 -8
  138. data/lib/vedeu/support/log.rb +13 -24
  139. data/lib/vedeu/support/template.rb +4 -1
  140. data/lib/vedeu/support/terminal.rb +10 -10
  141. data/lib/vedeu/support/trace.rb +15 -88
  142. data/lib/vedeu/support/visibility.rb +73 -0
  143. data/lib/vedeu.rb +37 -0
  144. data/test/lib/vedeu/api_test.rb +7 -3
  145. data/test/lib/vedeu/application_test.rb +9 -3
  146. data/test/lib/vedeu/bindings_test.rb +21 -0
  147. data/test/lib/vedeu/buffers/buffer_test.rb +110 -134
  148. data/test/lib/vedeu/buffers/display_buffer_test.rb +8 -0
  149. data/test/lib/vedeu/configuration/api_test.rb +5 -1
  150. data/test/lib/vedeu/configuration/configuration_test.rb +4 -6
  151. data/test/lib/vedeu/cursor/cursor_test.rb +25 -17
  152. data/test/lib/vedeu/cursor/move_test.rb +7 -7
  153. data/test/lib/vedeu/distributed/client_test.rb +1 -1
  154. data/test/lib/vedeu/distributed/subprocess_test.rb +3 -1
  155. data/test/lib/vedeu/distributed/uri_test.rb +5 -5
  156. data/test/lib/vedeu/dsl/components/geometry_test.rb +43 -0
  157. data/test/lib/vedeu/dsl/components/keymap_test.rb +1 -1
  158. data/test/lib/vedeu/dsl/composition_test.rb +6 -5
  159. data/test/lib/vedeu/dsl/interface_test.rb +81 -16
  160. data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -4
  161. data/test/lib/vedeu/dsl/shared/text_test.rb +87 -9
  162. data/test/lib/vedeu/dsl/stream_test.rb +1 -1
  163. data/test/lib/vedeu/events/event_test.rb +3 -1
  164. data/test/lib/vedeu/events/trigger_test.rb +8 -4
  165. data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
  166. data/test/lib/vedeu/geometry/geometry_test.rb +5 -3
  167. data/test/lib/vedeu/geometry/index_position_test.rb +30 -7
  168. data/test/lib/vedeu/geometry/null_geometry_test.rb +57 -0
  169. data/test/lib/vedeu/geometry/position_index_test.rb +14 -0
  170. data/test/lib/vedeu/geometry/position_validator_test.rb +17 -3
  171. data/test/lib/vedeu/input/keymap_test.rb +3 -1
  172. data/test/lib/vedeu/input/mapper_test.rb +8 -4
  173. data/test/lib/vedeu/launcher_test.rb +1 -1
  174. data/test/lib/vedeu/models/cell_test.rb +10 -8
  175. data/test/lib/vedeu/models/char_test.rb +52 -28
  176. data/test/lib/vedeu/models/composition_test.rb +26 -4
  177. data/test/lib/vedeu/models/group_test.rb +11 -5
  178. data/test/lib/vedeu/models/interface_test.rb +32 -19
  179. data/test/lib/vedeu/models/line_test.rb +21 -25
  180. data/test/lib/vedeu/models/menu_test.rb +10 -6
  181. data/test/lib/vedeu/models/null_test.rb +66 -0
  182. data/test/lib/vedeu/models/stream_test.rb +13 -10
  183. data/test/lib/vedeu/output/border_test.rb +29 -8
  184. data/test/lib/vedeu/output/clear_test.rb +23 -4
  185. data/test/lib/vedeu/output/colour_test.rb +20 -4
  186. data/test/lib/vedeu/output/compressor_test.rb +43 -0
  187. data/test/lib/vedeu/output/html_char_test.rb +29 -17
  188. data/test/lib/vedeu/output/null_border_test.rb +2 -1
  189. data/test/lib/vedeu/output/output_test.rb +20 -30
  190. data/test/lib/vedeu/output/presentation_test.rb +39 -16
  191. data/test/lib/vedeu/output/refresh_test.rb +14 -10
  192. data/test/lib/vedeu/output/renderers/all_test.rb +96 -0
  193. data/test/lib/vedeu/output/renderers/file_renderer_test.rb +1 -1
  194. data/test/lib/vedeu/output/renderers/html_renderer_test.rb +13 -9
  195. data/test/lib/vedeu/output/renderers/json_renderer_test.rb +52 -0
  196. data/test/lib/vedeu/output/renderers/null_renderer_test.rb +19 -0
  197. data/test/lib/vedeu/output/style_test.rb +41 -1
  198. data/test/lib/vedeu/output/text_test.rb +61 -10
  199. data/test/lib/vedeu/output/translator_test.rb +14 -0
  200. data/test/lib/vedeu/output/viewport_test.rb +22 -3
  201. data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
  202. data/test/lib/vedeu/output/wordwrap_test.rb +58 -45
  203. data/test/lib/vedeu/repositories/collections/chars_test.rb +16 -0
  204. data/test/lib/vedeu/repositories/collections/events_test.rb +16 -0
  205. data/test/lib/vedeu/repositories/collections/interfaces_test.rb +16 -0
  206. data/test/lib/vedeu/repositories/collections/keys_test.rb +16 -0
  207. data/test/lib/vedeu/repositories/collections/lines_test.rb +16 -0
  208. data/test/lib/vedeu/repositories/collections/streams_test.rb +16 -0
  209. data/test/lib/vedeu/repositories/repositories/background_colours_test.rb +17 -0
  210. data/test/lib/vedeu/repositories/repositories/borders_test.rb +51 -0
  211. data/test/lib/vedeu/repositories/repositories/buffers_test.rb +52 -0
  212. data/test/lib/vedeu/repositories/repositories/colours_test.rb +16 -0
  213. data/test/lib/vedeu/repositories/repositories/cursors_test.rb +39 -0
  214. data/test/lib/vedeu/repositories/repositories/events_repository_test.rb +17 -0
  215. data/test/lib/vedeu/repositories/repositories/foreground_colours_test.rb +17 -0
  216. data/test/lib/vedeu/repositories/repositories/geometries_test.rb +42 -0
  217. data/test/lib/vedeu/repositories/repositories/groups_test.rb +17 -0
  218. data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +17 -0
  219. data/test/lib/vedeu/repositories/repositories/keymaps_test.rb +17 -0
  220. data/test/lib/vedeu/repositories/repositories/menus_test.rb +17 -0
  221. data/test/lib/vedeu/repositories/repository_test.rb +16 -36
  222. data/test/lib/vedeu/storage/associative_store_test.rb +69 -0
  223. data/test/lib/vedeu/storage/conveyor_store_test.rb +135 -0
  224. data/test/lib/vedeu/storage/fifo_store_test.rb +47 -0
  225. data/test/lib/vedeu/storage/store_test.rb +123 -0
  226. data/test/lib/vedeu/support/common_test.rb +0 -9
  227. data/test/lib/vedeu/support/terminal_test.rb +78 -55
  228. data/test/lib/vedeu/support/visibility_test.rb +80 -0
  229. data/test/test_helper.rb +13 -11
  230. data/vedeu.gemspec +4 -3
  231. metadata +92 -32
  232. data/lib/vedeu/cursor/toggle.rb +0 -55
  233. data/lib/vedeu/exceptions.rb +0 -37
  234. data/lib/vedeu/geometry/centre.rb +0 -85
  235. data/lib/vedeu/geometry/content.rb +0 -70
  236. data/lib/vedeu/geometry/limit.rb +0 -58
  237. data/lib/vedeu/output/compositor.rb +0 -62
  238. data/lib/vedeu/repositories/collections.rb +0 -41
  239. data/lib/vedeu/support/coercions.rb +0 -60
  240. data/lib/vedeu/support/sentence.rb +0 -91
  241. data/lib/vedeu/support/visible.rb +0 -90
  242. data/test/lib/vedeu/cursor/toggle_test.rb +0 -63
  243. data/test/lib/vedeu/geometry/centre_test.rb +0 -58
  244. data/test/lib/vedeu/geometry/content_test.rb +0 -98
  245. data/test/lib/vedeu/geometry/limit_test.rb +0 -30
  246. data/test/lib/vedeu/output/compositor_test.rb +0 -48
  247. data/test/lib/vedeu/repositories/all_test.rb +0 -135
  248. data/test/lib/vedeu/repositories/collections_test.rb +0 -71
  249. data/test/lib/vedeu/support/coercions_test.rb +0 -84
  250. data/test/lib/vedeu/support/sentence_test.rb +0 -56
  251. data/test/lib/vedeu/support/visible_test.rb +0 -161
@@ -23,9 +23,9 @@ module Vedeu
23
23
  # @return [Vedeu::Line]
24
24
  attr_accessor :parent
25
25
 
26
- # @!attribute [rw] value
26
+ # @!attribute [w] value
27
27
  # @return [String]
28
- attr_accessor :value
28
+ attr_writer :value
29
29
 
30
30
  # Returns a new instance of Vedeu::Char.
31
31
  #
@@ -68,7 +68,7 @@ module Vedeu
68
68
 
69
69
  # @return [String]
70
70
  def inspect
71
- "<Vedeu::Char '#{Vedeu::Esc.escape(self.to_s)}'>"
71
+ "<Vedeu::Char '#{Vedeu::Esc.escape(to_s)}'>"
72
72
  end
73
73
 
74
74
  # @return [Vedeu::Position]
@@ -84,6 +84,17 @@ module Vedeu
84
84
  @position = Vedeu::Position.coerce(value)
85
85
  end
86
86
 
87
+ # @return [String]
88
+ def value
89
+ if border
90
+ Vedeu::Esc.border { @value }
91
+
92
+ else
93
+ @value
94
+
95
+ end
96
+ end
97
+
87
98
  # Returns the x position for the Char if set.
88
99
  #
89
100
  # @return [Fixnum|NilClass]
@@ -107,18 +118,12 @@ module Vedeu
107
118
  # @return [Hash]
108
119
  def to_hash
109
120
  {
110
- parent: {
111
- background: parent_background.to_s,
112
- foreground: parent_foreground.to_s,
113
- style: parent_style.to_s,
114
- },
115
- background: background.to_s,
116
- border: border.to_s,
117
- foreground: foreground.to_s,
118
- style: style.to_s,
119
- value: value,
120
- x: x,
121
- y: y,
121
+ border: border.to_s,
122
+ colour: colour_to_hash,
123
+ parent: parent_to_hash,
124
+ position: position_to_hash,
125
+ style: style.to_s,
126
+ value: value,
122
127
  }
123
128
  end
124
129
 
@@ -127,12 +132,25 @@ module Vedeu
127
132
  @to_html ||= Vedeu::HTMLChar.render(self)
128
133
  end
129
134
 
135
+ # @return [String]
136
+ def to_json
137
+ @to_json ||= JSON.generate(to_hash)
138
+ end
139
+
130
140
  private
131
141
 
132
142
  # @!attribute [r] attributes
133
143
  # @return [Hash]
134
144
  attr_reader :attributes
135
145
 
146
+ # @return [Hash]
147
+ def colour_to_hash
148
+ {
149
+ background: background.to_s,
150
+ foreground: foreground.to_s,
151
+ }
152
+ end
153
+
136
154
  # The default values for a new instance of this class.
137
155
  #
138
156
  # @return [Hash]
@@ -147,6 +165,23 @@ module Vedeu
147
165
  }
148
166
  end
149
167
 
168
+ # @return [Hash]
169
+ def parent_to_hash
170
+ {
171
+ background: parent_background.to_s,
172
+ foreground: parent_foreground.to_s,
173
+ style: parent_style.to_s,
174
+ }
175
+ end
176
+
177
+ # @return [Hash]
178
+ def position_to_hash
179
+ {
180
+ y: y,
181
+ x: x,
182
+ }
183
+ end
184
+
150
185
  end # Char
151
186
 
152
187
  end # Vedeu
@@ -32,7 +32,7 @@ module Vedeu
32
32
  end
33
33
 
34
34
  # @param child [Vedeu::Interface]
35
- # @return [void]
35
+ # @return [Vedeu::Interfaces]
36
36
  def add(child)
37
37
  @interfaces = interfaces.add(child)
38
38
  end
@@ -43,6 +43,13 @@ module Vedeu
43
43
  end
44
44
  alias_method :value, :interfaces
45
45
 
46
+ # Composition objects do not have a parent.
47
+ #
48
+ # @return [NilClass]
49
+ def parent
50
+ nil
51
+ end
52
+
46
53
  private
47
54
 
48
55
  # The default values for a new instance of this class.
@@ -42,7 +42,7 @@ module Vedeu
42
42
  # @return [String] The name of the interface now in focus.
43
43
  def by_name(name)
44
44
  fail ModelNotFound, "Cannot focus '#{name}' as this interface has not " \
45
- "been registered." unless registered?(name)
45
+ 'been registered.' unless registered?(name)
46
46
 
47
47
  storage.rotate!(storage.index(name))
48
48
 
@@ -82,7 +82,7 @@ module Vedeu
82
82
 
83
83
  update
84
84
  end
85
- alias_method :next, :next_item
85
+ alias_method :next, :next_item
86
86
  alias_method :focus_next, :next_item
87
87
 
88
88
  # Put the previous interface relative to the current interface in focus.
@@ -93,8 +93,8 @@ module Vedeu
93
93
 
94
94
  update
95
95
  end
96
- alias_method :prev, :prev_item
97
- alias_method :previous, :prev_item
96
+ alias_method :prev, :prev_item
97
+ alias_method :previous, :prev_item
98
98
  alias_method :focus_previous, :prev_item
99
99
 
100
100
  # Refresh the interface in focus.
@@ -37,7 +37,7 @@ module Vedeu
37
37
  def add(member)
38
38
  @members = members.add(member)
39
39
 
40
- Vedeu::Group.new({ name: name, members: @members }).store
40
+ Vedeu::Group.new(name: name, members: @members).store
41
41
  end
42
42
 
43
43
  # Return the members as a Set.
@@ -54,14 +54,14 @@ module Vedeu
54
54
  def remove(member)
55
55
  @members = members.delete(member)
56
56
 
57
- Vedeu::Group.new({ name: name, members: @members }).store
57
+ Vedeu::Group.new(name: name, members: @members).store
58
58
  end
59
59
 
60
60
  # Remove all members from the group.
61
61
  #
62
62
  # @return [Group]
63
63
  def reset
64
- Vedeu::Group.new(defaults.merge!({ name: name })).store
64
+ Vedeu::Group.new(defaults.merge!(name: name)).store
65
65
  end
66
66
 
67
67
  private
@@ -1,4 +1,3 @@
1
- require 'vedeu/geometry/content'
2
1
  require 'vedeu/models/all'
3
2
  require 'vedeu/output/null_border'
4
3
  require 'vedeu/output/presentation'
@@ -22,10 +21,6 @@ module Vedeu
22
21
  collection Vedeu::Lines
23
22
  member Vedeu::Line
24
23
 
25
- # @!attribute [rw] colour
26
- # @return [void]
27
- attr_accessor :colour
28
-
29
24
  # @!attribute [rw] delay
30
25
  # @return [Fixnum|Float]
31
26
  attr_accessor :delay
@@ -42,33 +37,34 @@ module Vedeu
42
37
  # @return [Vedeu::Composition]
43
38
  attr_accessor :parent
44
39
 
45
- # @!attribute [rw] style
40
+ # @!attribute [rw] visible
46
41
  # @return [String|Symbol]
47
- attr_accessor :style
42
+ attr_accessor :visible
43
+ alias_method :visible?, :visible
48
44
 
49
45
  # @!attribute [w] lines
50
46
  # @return [Array<Vedeu::Line>]
51
47
  attr_writer :lines
52
48
 
53
49
  def_delegators :geometry,
54
- :north,
55
- :east,
56
- :south,
57
- :west,
58
- :top,
59
- :right,
60
- :bottom,
61
- :left,
62
- :y,
63
- :yn,
64
- :x,
65
- :xn,
66
- :width,
67
- :height,
68
- :top_left,
69
- :top_right,
70
- :bottom_left,
71
- :bottom_right
50
+ :north,
51
+ :east,
52
+ :south,
53
+ :west,
54
+ :top,
55
+ :right,
56
+ :bottom,
57
+ :left,
58
+ :y,
59
+ :yn,
60
+ :x,
61
+ :xn,
62
+ :width,
63
+ :height,
64
+ :top_left,
65
+ :top_right,
66
+ :bottom_left,
67
+ :bottom_right
72
68
 
73
69
  # Return a new instance of Vedeu::Interface.
74
70
  #
@@ -80,6 +76,7 @@ module Vedeu
80
76
  # @option attributes name [String]
81
77
  # @option attributes parent [Vedeu::Composition]
82
78
  # @option attributes style [Vedeu::Style]
79
+ # @option attributes visible [Boolean]
83
80
  # @return [Vedeu::Interface]
84
81
  def initialize(attributes = {})
85
82
  @attributes = defaults.merge!(attributes)
@@ -92,6 +89,7 @@ module Vedeu
92
89
  @parent = @attributes[:parent]
93
90
  @repository = Vedeu.interfaces
94
91
  @style = @attributes[:style]
92
+ @visible = @attributes[:visible]
95
93
  end
96
94
 
97
95
  # @param child []
@@ -106,12 +104,13 @@ module Vedeu
106
104
  # @return [Hash]
107
105
  def attributes
108
106
  {
109
- colour: colour,
110
- delay: delay,
111
- group: group,
112
- name: name,
113
- parent: parent,
114
- style: style,
107
+ colour: colour,
108
+ delay: delay,
109
+ group: group,
110
+ name: name,
111
+ parent: parent,
112
+ style: style,
113
+ visible: true,
115
114
  }
116
115
  end
117
116
 
@@ -126,18 +125,12 @@ module Vedeu
126
125
  #
127
126
  # @return [Vedeu::Border|NilClass]
128
127
  def border
129
- @border ||= if border?
130
- Vedeu.borders.find(name)
131
-
132
- else
133
- Vedeu::NullBorder.new(self)
134
-
135
- end
128
+ @border ||= Vedeu.borders.by_name(name)
136
129
  end
137
130
 
138
131
  # @return [Array<Array<Vedeu::Char>>]
139
132
  def clear
140
- Vedeu::Clear.render(self)
133
+ Vedeu::Clear.new(self)
141
134
  end
142
135
 
143
136
  # Fetch the cursor belonging to this interface (by name), if one does not
@@ -150,7 +143,7 @@ module Vedeu
150
143
 
151
144
  # @return [Vedeu::Geometry]
152
145
  def geometry
153
- @geometry ||= Vedeu.geometries.find(name)
146
+ @geometry ||= Vedeu.geometries.by_name(name)
154
147
  end
155
148
 
156
149
  # @return [Vedeu::Lines]
@@ -171,11 +164,19 @@ module Vedeu
171
164
 
172
165
  # @return [Array<Array<Vedeu::Char>>]
173
166
  def render
174
- [
175
- border.render,
176
- clear,
177
- viewport
178
- ]
167
+ if visible?
168
+ [
169
+ hide_cursor,
170
+ clear.render,
171
+ border.render,
172
+ viewport.render,
173
+ show_cursor,
174
+ ]
175
+
176
+ else
177
+ []
178
+
179
+ end
179
180
  end
180
181
 
181
182
  # @return [Interface]
@@ -190,7 +191,7 @@ module Vedeu
190
191
 
191
192
  # @return [Array<Array<Vedeu::Char>>]
192
193
  def viewport
193
- Vedeu::Viewport.render(self)
194
+ Vedeu::Viewport.new(self)
194
195
  end
195
196
 
196
197
  private
@@ -208,9 +209,24 @@ module Vedeu
208
209
  name: '',
209
210
  parent: nil,
210
211
  style: nil,
212
+ visible: true,
211
213
  }
212
214
  end
213
215
 
216
+ # @return [String]
217
+ def hide_cursor
218
+ return Vedeu::Esc.string(:hide_cursor) if cursor.visible?
219
+
220
+ ''
221
+ end
222
+
223
+ # @return [String]
224
+ def show_cursor
225
+ return Vedeu::Esc.string(:show_cursor) if cursor.visible?
226
+
227
+ ''
228
+ end
229
+
214
230
  end # Interface
215
231
 
216
232
  end # Vedeu
@@ -73,7 +73,7 @@ module Vedeu
73
73
  #
74
74
  # @return [Fixnum]
75
75
  def size
76
- streams.map(&:size).inject(0, :+) { |sum, x| sum += x }
76
+ streams.map(&:size).inject(0, :+)
77
77
  end
78
78
 
79
79
  # @return [Vedeu::Streams]
@@ -0,0 +1,48 @@
1
+ module Vedeu
2
+
3
+ # Represents a empty model.
4
+ #
5
+ class Null
6
+
7
+ # @return [Vedeu::Null]
8
+ def initialize; end
9
+
10
+ # @return [NilClass]
11
+ def add(*)
12
+ nil
13
+ end
14
+
15
+ # @return [NilClass]
16
+ def colour
17
+ nil
18
+ end
19
+
20
+ # @return [NilClass]
21
+ def parent
22
+ nil
23
+ end
24
+
25
+ # @return [Vedeu::Null]
26
+ def store
27
+ self
28
+ end
29
+
30
+ # @return [NilClass]
31
+ def style
32
+ nil
33
+ end
34
+
35
+ # @return [FalseClass]
36
+ def visible?
37
+ false
38
+ end
39
+ alias_method :visible, :visible?
40
+
41
+ # @return [FalseClass]
42
+ def visible=(*)
43
+ false
44
+ end
45
+
46
+ end # Null
47
+
48
+ end # Vedeu
@@ -59,11 +59,11 @@ module Vedeu
59
59
  return [] if value.empty?
60
60
 
61
61
  value.chars.map do |char|
62
- member.new({ value: char,
63
- parent: parent,
64
- colour: colour,
65
- style: style,
66
- position: nil })
62
+ member.new(value: char,
63
+ parent: parent,
64
+ colour: colour,
65
+ style: style,
66
+ position: nil)
67
67
  end
68
68
  end
69
69
 
@@ -1,30 +1,20 @@
1
- require 'vedeu/output/esc'
2
-
3
- require 'vedeu/output/translator'
4
- require 'vedeu/output/background'
5
- require 'vedeu/output/foreground'
6
-
7
- require 'vedeu/output/border'
8
- require 'vedeu/output/null_border'
9
- require 'vedeu/output/colour'
10
- require 'vedeu/output/compositor'
11
-
12
- require 'vedeu/output/clear'
13
-
14
- require 'vedeu/output/presentation'
15
- require 'vedeu/output/style'
16
- require 'vedeu/output/text'
17
- require 'vedeu/output/virtual_buffer'
18
- require 'vedeu/output/html_char'
19
- require 'vedeu/output/refresh'
20
-
21
- require 'vedeu/output/renderers/all'
22
-
23
- require 'vedeu/output/output'
24
-
25
- require 'vedeu/output/viewport'
26
- require 'vedeu/output/virtual_terminal'
27
- require 'vedeu/output/wordwrap'
28
-
29
- module Vedeu
30
- end # Vedeu
1
+ require_relative 'esc'
2
+ require_relative 'translator'
3
+ require_relative 'background'
4
+ require_relative 'foreground'
5
+ require_relative 'border'
6
+ require_relative 'null_border'
7
+ require_relative 'colour'
8
+ require_relative 'compressor'
9
+ require_relative 'clear'
10
+ require_relative 'presentation'
11
+ require_relative 'style'
12
+ require_relative 'text'
13
+ require_relative 'virtual_buffer'
14
+ require_relative 'html_char'
15
+ require_relative 'refresh'
16
+ require_relative 'renderers/all'
17
+ require_relative 'output'
18
+ require_relative 'viewport'
19
+ require_relative 'virtual_terminal'
20
+ require_relative 'wordwrap'