Skip to content

Commit 4648eb1

Browse files
committed
Add drawing example
1 parent 733ed9d commit 4648eb1

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

examples/draw.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
use PhpSchool\CliMenu\Action\ExitAction;
4+
use PhpSchool\CliMenu\CliMenu;
5+
use PhpSchool\CliMenu\Builder\CliMenuBuilder;
6+
use PhpSchool\CliMenu\MenuItem\SplitItem;
7+
8+
require_once(__DIR__ . '/../vendor/autoload.php');
9+
10+
$cols = 60;
11+
$rows = 20;
12+
13+
$paint = function (CliMenu $menu) {
14+
$item = $menu->getSelectedItem();
15+
if ($item->getText() === ' ') {
16+
$item->setText('');
17+
} else {
18+
$item->setText(' ');
19+
}
20+
};
21+
22+
$clear = function (CliMenu $menu) {
23+
foreach ($menu->getItems() as $item) {
24+
if ($item instanceof SplitItem && $item->canSelect()) {
25+
foreach ($item->getItems() as $cell) {
26+
if ($cell->canSelect() && $cell->getText() !== ' ') {
27+
$cell->setText(' ');
28+
}
29+
}
30+
}
31+
}
32+
$menu->redraw(false);
33+
};
34+
35+
$builder = (new CliMenuBuilder)
36+
->disableDefaultItems()
37+
->setWidth($cols + 10)
38+
->setBorder(0)
39+
->setMargin(2)
40+
->setPadding(2, 5)
41+
->setSelectedMarker('')
42+
->setUnselectedMarker('')
43+
->addAsciiArt('Draw your own art !')
44+
->addLineBreak();
45+
46+
for ($i = 0; $i < $rows; $i++) {
47+
$builder->addSplitItem(function() use ($cols, $paint) {
48+
$this->setGutter(0);
49+
for ($j = 0; $j < $cols; $j++) {
50+
$this->addItem(' ', $paint);
51+
}
52+
});
53+
}
54+
55+
$builder->addSplitItem(function() {
56+
$this->addStaticItem('Enter: Toggle draw')
57+
->addStaticItem('C: Clear screen')
58+
->addStaticItem('X: Exit');
59+
});
60+
61+
$menu = $builder->build();
62+
63+
$menu->addCustomControlMappings(['C' => $clear, 'X' => new ExitAction]);
64+
$menu->open();

0 commit comments

Comments
 (0)