Skip to content

Commit e596780

Browse files
committed
Support lookup from layout-class to widget-class
1 parent 6ef2a54 commit e596780

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

lib/Terminal/Widgets/WidgetRegistry.rakumod

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ my class RegistryEntry {
1313
my Lock:D $registry-lock .= new; #= Lock controlling access to registry
1414
my %registry; #= Primary registry: moniker to RegistryEntry
1515
my %layout-class; #= Cache: builder-name to layout-class
16+
my %widget-class{Any}; #= Cache: layout-class to widget-class
1617

1718

1819
#| Registry for Widget subclasses and matching Layout classes
1920
role Terminal::Widgets::WidgetRegistry {
21+
#| Register a widget class and related details
2022
method register-widget(Str:D :$moniker!, Str:D :$builder-name!,
2123
Any:U :$widget-class!, Any:U :$layout-class!) {
2224
my $entry = RegistryEntry.new(:$moniker, :$builder-name,
@@ -25,9 +27,13 @@ role Terminal::Widgets::WidgetRegistry {
2527
$registry-lock.protect: {
2628
%registry{$moniker} = $entry;
2729
%layout-class{$builder-name} = $layout-class;
30+
%widget-class{$layout-class} = $widget-class;
2831
}
2932
}
3033

34+
35+
### BASIC LOOKUPS
36+
3137
method registry-entry(Str:D $moniker) {
3238
$registry-lock.protect: { %registry{$moniker} }
3339
}
@@ -36,6 +42,13 @@ role Terminal::Widgets::WidgetRegistry {
3642
$registry-lock.protect: { %layout-class{$builder-name} }
3743
}
3844

45+
method widget-for-layout($layout-class) {
46+
$registry-lock.protect: { %widget-class{$layout-class} }
47+
}
48+
49+
50+
### EXISTENCE CHECKS
51+
3952
method widget-exists(Str:D $moniker) {
4053
$registry-lock.protect: { %registry{$moniker}:exists }
4154
}
@@ -44,6 +57,13 @@ role Terminal::Widgets::WidgetRegistry {
4457
$registry-lock.protect: { %layout-class{$builder-name}:exists }
4558
}
4659

60+
method layout-exists($layout-class) {
61+
$registry-lock.protect: { %widget-class{$layout-class}:exists }
62+
}
63+
64+
65+
### KNOWN TYPE ITERABLES
66+
4767
method known-widgets() {
4868
$registry-lock.protect: { %registry.keys.sort }
4969
}
@@ -52,6 +72,17 @@ role Terminal::Widgets::WidgetRegistry {
5272
$registry-lock.protect: { %layout-class.keys.sort }
5373
}
5474

75+
method known-layout-classes() {
76+
$registry-lock.protect: { %widget-class.keys }
77+
}
78+
79+
method known-widget-classes() {
80+
$registry-lock.protect: { %widget-class.values }
81+
}
82+
83+
84+
### REGISTRY ENTRY ACCESSOR HELPERS
85+
5586
method builder-name(Str:D $moniker) {
5687
my $entry = self.registry-entry($moniker);
5788
$entry ?? $entry.builder-name !! Nil

0 commit comments

Comments
 (0)