The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Tickit;

use Tickit::Widgets qw( GridBox Frame HBox Entry Static Button CheckButton RadioButton );
Tickit::Style->load_style( <<'EOF' );
Entry:focus {
   bg: "blue";
   b: 1;
}

Frame {
   linetype: "single";
}
Frame:focus-child {
   frame-fg: "red";
}

CheckButton:focus {
   check-bg: "blue";
}

RadioButton:focus {
   tick-bg: "blue";
}
EOF

my $gridbox = Tickit::Widget::GridBox->new(
   style => {
      row_spacing => 1,
      col_spacing => 2,
   },
);

foreach my $row ( 0 .. 2 ) {
   $gridbox->add( $row, 0, Tickit::Widget::Static->new( text => "Entry $row" ) );
   $gridbox->add( $row, 1, Tickit::Widget::Entry->new, col_expand => 1 );
}

{
   $gridbox->add( 3, 0, Tickit::Widget::Static->new( text => "Buttons" ) );
   $gridbox->add( 3, 1, Tickit::Widget::Frame->new(
      child => my $hbox = Tickit::Widget::HBox->new( spacing => 2 ),
   ) );

   foreach my $label (qw( One Two Three )) {
      $hbox->add( Tickit::Widget::Button->new( label => $label, on_click => sub {} ), expand => 1 );
   }
}

{
   $gridbox->add( 4, 0, Tickit::Widget::Static->new( text => "Checks" ) );
   $gridbox->add( 4, 1, Tickit::Widget::Frame->new(
      child => my $hbox = Tickit::Widget::HBox->new( spacing => 2 ),
   ) );

   foreach ( 0 .. 2 ) {
      $hbox->add( Tickit::Widget::CheckButton->new( label => "Check $_" ) );
   }
}

{
   $gridbox->add( 5, 0, Tickit::Widget::Static->new( text => "Radios" ) );
   $gridbox->add( 5, 1, Tickit::Widget::Frame->new(
      child => my $hbox = Tickit::Widget::HBox->new( spacing => 2 ),
   ) );

   my $group = Tickit::Widget::RadioButton::Group->new;
   foreach ( 0 .. 2 ) {
      $hbox->add( Tickit::Widget::RadioButton->new( label => "Radio $_", group => $group ) );
   }
}

Tickit->new( root => $gridbox )->run;