Skip to content

Commit 5bfa6ca

Browse files
committed
PR change requests
1 parent 12607bf commit 5bfa6ca

File tree

5 files changed

+112
-97
lines changed

5 files changed

+112
-97
lines changed

examples/checkable-item.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
use PhpSchool\CliMenu\CliMenu;
4+
use PhpSchool\CliMenu\Builder\CliMenuBuilder;
5+
use PhpSchool\CliMenu\MenuItem\CheckableItem;
6+
7+
require_once(__DIR__ . '/../vendor/autoload.php');
8+
9+
$itemCallable = function (CliMenu $menu) {
10+
/** @var CheckableItem $item */
11+
$item = $menu->getSelectedItem();
12+
13+
$item->check();
14+
15+
$menu->redraw();
16+
};
17+
18+
$menu = (new CliMenuBuilder)
19+
->setTitle('Select a Language')
20+
->addSubMenu('Compiled', function (CliMenuBuilder $b) use($itemCallable) {
21+
$b->setTitle('Compiled Languages')
22+
->addCheckableItem('Rust', $itemCallable)
23+
->addCheckableItem('C++', $itemCallable)
24+
->addCheckableItem('Go', $itemCallable)
25+
->addCheckableItem('Java', $itemCallable)
26+
->addCheckableItem('C', $itemCallable)
27+
;
28+
})
29+
->addSubMenu('Interpreted', function (CliMenuBuilder $b) use($itemCallable) {
30+
$b->setTitle('Interpreted Languages')
31+
->setUncheckedMarker('[○] ')
32+
->setCheckedMarker('[●] ')
33+
->addCheckableItem('PHP', $itemCallable)
34+
->addCheckableItem('Javascript', $itemCallable)
35+
->addCheckableItem('Ruby', $itemCallable)
36+
->addCheckableItem('Python', $itemCallable)
37+
;
38+
})
39+
->build();
40+
41+
$menu->open();

examples/toggleable-item.php

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/Builder/CliMenuBuilder.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
use PhpSchool\CliMenu\Action\GoBackAction;
77
use PhpSchool\CliMenu\Exception\InvalidShortcutException;
88
use PhpSchool\CliMenu\MenuItem\AsciiArtItem;
9+
use PhpSchool\CliMenu\MenuItem\CheckableItem;
910
use PhpSchool\CliMenu\MenuItem\LineBreakItem;
1011
use PhpSchool\CliMenu\MenuItem\MenuItemInterface;
1112
use PhpSchool\CliMenu\MenuItem\MenuMenuItem;
1213
use PhpSchool\CliMenu\MenuItem\SelectableItem;
13-
use PhpSchool\CliMenu\MenuItem\ToggleableItem;
1414
use PhpSchool\CliMenu\CliMenu;
1515
use PhpSchool\CliMenu\MenuItem\SplitItem;
1616
use PhpSchool\CliMenu\MenuItem\StaticItem;
@@ -131,13 +131,13 @@ public function addItems(array $items) : self
131131
return $this;
132132
}
133133

134-
public function addToggleableItem(
134+
public function addCheckableItem(
135135
string $text,
136136
callable $itemCallable,
137137
bool $showItemExtra = false,
138138
bool $disabled = false
139139
) : self {
140-
$this->addMenuItem(new ToggleableItem($text, $itemCallable, $showItemExtra, $disabled));
140+
$this->addMenuItem(new CheckableItem($text, $itemCallable, $showItemExtra, $disabled));
141141

142142
return $this;
143143
}
@@ -407,16 +407,16 @@ public function setSelectedMarker(string $marker) : self
407407
return $this;
408408
}
409409

410-
public function setUntoggledMarker(string $marker) : self
410+
public function setUncheckedMarker(string $marker) : self
411411
{
412-
$this->style->setUntoggledMarker($marker);
412+
$this->style->setUncheckedMarker($marker);
413413

414414
return $this;
415415
}
416416

