Class: Vedeu::Interfaces::Clear

Inherits:
Object
  • Object
show all
Includes:
Common
Defined in:
lib/vedeu/interfaces/clear.rb

Overview

Clear the named interface.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Vedeu::Interfaces::Clear

Return a new instance of Vedeu::Interfaces::Clear.

Parameters:

  • name (String|Symbol)

    The name of the interface to clear.

  • options (Hash) (defaults to: {})

Options Hash (options):

  • content_only (Boolean)

    Only clear the content not the border as well. Defaults to false.

  • direct (Boolean)

    Write the content directly to the terminal using a faster mechanism. The virtual buffer will still be updated. This improves the refresh time for Vedeu as we will not be building a grid of Cells::Char objects.



60
61
62
63
# File 'lib/vedeu/interfaces/clear.rb', line 60

def initialize(name, options = {})
  @name    = present?(name) ? name : Vedeu.focus
  @options = options
end

Instance Attribute Details

#nameString|Symbol (readonly, protected)

Returns:

  • (String|Symbol)


82
83
84
# File 'lib/vedeu/interfaces/clear.rb', line 82

def name
  @name
end

Class Method Details

.by_nameArray<Array<Vedeu::Cells::Char>>

Clear the interface with the given name.

Examples:

Vedeu.trigger(:_clear_view_, name)
Vedeu.clear_by_name(name)

Returns:

See Also:



29
30
31
32
33
# File 'lib/vedeu/interfaces/clear.rb', line 29

def render(name = Vedeu.focus)
  name || Vedeu.focus

  new(name).render
end

.clear_by_nameArray<Array<Vedeu::Cells::Char>>

Clear the interface with the given name.

Examples:

Vedeu.trigger(:_clear_view_, name)
Vedeu.clear_by_name(name)

Returns:

See Also:



28
29
30
31
32
# File 'lib/vedeu/interfaces/clear.rb', line 28

def render(name = Vedeu.focus)
  name || Vedeu.focus

  new(name).render
end

.clear_content_by_name(name = Vedeu.focus) ⇒ Array<Array<Vedeu::Cells::Char>>

Clear the content of the interface with the given name.

Examples:

Vedeu.trigger(:_clear_view_content_, name)
Vedeu.clear_content_by_name(name)

Returns:

See Also:



39
40
41
42
43
# File 'lib/vedeu/interfaces/clear.rb', line 39

def clear_content_by_name(name = Vedeu.focus)
  name || Vedeu.focus

  new(name, content_only: true, direct: true).render
end

.render(name = Vedeu.focus) ⇒ Array<Array<Vedeu::Cells::Char>>

Clear the interface with the given name.

Examples:

Vedeu.trigger(:_clear_view_, name)
Vedeu.clear_by_name(name)

Returns:

See Also:



23
24
25
26
27
# File 'lib/vedeu/interfaces/clear.rb', line 23

def render(name = Vedeu.focus)
  name || Vedeu.focus

  new(name).render
end

Instance Method Details

#absent?(variable) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether a variable is nil or empty.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#become(klass, attributes) ⇒ Class Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts one class into another.

Parameters:

  • klass (Class)

    The class to become an instance of.

  • attributes (Hash)

    The attributes of klass.

Returns:

  • (Class)

    Returns a new instance of klass.

#boolean(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the value was a boolean.

Parameters:

  • value (void)

Returns:

#boolean?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Boolean.

Parameters:

Returns:

#build_position(pos_y, pos_x) ⇒ Vedeu::Geometries::Position (private)

TODO:

Not sure if #to_s is required here. (GL: 2015-11-30)

Parameters:

  • pos_y (Fixnum)
  • pos_x (Fixnum)

Returns:



188
189
190
# File 'lib/vedeu/interfaces/clear.rb', line 188

def build_position(pos_y, pos_x)
  Vedeu::Geometries::Position.new(pos_y, pos_x).to_s
end

#charsString (private)

Returns A string of blank characters.

Returns:

  • (String)

    A string of blank characters.



87
88
89
# File 'lib/vedeu/interfaces/clear.rb', line 87

def chars
  @chars ||= (' ' * width)
end

#clearingString (private)

Returns:

  • (String)


174
175
176
177
178
179
180
181
182
# File 'lib/vedeu/interfaces/clear.rb', line 174

def clearing
  @clearing ||= if content_only?
                  'content'

                else
                  'interface'

                end
end

#colourVedeu::Colours::Colour (private)



92
93
94
# File 'lib/vedeu/interfaces/clear.rb', line 92

