Class: Vedeu::Cursors::Cursor

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Repositories::Model, Toggleable
Defined in:
lib/vedeu/cursors/cursor.rb,
lib/vedeu/cursors/repository.rb

Overview

Repository

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Cursors::Cursor

Returns a new instance of Vedeu::Cursors::Cursor.

Parameters:

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

Options Hash (attributes):

  • name (String|Symbol)

    The name of the interface this cursor belongs to.

  • ox (Fixnum)

    The offset x coordinate.

  • oy (Fixnum)

    The offset y coordinate.

  • repository (Object)
    Vedeu::Repositories::Repository
  • visible (Boolean)

    The visibility of the cursor.

  • x (Fixnum)

    The terminal x coordinate for the cursor.

  • y (Fixnum)

    The terminal y coordinate for the cursor.



62
63
64
65
66
# File 'lib/vedeu/cursors/cursor.rb', line 62

def initialize(attributes = {})
  defaults.merge!(attributes).each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

Instance Attribute Details

#nameString|Symbol (readonly)

Returns:

  • (String|Symbol)


22
23
24
# File 'lib/vedeu/cursors/cursor.rb', line 22

def name
  @name
end

#oxFixnum

Returns:

  • (Fixnum)


214
215
216
# File 'lib/vedeu/cursors/cursor.rb', line 214

def ox
  @ox < 0 ? 0 : @ox
end

#oyFixnum

Returns:

  • (Fixnum)


219
220
221
# File 'lib/vedeu/cursors/cursor.rb', line 219

def oy
  @oy < 0 ? 0 : @oy
end

#repositoryVedeu::Repositories::Repository Originally defined in module Repositories::Model

#visibleBoolean Also known as: visible? Originally defined in module Toggleable

Returns Whether the toggleable is visible.

Returns:

  • (Boolean)

    Whether the toggleable is visible.

#xFixnum

Returns The column/character coordinate.

Returns:

  • (Fixnum)

    The column/character coordinate.



247
248
249
250
251
# File 'lib/vedeu/cursors/cursor.rb', line 247

def x
  @x = (@x < bx) ? bx : @x
  @x = (@x > bxn) ? bxn : @x
  @x
end

#yFixnum

Returns The row/line coordinate.

Returns:

  • (Fixnum)

    The row/line coordinate.



254
255
256
257
258
# File 'lib/vedeu/cursors/cursor.rb', line 254

def y
  @y = (@y < by) ? by : @y
  @y = (@y > byn) ? byn : @y
  @y
end

Class Method Details

.store(attributes = {}) ⇒ Vedeu::Cursors::Cursor

Parameters:

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

Returns:



42
43
44
# File 'lib/vedeu/cursors/cursor.rb', line 42

def self.store(attributes = {})
  new(attributes).store
end

Instance Method Details

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

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#attributesHash

Returns:

  • (Hash)


69
70
71
72
73
74
75
76
77
78
79
# File 'lib/vedeu/cursors/cursor.rb', line 69

def attributes
  {
    name:       @name,
    ox:         ox,
    oy:         oy,
    repository: @repository,
    visible:    @visible,
    x:          x,
    y:          y,
  }
end

#borderObject (private)

See Also:

  • Borders::Repository#by_name


263
264
265
# File 'lib/vedeu/cursors/cursor.rb', line 263

def border
  @border ||= Vedeu.borders.by_name(name)
end

#coordinate(offset, type) ⇒ Vedeu::Geometry::Coordinate (private)

Determine correct x and y related coordinates.



270
271
272
# File 'lib/vedeu/cursors/cursor.rb', line 270

def coordinate(offset, type)
  Vedeu::Geometry::Coordinate.new(name: name, offset: offset, type: type)
end

#defaultsHash (private)

The default values for a new instance of this class.

Returns:

  • (Hash)


277
278
279
280
281
282
283
284
285
286
287
# File 'lib/vedeu/cursors/cursor.rb', line 277

def defaults
  {
    name:       '',
    ox:         0,
    oy:         0,
    repository: Vedeu.cursors,
    visible:    false,
    x:          1,
    y:          1,
  }
end

#demodulize(klass) ⇒ String Originally defined in module Vedeu::Common

Removes the module part from the expression in the string.

Examples:

demodulize('Vedeu::SomeModule::SomeClass') # => "SomeClass"

Parameters:

  • klass (Class|String)

Returns:

  • (String)

#deputy(client = nil) ⇒ void Originally defined in module Repositories::Model

This method returns an undefined value.

Returns a DSL instance responsible for defining the DSL methods of this model.

Parameters:

  • client (Object|NilClass) (defaults to: nil)

    The client binding represents the client application object that is currently invoking a DSL method. It is required so that we can send messages to the client application object should we need to.

#dsl_classString (private) Originally defined in module Repositories::Model

Returns the DSL class name responsible for this model.

Returns:

  • (String)

#eql?(other) ⇒ Boolean Also known as: ==

An object is equal when its values are the same.

Parameters:

Returns:

  • (Boolean)


85
86
87
# File 'lib/vedeu/cursors/cursor.rb', line 85

def eql?(other)
  self.class == other.class && name == other.name
end

#escape_sequenceVedeu::Models::Escape (private)



290
291
292
# File 'lib/vedeu/cursors/cursor.rb', line 290

def escape_sequence
  Vedeu::Models::Escape.new(position: position, value: visibility)
end

#hideVedeu::Models::Escape

Hide a named cursor, or without a name, the cursor of the currently focussed interface.

Examples:

Vedeu.trigger(:_hide_cursor_, name)
Vedeu.trigger(:_hide_cursor_, Vedeu.focus)
Vedeu.hide_cursor(name)
Vedeu.hide_cursor(Vedeu.focus)

