Class: Vedeu::Geometries::Move Private

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Repositories::Defaults
Defined in:
lib/vedeu/geometries/move.rb

Overview

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

Move an interface/view via changing its geometry.

When moving an interface/view;

1) Reset the alignment and maximised states to false;

it wont be aligned to a side if moved, and cannot be moved
if maximised.

2) Get the current coordinates of the interface, then: 3) Override the attributes with the new coordinates for

desired movement; these are usually +/- 1 of the current
state, depending on direction.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Repositories::Defaults

#initialize, #validate

Methods included from Common

#absent?, #array?, #boolean, #boolean?, #empty_value?, #escape?, #falsy?, #hash?, #line_model?, #numeric?, #positionable?, #present?, #snake_case, #stream_model?, #string?, #symbol?, #truthy?, #view_model?

Instance Attribute Details

#directionSymbol (readonly, protected)

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 The direction to move; one of: :down, :left, :origin, :right, :up.

Returns:

  • (Symbol)

    The direction to move; one of: :down, :left, :origin, :right, :up.



53
54
55
# File 'lib/vedeu/geometries/move.rb', line 53

def direction
  @direction
end

#nameString|Symbol (readonly, protected)

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 The name of the interface/view.

Returns:

  • (String|Symbol)

    The name of the interface/view.



57
58
59
# File 'lib/vedeu/geometries/move.rb', line 57

def name
  @name
end

#offsetSymbol (readonly, protected)

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 The number of columns or rows to move by.

Returns:

  • (Symbol)

    The number of columns or rows to move by.



61
62
63
# File 'lib/vedeu/geometries/move.rb', line 61

def offset
  @offset
end

Class Method Details

.move(attributes = {}) ⇒ Boolean|Vedeu::Geometries::Geometry

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.



34
35
36
# File 'lib/vedeu/geometries/move.rb', line 34

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

Instance Method Details

#cursor_eventHash<Symbol => Symbol> (private)

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:

  • (Hash<Symbol => Symbol>)


90
91
92
93
94
95
96
97
98
# File 'lib/vedeu/geometries/move.rb', line 90

def cursor_event
  {
    down:   :_cursor_down_,
    left:   :_cursor_left_,
    origin: :_cursor_origin_,
    right:  :_cursor_right_,
    up:     :_cursor_up_,
  }[direction]
end

#defaultsHash<Symbol => void> (private)

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.

The default options/attributes for a new instance of this class.

Returns:

  • (Hash<Symbol => void>)


66
67
68
69
70
71
72
# File 'lib/vedeu/geometries/move.rb', line 66

def defaults
  {
    direction: :none,
    name:      '',
    offset:    1,
  }
end

#direction?Boolean (private)

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:



75
76
77
# File 'lib/vedeu/geometries/move.rb', line 75

def direction?
  direction != :none
end

#downHash<Symbol => Fixnum] (private)

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.

Moves the geometry down by the offset.

Returns:

  • (Hash<Symbol => Fixnum])

    Hash<Symbol => Fixnum]



82
83
84
85
86
87
# File 'lib/vedeu/geometries/move.rb', line 82

def down
  {
    y: y + offset,
    yn: yn + offset,
  }
end

#geometryVedeu::Geometries::Geometry (private)

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.



101
102
103
# File 'lib/vedeu/geometries/move.rb', line 101

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

#leftHash<Symbol => Fixnum] (private)

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.

Moves the geometry left by the offset.

Returns:

  • (Hash<Symbol => Fixnum])

    Hash<Symbol => Fixnum]



108
109
110
111
112
113
# File 'lib/vedeu/geometries/move.rb', line 108

def left
  {
    x: x - offset,
    xn: xn - offset,
  }
end

#moveBoolean|Vedeu::Geometries::Geometry

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.



39
40
41
42
43
44
45
46
# File 'lib/vedeu/geometries/move.rb', line 39

def move
  return false unless valid?

  Vedeu::Geometries::Geometry.store(new_attributes) do
    update_cursor!
    Vedeu.trigger(:_movement_refresh_, name)
  end
end

#new_attributesHash<Symbol => Boolean|String|Symbol> (private)

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:

  • (Hash<Symbol => Boolean|String|Symbol>)


116
117
118
# File 'lib/vedeu/geometries/move.rb', line 116

def new_attributes
  geometry.attributes.merge!(unalign_unmaximise).merge!(send(direction))
end

#originHash<Symbol => Fixnum] (private)

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.

Moves the geometry to the top left of the terminal.

Returns:

  • (Hash<Symbol => Fixnum])

    Hash<Symbol => Fixnum]



123
124
125
126
127
128
129
130
# File 'lib/vedeu/geometries/move.rb', line 123

def origin
  {
    x:  1,
    xn: (xn - x + 1),
    y:  1,
    yn: (yn - y + 1),
  }
end

#rightHash<Symbol => Fixnum] (private)

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.

Moves the geometry right by the offset.

Returns:

  • (Hash<Symbol => Fixnum])

    Hash<Symbol => Fixnum]



135
136
137
138
139
140
# File 'lib/vedeu/geometries/move.rb', line 135

def right
  {
    x: x + offset,
    xn: xn + offset,
  }
end

#unalign_unmaximiseHash<Symbol => Boolean|Symbol] (private)

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 Hash<Symbol => Boolean|Symbol].

Returns:

  • (Hash<Symbol => Boolean|Symbol])

    Hash<Symbol => Boolean|Symbol]



143
144
145
146
147
148
149
# File 'lib/vedeu/geometries/move.rb', line 143

def unalign_unmaximise
  {
    horizontal_alignment: :none,
    maximised:            false,
    vertical_alignment:   :none,
  }
end

#upHash<Symbol => Fixnum] (private)

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.

Moves the geometry up by the offset.

Returns:

  • (Hash<Symbol => Fixnum])

    Hash<Symbol => Fixnum]



154
155
156
157
158
159
# File 'lib/vedeu/geometries/move.rb', line 154

def up
  {
    y: y - offset,
    yn: yn - offset,
  }
end

#update_cursor!void (private)

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.

This method returns an undefined value.

Refresh the cursor after moving.



164
165
166
167
168
169
170
171
172
# File 'lib/vedeu/geometries/move.rb', line 164

def update_cursor!
  if direction == :origin
    Vedeu.trigger(cursor_event, name)

  else
    Vedeu.trigger(cursor_event, name, 0)

  end
end

#valid?Boolean (private)

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:



175
176
177
178
179
180
181
182
183
184
# File 'lib/vedeu/geometries/move.rb', line 175

def valid?
  {
    down:   valid_down?,
    left:   valid_left?,
    origin: true,
    none:   false,
    right:  valid_right?,
    up:     valid_up?,
  }.fetch(direction, false)
end

#valid_down?Boolean (private)

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:



187
188
189
# File 'lib/vedeu/geometries/move.rb', line 187

def valid_down?
  Vedeu::Point.valid?(value: yn + offset, max: Vedeu.height)
end

#valid_left?Boolean (private)

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:



192
193
194
# File 'lib/vedeu/geometries/move.rb', line 192

def valid_left?
  Vedeu::Point.valid?(value: x - offset, min: 1)
end

#valid_right?Boolean (private)

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:



197
198
199
# File 'lib/vedeu/geometries/move.rb', line 197

def valid_right?
  Vedeu::Point.valid?(value: xn + offset, max: Vedeu.width)
end

#valid_up?Boolean (private)

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:



202
203
204
# File 'lib/vedeu/geometries/move.rb', line 202

def valid_up?
  Vedeu::Point.valid?(value: y - offset, min: 1)
end