c27e90583183417915a9524a5f3f0b9b66121126
[catagits/Reaction.git] / lib / Reaction / UI / Widget.pm
1 package Reaction::UI::Widget;
2
3 use Reaction::Class;
4 use aliased 'Reaction::UI::ViewPort';
5 use aliased 'Reaction::UI::View';
6 use aliased 'Reaction::UI::LayoutSet';
7
8 class Widget which {
9
10   has 'viewport' => (isa => ViewPort, is => 'ro'); # required?
11   has 'view' => (isa => View, is => 'ro', required => 1);
12   has 'layout_set' => (isa => LayoutSet, is => 'ro', required => 1);
13
14   implements 'render' => as {
15     my ($self, $rctx) = @_;
16     my $args = { self => $self };
17     $args->{viewport} = $self->viewport if $self->has_viewport;
18     $self->render_widget($rctx, $args);
19   };
20
21   implements 'render_viewport' => as {
22     my ($self, $rctx, $args) = @_;
23     my $vp = $args->{'_'};
24     $self->view->render_viewport($rctx, $vp);
25   };
26
27 };
28
29 1;
30
31 =head1 NAME
32
33 Reaction::UI::Widget
34
35 =head1 DESCRIPTION
36
37 =head1 AUTHORS
38
39 See L<Reaction::Class> for authors.
40
41 =head1 LICENSE
42
43 See L<Reaction::Class> for the license.
44
45 =cut