def colour
  @colour ||= interface.colour
end

#content_only?Boolean (private)

Returns:



97
98
99
# File 'lib/vedeu/interfaces/clear.rb', line 97

def content_only?
  options[:content_only]
end

#defaultsHash<Symbol => Boolean> (private)

Returns:



102
103
104
105
106
107
# File 'lib/vedeu/interfaces/clear.rb', line 102

def defaults
  {
    content_only: false,
    direct:       false,
  }
end

#direct?Boolean (private)

Returns:



110
111
112
# File 'lib/vedeu/interfaces/clear.rb', line 110

def direct?
  options[:direct]
end

#escape?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is an escape sequence object (e.g. Vedeu::Cells::Escape.)

Returns:

#falsy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered false.

Parameters:

  • value (void)

Returns:

#geometryObject (private)

Returns the geometry for the interface.



117
118
119
# File 'lib/vedeu/interfaces/clear.rb', line 117

def geometry
  @geometry ||= Vedeu.geometries.by_name(name)
end

#hash?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Hash.

Parameters:

  • value (Hash|void)

Returns:

#heightFixnum (private)

Returns:

  • (Fixnum)


122
123
124
125
126
127
128
129
130
# File 'lib/vedeu/interfaces/clear.rb', line 122

def height
  @height ||= if content_only?
                geometry.bordered_height

              else
                geometry.height

              end
end

#interfaceVedeu::Interfaces::Interface (private)



133
134
135
# File 'lib/vedeu/interfaces/clear.rb', line 133

def interface
  Vedeu.interfaces.by_name(name)
end

#line_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Line.

Returns:

#numeric?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (Fixnum|void)

Returns:

#optimised_outputString (private)

Returns:

  • (String)


143
144
145
146
147
148
149
150
151
152
153
# File 'lib/vedeu/interfaces/clear.rb', line 143

def optimised_output
  Vedeu.timer("Optimised clearing #{clearing}: '#{name}'") do
    Array.new(height) do |iy|
      [
        build_position(y + iy, x),
        colour.to_s,
        chars,
      ].join
    end.join + build_position(y, x)
  end
end

#optionsHash<Symbol => Boolean> (private)

Returns:



138
139
140
# File 'lib/vedeu/interfaces/clear.rb', line 138

def options
  defaults.merge!(@options)
end

#outputArray<Array<Vedeu::Cells::Char>> (private)

For each visible line of the interface, set the foreground and background colours to those specified when the interface was defined, then starting write space characters over the area which the interface occupies.

Returns:



161
162
163
164
165
166
167
168
169
170
171
# File 'lib/vedeu/interfaces/clear.rb', line 161

def output
  Vedeu.timer("Clearing #{clearing}: '#{name}'") do
    @clear ||= Array.new(height) do |iy|
      Array.new(width) do |ix|
        Vedeu::Cells::Clear.new(colour:   colour,
                                name:     name,
                                position: [y + iy, x + ix])
      end
    end
  end
end

#present?(variable) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether a variable has a useful value.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#renderArray<Array<Vedeu::Cells::Char>>

Returns:



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/vedeu/interfaces/clear.rb', line 66

def render
  if direct?
    Vedeu.direct_write(optimised_output)

    Vedeu::Buffers::Terminal.update(output)

  else
    Vedeu.render_output(output)

  end
end

#snake_case(klass) ⇒ String Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts a class name to a lowercase snake case string.

Examples:

snake_case(MyClassName) # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

snake_case('MyClassName') # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

Parameters:

  • klass (Module|Class|String)

Returns:

  • (String)

#stream_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Stream.

Returns:

#string?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (String|void)

Returns:

#truthy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered true.

Parameters:

  • value (void)

Returns:

#view_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::View.

Returns:

#widthFixnum (private)

Returns:

  • (Fixnum)


193
194
195
196
197
198
199
200
201
# File 'lib/vedeu/interfaces/clear.rb', line 193

def width
  @width ||= if content_only?
               geometry.bordered_width

             else
               geometry.width

             end
end

#xFixnum (private)

Returns:

  • (Fixnum)


215
216
217
218
219
220
221
222
223
# File 'lib/vedeu/interfaces/clear.rb', line 215

def x
  @x ||= if content_only?
           geometry.bx

         else
           geometry.x

         end
end

#yFixnum (private)

Returns:

  • (Fixnum)


204
205
206
207
208
209
210
211
212
# File 'lib/vedeu/interfaces/clear.rb', line 204

def y
  @y ||= if content_only?
           geometry.by

         else
           geometry.y

         end
end