Skip to content

Commit 38f70bf

Browse files
committed
Register all existing Widgets and their Layout classes
1 parent 8c50681 commit 38f70bf

File tree

14 files changed

+104
-1
lines changed

14 files changed

+104
-1
lines changed

lib/Terminal/Widgets/Input/Button.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ use Terminal::Capabilities;
44
constant Uni1 = Terminal::Capabilities::SymbolSet::Uni1;
55

66
use Terminal::Widgets::TextContent;
7+
use Terminal::Widgets::Layout;
78
use Terminal::Widgets::Input::SimpleClickable;
89

910

1011
class Terminal::Widgets::Input::Button
1112
does Terminal::Widgets::Input::SimpleClickable {
13+
method layout-class() { Terminal::Widgets::Layout::Button }
14+
1215
#| Compute minimum content width for requested style and attributes
1316
method min-width(:$locale!, :%style!, :$label = '') {
1417
my $bw = %style<border-width>;
@@ -42,3 +45,7 @@ class Terminal::Widgets::Input::Button
4245
self.refresh-value(:$print);
4346
}
4447
}
48+
49+
50+
# Register Button as a buildable widget type
51+
Terminal::Widgets::Input::Button.register;

lib/Terminal/Widgets/Input/Checkbox.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
# ABSTRACT: A single checkbox, optionally labeled
22

33
use Terminal::Widgets::TextContent;
4+
use Terminal::Widgets::Layout;
45
use Terminal::Widgets::Input::Boolean;
56

67

78
#| A single optionally labeled checkbox
89
class Terminal::Widgets::Input::Checkbox
910
does Terminal::Widgets::Input::Boolean {
11+
method layout-class() { Terminal::Widgets::Layout::Checkbox }
12+
1013
#| Compute minimum content width for requested style and attributes
1114
method min-width(:$locale!, :$context!, :$label = '') {
1215
my @boxes = self.checkboxes($context.caps);
@@ -32,3 +35,7 @@ class Terminal::Widgets::Input::Checkbox
3235
span-tree($box-span, |(pad-span(1), |@label-spans if $label))
3336
}
3437
}
38+
39+
40+
# Register Checkbox as a buildable widget type
41+
Terminal::Widgets::Input::Checkbox.register;

lib/Terminal/Widgets/Input/Menu.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# ABSTRACT: Simple single-selection menu
22

3+
use Terminal::Widgets::Layout;
34
use Terminal::Widgets::Events;
45
use Terminal::Widgets::Input;
56
use Terminal::Widgets::Widget;
@@ -16,6 +17,8 @@ class Terminal::Widgets::Input::Menu
1617
has %.icons;
1718
has %!hotkey;
1819

20+
method layout-class() { Terminal::Widgets::Layout::Menu }
21+
1922
#| Do basic input TWEAK, then compute hotkey hash
2023
submethod TWEAK() {
2124
self.Terminal::Widgets::Input::TWEAK;
@@ -161,3 +164,7 @@ class Terminal::Widgets::Input::Menu
161164
self.set-selected($!selected);
162165
}
163166
}
167+
168+
169+
# Register Menu as a buildable widget type
170+
Terminal::Widgets::Input::Menu.register;

lib/Terminal/Widgets/Input/RadioButton.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
# ABSTRACT: A single radio button, optionally labeled
22

33
use Terminal::Widgets::TextContent;
4+
use Terminal::Widgets::Layout;
45
use Terminal::Widgets::Input::Boolean;
56

67

78
#| A single optionally labeled radio button
89
class Terminal::Widgets::Input::RadioButton
910
is Terminal::Widgets::Input::GroupedBoolean {
11+
method layout-class() { Terminal::Widgets::Layout::RadioButton }
12+
1013
#| Compute minimum content width for requested style and attributes
1114
method min-width(:$locale!, :$context!, :$label = '') {
1215
my @buttons = self.buttons($context.caps);
@@ -32,3 +35,7 @@ class Terminal::Widgets::Input::RadioButton
3235
span-tree($button-span, |(pad-span(1), |@label-spans if $label))
3336
}
3437
}
38+
39+
40+
# Register RadioButton as a buildable widget type
41+
Terminal::Widgets::Input::RadioButton.register;

lib/Terminal/Widgets/Input/Text.rakumod

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ use Terminal::LineEditor::DuospaceInput;
44
use Terminal::LineEditor::RawTerminalInput;
55

66
use Terminal::Widgets::Utils::Color;
7+
use Terminal::Widgets::TextContent;
8+
use Terminal::Widgets::Layout;
79
use Terminal::Widgets::Events;
810
use Terminal::Widgets::Input;
911
use Terminal::Widgets::Widget;
10-
use Terminal::Widgets::TextContent;
1112

1213

1314
#| Single-line text entry field with history tracking and mappable keys
@@ -30,6 +31,9 @@ class Terminal::Widgets::Input::Text
3031
has Str:D $.prompt-string = '>';
3132
has Str:D $.disabled-string = '';
3233

34+
35+
method layout-class() { Terminal::Widgets::Layout::TextInput }
36+
3337
# Text input specific gist flags
3438
method gist-flags() {
3539
|self.Terminal::Widgets::Input::gist-flags,
@@ -310,3 +314,7 @@ class Terminal::Widgets::Input::Text
310314
self.full-refresh(self.history-entry);
311315
}
312316
}
317+
318+
319+
# Register Input::Text as a buildable widget type
320+
Terminal::Widgets::Input::Text.register;

lib/Terminal/Widgets/Input/ToggleButton.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ use Terminal::Capabilities;
44
constant Uni1 = Terminal::Capabilities::SymbolSet::Uni1;
55

