Cleanup some unused code
All checks were successful
timw4mail/php-kilo/pipeline/head This commit looks good
All checks were successful
timw4mail/php-kilo/pipeline/head This commit looks good
This commit is contained in:
parent
3b6cd21070
commit
5329378b93
@ -65,8 +65,8 @@ class Editor {
|
||||
private function __construct()
|
||||
{
|
||||
$this->statusMsgTime = time();
|
||||
$this->cursor = Position::default();
|
||||
$this->offset = Position::default();
|
||||
$this->cursor = Position::new();
|
||||
$this->offset = Position::new();
|
||||
|
||||
[$this->screenRows, $this->screenCols] = Terminal::getWindowSize();
|
||||
|
||||
@ -172,6 +172,13 @@ class Editor {
|
||||
// ! Row Operations
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Cursor X to Render X
|
||||
*
|
||||
* @param Row $row
|
||||
* @param int $cx
|
||||
* @return int
|
||||
*/
|
||||
protected function rowCxToRx(Row $row, int $cx): int
|
||||
{
|
||||
$rx = 0;
|
||||
@ -187,6 +194,13 @@ class Editor {
|
||||
return $rx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render X to Cursor X
|
||||
*
|
||||
* @param Row $row
|
||||
* @param int $rx
|
||||
* @return int
|
||||
*/
|
||||
protected function rowRxToCx(Row $row, int $rx): int
|
||||
{
|
||||
$cur_rx = 0;
|
||||
@ -773,68 +787,71 @@ class Editor {
|
||||
|
||||
protected function moveCursor(string $key): void
|
||||
{
|
||||
$row = $this->rows[$this->cursor->y];
|
||||
$x = $this->cursor->x;
|
||||
$y = $this->cursor->y;
|
||||
$row = $this->rows[$y];
|
||||
|
||||
switch ($key)
|
||||
{
|
||||
case KeyType::ARROW_LEFT:
|
||||
if ($this->cursor->x !== 0)
|
||||
if ($x !== 0)
|
||||
{
|
||||
$this->cursor->x--;
|
||||
$x--;
|
||||
}
|
||||
else if ($this->cursor->y > 0)
|
||||
else if ($y > 0)
|
||||
{
|
||||
$this->cursor->y--;
|
||||
$this->cursor->x = $this->rows[$this->cursor->y]->size;
|
||||
// Beginning of a line, go to end of previous line
|
||||
$y--;
|
||||
$x = $this->rows[$y]->size - 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case KeyType::ARROW_RIGHT:
|
||||
if ($row && $this->cursor->x < $row->size)
|
||||
if ($row && $x < $row->size)
|
||||
{
|
||||
$this->cursor->x++;
|
||||
$x++;
|
||||
}
|
||||
else if ($row && $this->cursor->x === $row->size)
|
||||
else if ($row && $x === $row->size)
|
||||
{
|
||||
$this->cursor->y++;
|
||||
$this->cursor->x = 0;
|
||||
$y++;
|
||||
$x = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case KeyType::ARROW_UP:
|
||||
if ($this->cursor->y !== 0)
|
||||
if ($y !== 0)
|
||||
{
|
||||
$this->cursor->y--;
|
||||
$y--;
|
||||
}
|
||||
break;
|
||||
|
||||
case KeyType::ARROW_DOWN:
|
||||
if ($this->cursor->y < $this->numRows)
|
||||
if ($y < $this->numRows)
|
||||
{
|
||||
$this->cursor->y++;
|
||||
$y++;
|
||||
}
|
||||
break;
|
||||
|
||||
case KeyType::PAGE_UP:
|
||||
$this->cursor->y = ($this->cursor->y > $this->screenRows)
|
||||
? $this->cursor->y - $this->screenRows
|
||||
$y = ($y > $this->screenRows)
|
||||
? $y - $this->screenRows
|
||||
: 0;
|
||||
break;
|
||||
|
||||
case KeyType::PAGE_DOWN:
|
||||
$this->cursor->y = ($this->cursor->y + $this->screenRows < $this->numRows)
|
||||
? $this->cursor->y + $this->screenRows
|
||||
$y = ($y + $this->screenRows < $this->numRows)
|
||||
? $y + $this->screenRows
|
||||
: $this->numRows;
|
||||
break;
|
||||
|
||||
case KeyType::HOME_KEY:
|
||||
$this->cursor->x = 0;
|
||||
$x = 0;
|
||||
break;
|
||||
|
||||
case KeyType::END_KEY:
|
||||
if ($this->cursor->y < $this->numRows)
|
||||
if ($y < $this->numRows)
|
||||
{
|
||||
$this->cursor->x = $this->rows[$this->cursor->y]->size - 1;
|
||||
$x = $this->rows[$y]->size - 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -842,10 +859,17 @@ class Editor {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
if ($this->cursor->x > $row->size)
|
||||
if ($x > $row->size)
|
||||
{
|
||||
$this->cursor->x = $row->size;
|
||||
$x = $row->size;
|
||||
}
|
||||
if ($y > $this->screenRows)
|
||||
{
|
||||
$y = $this->screenRows;
|
||||
}
|
||||
|
||||
$this->cursor->x = $x;
|
||||
$this->cursor->y = $y;
|
||||
}
|
||||
|
||||
public function processKeypress(): ?string
|
||||
|
@ -1,56 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Aviat\Kilo;
|
||||
|
||||
class Event {
|
||||
use Traits\ConstList;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Valid Events
|
||||
// ------------------------------------------------------------------------
|
||||
public const INPUT_KEY = 'INPUT_KEY';
|
||||
public const PAGE_CHANGE = 'PAGE_CHANGE';
|
||||
public const MOVE_CURSOR = 'MOVE_CURSOR';
|
||||
public const QUIT_ATTEMPT = 'QUIT_ATTEMPT';
|
||||
|
||||
// Mapping of events to handlers
|
||||
private static array $subscribeMap = [];
|
||||
|
||||
public static function fire(string $eventName, mixed $value): void
|
||||
{
|
||||
static::validateEvent($eventName);
|
||||
|
||||
if (array_key_exists($eventName, static::$subscribeMap))
|
||||
{
|
||||
foreach (static::$subscribeMap[$eventName] as $fn)
|
||||
{
|
||||
$fn($value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function on(string $eventName, callable $fn): void
|
||||
{
|
||||
static::validateEvent($eventName);
|
||||
|
||||
if ( ! array_key_exists($eventName, static::$subscribeMap))
|
||||
{
|
||||
static::$subscribeMap[$eventName] = [];
|
||||
}
|
||||
|
||||
if ( ! in_array($fn, static::$subscribeMap[$eventName], TRUE))
|
||||
{
|
||||
static::$subscribeMap[$eventName][] = $fn;
|
||||
}
|
||||
}
|
||||
|
||||
private static function validateEvent(string $eventName): void
|
||||
{
|
||||
$validEvents = self::getConstList();
|
||||
|
||||
if ( ! array_key_exists($eventName, $validEvents))
|
||||
{
|
||||
throw new \InvalidArgumentException("Invalid event '{$eventName}'. Event const must exist in Aviat\\Kilo\\Event.");
|
||||
}
|
||||
}
|
||||
}
|
@ -5,13 +5,8 @@ namespace Aviat\Kilo;
|
||||
class Position {
|
||||
private function __construct(public int $x, public int $y) {}
|
||||
|
||||
public static function new(int $x, int $y): self
|
||||
public static function new(int $x = 0, int $y = 0): self
|
||||
{
|
||||
return new Position($x, $y);
|
||||
}
|
||||
|
||||
public static function default(): self
|
||||
{
|
||||
return new Position(0, 0);
|
||||
}
|
||||
}
|
@ -36,7 +36,9 @@ class Row {
|
||||
return $self;
|
||||
}
|
||||
|
||||
private function __construct() {}
|
||||
private function __construct() {
|
||||
// Private in favor of ::new static function
|
||||
}
|
||||
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
|
@ -1,27 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Aviat\Kilo\Tests;
|
||||
|
||||
use Aviat\Kilo\Event;
|
||||
use InvalidArgumentException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class EventTest extends TestCase {
|
||||
public function testRequiresValidEvent(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
Event::on('badEventName', fn () => null);
|
||||
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
Event::fire('badEventName', []);
|
||||
}
|
||||
|
||||
public function testBindAndFire(): void
|
||||
{
|
||||
$fn = static function($value = false) {
|
||||
static::assertTrue($value);
|
||||
};
|
||||
Event::on(Event::INPUT_KEY, $fn);
|
||||
Event::fire(Event::INPUT_KEY, TRUE);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user