417-
public function setToggledMarker(string $marker) : self
417+
public function setCheckedMarker(string $marker) : self
418418
{
419-
$this->style->setToggledMarker($marker);
419+
$this->style->setCheckedMarker($marker);
420420

421421
return $this;
422422
}

src/MenuItem/ToggleableItem.php renamed to src/MenuItem/CheckableItem.php

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use PhpSchool\CliMenu\MenuStyle;
77
use PhpSchool\CliMenu\Util\StringUtil;
88

9-
class ToggleableItem implements MenuItem\MenuItemInterface
9+
class CheckableItem implements MenuItem\MenuItemInterface
1010
{
1111
/**
1212
* @var callable
@@ -31,7 +31,7 @@ class ToggleableItem implements MenuItem\MenuItemInterface
3131
/**
3232
* @var bool
3333
*/
34-
private $toggled = false;
34+
private $checked = false;
3535

3636
public function __construct(
3737
string $text,
@@ -71,10 +71,14 @@ public function setText(string $text) : void
7171

7272
/**
7373
* The output text for the item
74+
*
75+
* @param MenuStyle $style
76+
* @param bool $selected Currently unused in this class
77+
* @return array
7478
*/
75-
public function getRows(MenuStyle $style, bool $toggled = false) : array
79+
public function getRows(MenuStyle $style, bool $selected = false) : array
7680
{
77-
$marker = sprintf("%s", $style->getMarkerToggled($this->toggled));
81+
$marker = sprintf("%s", $this->checked ? $style->getCheckedMarker() : $style->getUncheckedMarker());
7882

7983
$length = $style->getDisplaysExtra()
8084
? $style->getContentWidth() - (mb_strlen($style->getItemExtra()) + 2)
@@ -83,7 +87,7 @@ public function getRows(MenuStyle $style, bool $toggled = false) : array
8387
$rows = explode(
8488
"\n",
8589
StringUtil::wordwrap(
86-
sprintf('%s %s', $marker, $this->text),
90+
sprintf('%s%s', $marker, $this->text),
8791
$length,
8892
sprintf("\n%s", str_repeat(' ', mb_strlen($marker)))
8993
)
@@ -131,13 +135,32 @@ public function hideItemExtra() : void
131135
$this->showItemExtra = false;
132136
}
133137

134-
public function setToggled(bool $toggled)
138+
/**
139+
* Toggles checked state
140+
*/
141+
public function check()
142+
{
143+
$this->checked = !$this->checked;
144+
}
145+
146+
/**
147+
* Sets checked state to true
148+
*/
149+
public function setChecked()
150+
{
151+
$this->checked = true;
152+
}
153+
154+
/**
155+
* Sets checked state to false
156+
*/
157+
public function setUnchecked()
135158
{
136-
$this->toggled = $toggled;
159+
$this->checked = false;
137160
}
138161

139-
public function getToggled(): bool
162+
public function getChecked(): bool
140163
{
141-
return $this->toggled;
164+
return $this->checked;
142165
}
143166
}

src/MenuStyle.php

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ class MenuStyle
7272
/**
7373
* @var string
7474
*/
75-
private $toggledMarker;
75+
private $checkedMarker;
7676

7777
/**
7878
* @var string
7979
*/
80-
private $untoggledMarker;
80+
private $uncheckedMarker;
8181

8282
/**
8383
* @var string
@@ -160,25 +160,25 @@ class MenuStyle
160160
* @var array
161161
*/
162162
private static $defaultStyleValues = [
163-
'fg' => 'white',
164-
'bg' => 'blue',
165-
'width' => 100,
166-
'paddingTopBottom' => 1,
167-
'paddingLeftRight' => 2,
168-
'margin' => 2,
169-
'selectedMarker' => '',
170-
'unselectedMarker' => '',
171-
'toggledMarker' => '[] ',
172-
'untoggledMarker' => '[] ',
173-
'itemExtra' => '',
174-
'displaysExtra' => false,
175-
'titleSeparator' => '=',
176-
'borderTopWidth' => 0,
177-
'borderRightWidth' => 0,
163+
'fg' => 'white',
164+
'bg' => 'blue',
165+
'width' => 100,
166+
'paddingTopBottom' => 1,
167+
'paddingLeftRight' => 2,
168+
'margin' => 2,
169+
'selectedMarker' => '',
170+
'unselectedMarker' => '',
171+
'checkedMarker' => '[] ',
172+
'uncheckedMarker' => '[ ] ',
173+
'itemExtra' => '',
174+
'displaysExtra' => false,
175+
'titleSeparator' => '=',
176+
'borderTopWidth' => 0,
177+
'borderRightWidth' => 0,
178178
'borderBottomWidth' => 0,
179-
'borderLeftWidth' => 0,
180-
'borderColour' => 'white',
181-
'marginAuto' => false,
179+
'borderLeftWidth' => 0,
180+
'borderColour' => 'white',
181+
'marginAuto' => false,
182182
];
183183

184184
/**
@@ -241,8 +241,8 @@ public function __construct(Terminal $terminal = null)
241241
$this->setMargin(self::$defaultStyleValues['margin']);
242242
$this->setSelectedMarker(self::$defaultStyleValues['selectedMarker']);
243243
$this->setUnselectedMarker(self::$defaultStyleValues['unselectedMarker']);
244-
$this->setToggledMarker(self::$defaultStyleValues['toggledMarker']);
245-
$this->setUntoggledMarker(self::$defaultStyleValues['untoggledMarker']);
244+
$this->setCheckedMarker(self::$defaultStyleValues['checkedMarker']);
245+
$this->setUncheckedMarker(self::$defaultStyleValues['uncheckedMarker']);
246246
$this->setItemExtra(self::$defaultStyleValues['itemExtra']);
247247
$this->setDisplaysExtra(self::$defaultStyleValues['displaysExtra']);
248248
$this->setTitleSeparator(self::$defaultStyleValues['titleSeparator']);
@@ -264,8 +264,8 @@ public function hasChangedFromDefaults() : bool
264264
$this->margin,
265265
$this->selectedMarker,
266266
$this->unselectedMarker,
267-
$this->toggledMarker,
268-
$this->untoggledMarker,
267+
$this->checkedMarker,
268+
$this->uncheckedMarker,
269269
$this->itemExtra,
270270
$this->displaysExtra,
271271
$this->titleSeparator,
@@ -573,38 +573,30 @@ public function getMarker(bool $selected) : string
573573
return $selected ? $this->selectedMarker : $this->unselectedMarker;
574574
}
575575

576-
public function getToggledMarker() : string
576+
public function getCheckedMarker() : string
577577
{
578-
return $this->toggledMarker;
578+
return $this->checkedMarker;
579579
}
580580

581-
public function setToggledMarker(string $marker) : self
581+
public function setCheckedMarker(string $marker) : self
582582
{
583-
$this->toggledMarker = $marker;
583+
$this->checkedMarker = $marker;
584584

585585
return $this;
586586
}
587587

588-
public function getUntoggledMarker() : string
588+
public function getUncheckedMarker() : string
589589
{
590-
return $this->untoggledMarker;
590+
return $this->uncheckedMarker;
591591
}
592592

593-
public function setUntoggledMarker(string $marker) : self
593+
public function setUncheckedMarker(string $marker) : self
594594
{
595-
$this->untoggledMarker = $marker;
595+
$this->uncheckedMarker = $marker;
596596

597597
return $this;
598598
}
599599

600-
/**
601-
* Get the correct toggled marker for the item
602-
*/
603-
public function getMarkerToggled(bool $toggled) : string
604-
{
605-
return $toggled ? $this->toggledMarker : $this->untoggledMarker;
606-
}
607-
608600
public function setItemExtra(string $itemExtra) : self
609601
{
610602
$this->itemExtra = $itemExtra;

0 commit comments

Comments
 (0)