Returns:



207
208
209
210
211
# File 'lib/vedeu/cursors/cursor.rb', line 207

def hide
  super

  render
end

#move_downVedeu::Cursors::Cursor

Moves the cursor down by one row.

Vedeu.trigger(:_cursor_down_, name)
Vedeu.trigger(:_cursor_down_, Vedeu.focus)


96
97
98
99
100
101
# File 'lib/vedeu/cursors/cursor.rb', line 96

def move_down
  @oy += 1
  @y = coordinate(oy, :y).y

  store
end

#move_leftVedeu::Cursors::Cursor

Moves the cursor left by one column.

Vedeu.trigger(:_cursor_left_, name)
Vedeu.trigger(:_cursor_left_, Vedeu.focus)


109
110
111
112
113
114
# File 'lib/vedeu/cursors/cursor.rb', line 109

def move_left
  @ox -= 1
  @x = coordinate(ox, :x).x

  store
end

#move_originVedeu::Cursors::Cursor

Moves the cursor to the top left of the named interface.

Vedeu.trigger(:_cursor_origin_, name)
Vedeu.trigger(:_cursor_origin_, Vedeu.focus)


122
123
124
125
126
127
128
129
# File 'lib/vedeu/cursors/cursor.rb', line 122

def move_origin
  @x = bx
  @y = by
  @ox = 0
  @oy = 0

  store
end

#move_rightVedeu::Cursors::Cursor

Moves the cursor right by one column.

Vedeu.trigger(:_cursor_right_, name)
Vedeu.trigger(:_cursor_right_, Vedeu.focus)


137
138
139
140
141
142
# File 'lib/vedeu/cursors/cursor.rb', line 137

def move_right
  @ox += 1
  @x = coordinate(ox, :x).x

  store
end

#move_upVedeu::Cursors::Cursor

Moves the cursor up by one row.

Vedeu.trigger(:_cursor_up_, name)
Vedeu.trigger(:_cursor_up_, Vedeu.focus)


150
151
152
153
154
155
# File 'lib/vedeu/cursors/cursor.rb', line 150

def move_up
  @oy -= 1
  @y = coordinate(oy, :y).y

  store
end

#new_attributes(new_y = y, new_x = x, new_oy = oy, new_ox = ox) ⇒ Hash (private)

Returns:

  • (Hash)


295
296
297
# File 'lib/vedeu/cursors/cursor.rb', line 295

def new_attributes(new_y = y, new_x = x, new_oy = oy, new_ox = ox)
  attributes.merge!(x: new_x, y: new_y, ox: new_ox, oy: new_oy)
end

#positionVedeu::Geometry::Position

Return the position of this cursor.



226
227
228
# File 'lib/vedeu/cursors/cursor.rb', line 226

def position
  @position = Vedeu::Geometry::Position[y, x]
end

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

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#renderArray<Vedeu::Models::Escape>

Renders the cursor.

Returns:



160
161
162
163
164
# File 'lib/vedeu/cursors/cursor.rb', line 160

def render
  Vedeu.log(message: "Refreshing cursor: '#{name}'".freeze)

  Vedeu.render_output(escape_sequence)
end

#reposition(new_oy, new_ox) ⇒ Vedeu::Cursors::Cursor

Arbitrarily move the cursor to a given position.

Parameters:

  • new_oy (Fixnum)

    The row/line position.

  • new_ox (Fixnum)

    The column/character position.

Returns:



171
172
173
174
175
176
177
178
# File 'lib/vedeu/cursors/cursor.rb', line 171

def reposition(new_oy, new_ox)
  @oy = new_oy
  @ox = new_ox
  @y  = coordinate(oy, :y).y
  @x  = coordinate(ox, :x).x

  store
end

#showVedeu::Models::Escape

Show a named cursor, or without a name, the cursor of the currently focussed interface.

Examples:

Vedeu.trigger(:_show_cursor_, name)
Vedeu.trigger(:_show_cursor_, Vedeu.focus)
Vedeu.show_cursor(name)
Vedeu.show_cursor(Vedeu.focus)

Returns:



240
241
242
243
244
# File 'lib/vedeu/cursors/cursor.rb', line 240

def show
  super

  render
end

#snake_case(name) ⇒ String Originally defined in module Vedeu::Common

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"

Parameters:

  • name (String)

Returns:

  • (String)

#storevoid Originally defined in module Repositories::Model

TODO:

Perhaps some validation could be added here?

Note:

If a block is given, store the model, return the model after yielding.

This method returns an undefined value.

Returns The model instance stored in the repository.

#to_aArray<Fixnum>

Returns:

  • (Array<Fixnum>)


181
182
183
# File 'lib/vedeu/cursors/cursor.rb', line 181

def to_a
  position.to_a
end

#to_sString Also known as: to_str

Returns an escape sequence to position the cursor and set its visibility. When passed a block, will position the cursor, yield and return the original position.

Returns:

  • (String)


190
191
192
193
194
# File 'lib/vedeu/cursors/cursor.rb', line 190

def to_s
  return escape_sequence.to_s unless block_given?

  "#{position}#{yield}#{escape_sequence}".freeze
end

#toggleFalseClass|TrueClass Originally defined in module Toggleable

Toggle the visible state and store the model. When the model is hidden, then it is shown, and vice versa.

Returns:

  • (FalseClass|TrueClass)

#visibilityString (private)

Returns the escape sequence for setting the visibility of the cursor.

Returns:

  • (String)


303
304
305
306
307
# File 'lib/vedeu/cursors/cursor.rb', line 303

def visibility
  return Vedeu::EscapeSequences::Esc.show_cursor if visible?

  Vedeu::EscapeSequences::Esc.hide_cursor
end