Class: Tuile::Component::List::Cursor
- Inherits:
-
Object
- Object
- Tuile::Component::List::Cursor
- Defined in:
- lib/tuile/component/list.rb
Overview
Tracks cursor position within the list.
Defined Under Namespace
Instance Attribute Summary collapse
-
#position ⇒ Integer
readonly
0-based line index of the current cursor position.
Instance Method Summary collapse
-
#candidate_positions(line_count) ⇒ Array<Integer>
Positions the cursor can land on, in ascending order.
-
#go(new_position) ⇒ Boolean
Moves the cursor to the new position.
-
#handle_key(key, line_count, viewport_lines) ⇒ Boolean
True if the cursor moved.
-
#handle_mouse(line, event, line_count) ⇒ Boolean
True if the event was handled.
-
#initialize(position: 0) ⇒ Cursor
constructor
A new instance of Cursor.
Constructor Details
#initialize(position: 0) ⇒ Cursor
Returns a new instance of Cursor.
274 275 276 |
# File 'lib/tuile/component/list.rb', line 274 def initialize(position: 0) @position = position end |
Instance Attribute Details
#position ⇒ Integer (readonly)
Returns 0-based line index of the current cursor position.
309 310 311 |
# File 'lib/tuile/component/list.rb', line 309 def position @position end |
Instance Method Details
#candidate_positions(line_count) ⇒ Array<Integer>
Returns positions the cursor can land on, in ascending order.
314 315 316 |
# File 'lib/tuile/component/list.rb', line 314 def candidate_positions(line_count) (0...line_count).to_a end |
#go(new_position) ⇒ Boolean
Moves the cursor to the new position. Public only because of testing.
356 357 358 359 360 361 362 |
# File 'lib/tuile/component/list.rb', line 356 def go(new_position) new_position = new_position.clamp(0, nil) return false if @position == new_position @position = new_position true end |
#handle_key(key, line_count, viewport_lines) ⇒ Boolean
Returns true if the cursor moved.
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 |
# File 'lib/tuile/component/list.rb', line 322 def handle_key(key, line_count, ) case key when *Keys::DOWN_ARROWS go_down_by(1, line_count) when *Keys::UP_ARROWS go_up_by(1) when *Keys::HOMES go_to_first when *Keys::ENDS_ go_to_last(line_count) when Keys::CTRL_U go_up_by( / 2) when Keys::CTRL_D go_down_by( / 2, line_count) else false end end |
#handle_mouse(line, event, line_count) ⇒ Boolean
Returns true if the event was handled.
345 346 347 348 349 350 351 |
# File 'lib/tuile/component/list.rb', line 345 def handle_mouse(line, event, line_count) if event. == :left go(line.clamp(nil, line_count - 1)) else false end end |