66
use Terminal::Widgets::TextContent;
7+
use Terminal::Widgets::Layout;
78
use Terminal::Widgets::Input::Boolean;
89

910

1011
#| A simple toggle button (looks like a button, acts like a checkbox)
1112
class Terminal::Widgets::Input::ToggleButton
1213
does Terminal::Widgets::Input::Boolean {
14+
method layout-class() { Terminal::Widgets::Layout::ToggleButton }
15+
1316
#| Compute minimum content width for requested style and attributes
1417
method min-width(:$locale!, :%style!, :$label = '') {
1518
my $bw = %style<border-width>;
@@ -34,3 +37,7 @@ class Terminal::Widgets::Input::ToggleButton
3437
!! span-tree(|@spans)
3538
}
3639
}
40+
41+
42+
# Register ToggleButton as a buildable widget type
43+
Terminal::Widgets::Input::ToggleButton.register;

lib/Terminal/Widgets/PlainText.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use Text::MiscUtils::Layout;
44

55
use Terminal::Widgets::Utils::Color;
66
use Terminal::Widgets::TextContent;
7+
use Terminal::Widgets::Layout;
78
use Terminal::Widgets::SpanBuffer;
89

910

@@ -14,6 +15,8 @@ class Terminal::Widgets::PlainText
1415
has Str:D $.c = '';
1516
has Bool:D $.wrap = False;
1617

18+
method layout-class() { Terminal::Widgets::Layout::PlainText }
19+
1720
# Setters that also trigger display refresh
1821
method set-text(Str:D $!text) { self.full-refresh }
1922
method set-color(Str:D $!c) { self.full-refresh }
@@ -30,3 +33,7 @@ class Terminal::Widgets::PlainText
3033
$start ?? @lines[$start..*] !! @lines
3134
}
3235
}
36+
37+
38+
# Register PlainText as a buildable widget type
39+
Terminal::Widgets::PlainText.register;

lib/Terminal/Widgets/RichText.rakumod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# ABSTRACT: A text widget that has clickable lines / a selected line.
22

3+
use Terminal::Widgets::Layout;
34
use Terminal::Widgets::Events;
45
use Terminal::Widgets::Focusable;
56
use Terminal::Widgets::SpanWrappingAndHighlighting;
@@ -9,6 +10,8 @@ class Terminal::Widgets::RichText
910
does Terminal::Widgets::Focusable {
1011
has &.process-click;
1112

13+
method layout-class() { Terminal::Widgets::Layout::RichText }
14+
1215
submethod TWEAK(:$wrap) {
1316
# The following is a workaround of https://github.com/rakudo/rakudo/issues/5599
1417
$!wrap = NoWrap;
@@ -71,3 +74,7 @@ class Terminal::Widgets::RichText
7174
self.full-refresh;
7275
}
7376
}
77+
78+
79+
# Register RichText as a buildable widget type
80+
Terminal::Widgets::RichText.register;

lib/Terminal/Widgets/ScrollBar.rakumod

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# ABSTRACT: Roles and classes for scrollbars
22

3+
use Terminal::Widgets::Layout;
34
use Terminal::Widgets::Events;
45
use Terminal::Widgets::Widget;
56
use Terminal::Widgets::Focusable;
@@ -61,6 +62,8 @@ does Terminal::Widgets::Focusable {
6162
class Terminal::Widgets::HScrollBar
6263
is Terminal::Widgets::Widget
6364
does Terminal::Widgets::Scrollbar {
65+
method layout-class() { Terminal::Widgets::Layout::HScrollBar }
66+
6467
method h-arrow-scroll-inc() {
6568
my $ui-prefs = self.terminal.ui-prefs;
6669
my $h-invert = $ui-prefs<scroll-invert-horizontal> ?? -1 !! +1;
@@ -242,6 +245,8 @@ class Terminal::Widgets::HScrollBar
242245
class Terminal::Widgets::VScrollBar
243246
is Terminal::Widgets::Widget
244247
does Terminal::Widgets::Scrollbar {
248+
method layout-class() { Terminal::Widgets::Layout::VScrollBar }
249+
245250
method v-arrow-scroll-inc() {
246251
my $ui-prefs = self.terminal.ui-prefs;
247252
my $v-invert = $ui-prefs<scroll-invert-vertical> ?? -1 !! +1;
@@ -416,3 +421,8 @@ class Terminal::Widgets::VScrollBar
416421
self.full-refresh;
417422
}
418423
}
424+
425+
426+
# Register both ScrollBars as buildable widget types
427+
Terminal::Widgets::HScrollBar.register;
428+
Terminal::Widgets::VScrollBar.register;

lib/Terminal/Widgets/TreeView.rakumod

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# ABSTRACT: A text widget that has clickable lines / a selected line.
22

3+
4+
use Terminal::Widgets::Layout;
35
use Terminal::Widgets::Events;
46
use Terminal::Widgets::Focusable;
57
use Terminal::Widgets::SpanWrappingAndHighlighting;
@@ -41,6 +43,8 @@ role Terminal::Widgets::RichTreeViewNode
4143
class Terminal::Widgets::TreeView
4244
does Terminal::Widgets::SpanWrappingAndHighlighting
4345
does Terminal::Widgets::Focusable {
46+
method layout-class() { Terminal::Widgets::Layout::TreeView }
47+
4448
my class NodeProperties {
4549
has $.id;
4650
has Bool $.expanded is rw;
@@ -397,3 +401,7 @@ class Terminal::Widgets::TreeView
397401
self.full-refresh;
398402
}
399403
}
404+
405+
406+
# Register TreeView as a buildable widget type
407+
Terminal::Widgets::TreeView.register;

0 commit comments

Comments
 (0)