Curses-UI-POE

 view release on metacpan or  search on metacpan

examples/demo-widgets  view on Meta::CPAN

# Create the root object.
my $cui = new Curses::UI::POE ( 
    -clear_on_exit => 1, 
    -debug => $debug,
);

# Demo index
my $current_demo = 1;

# Demo windows
my %w = ();

# ----------------------------------------------------------------------
# Create a menu
# ----------------------------------------------------------------------

sub select_demo($;)
{
    my $nr = shift;
    $current_demo = $nr;
    $w{$current_demo}->focus;
}

my $file_menu = [
    { -label => 'Quit program',       -value => sub {exit(0)}        },
],

my $widget_demo_menu = [
    { -label => 'Label',              -value => sub{select_demo(1)}  },
    { -label => 'Buttons',            -value => sub{select_demo(2)}  },
    { -label => 'Checkbox',           -value => sub{select_demo(3)}  },
    { -label => 'Texteditor',         -value => sub{select_demo(4)}  },
    { -label => 'Listbox',            -value => sub{select_demo(5)}  },
    { -label => 'Popupmenu',          -value => sub{select_demo(6)}  },
    { -label => 'Progressbar',        -value => sub{select_demo(7)}  },
    { -label => 'Calendar',           -value => sub{select_demo(8)}  },
];

my $dialog_demo_menu = [
    { -label => 'Basic dialog',       -value => sub{select_demo(9)}  },
    { -label => 'Error dialog',       -value => sub{select_demo(10)} },
    { -label => 'Filebrowser dialog', -value => sub{select_demo(11)} },
    { -label => 'Progress dialog',    -value => sub{select_demo(12)} },
    { -label => 'Status dialog',      -value => sub{select_demo(13)} },
    { -label => 'Calendar dialog',    -value => sub{select_demo(14)} },
];

my $demo_menu = [
    { -label => 'Widget demos',       -submenu => $widget_demo_menu  },
    { -label => 'Dialog demos',       -submenu => $dialog_demo_menu  },
    { -label => '------------',       -value   => sub{}              },
    { -label => 'Next demo',          -value   => \&goto_next_demo   },
    { -label => 'Previous demo',      -value   => \&goto_prev_demo   },
];

my $menu = [
    { -label => 'File',               -submenu => $file_menu         },
    { -label => 'Select demo',        -submenu => $demo_menu         },
];

$cui->add('menu', 'Menubar', -menu => $menu);

# ----------------------------------------------------------------------
# Create the explanation window
# ----------------------------------------------------------------------

my $w0 = $cui->add(
    'w0', 'Window', 
    -border        => 1, 
    -y             => -1, 
    -height        => 3,
);
$w0->add('explain', 'Label', 
  -text => "CTRL+P: previous demo  CTRL+N: next demo  "
         . "CTRL+X: menu  CTRL+Q: quit"
);

# ----------------------------------------------------------------------
# Create the demo windows
# ----------------------------------------------------------------------

my %screens = (
    '1'  => 'Label',
    '2'  => 'Buttons',
    '3'  => 'Checkbox',
    '4'  => 'Texteditor',
    '5'  => 'Listbox',
    '6'  => 'Popupmenu',
    '7'  => 'Progressbar',
    '8'  => 'Calendar',
    '9'  => 'Basic dialog',
    '10' => 'Error dialog',
    '11' => 'Filebrowser dialog',
    '12' => 'Progress dialog',
    '13' => 'Status dialog',
    '14' => 'Calendar dialog',
);

my @screens = sort {$a<=>$b} keys %screens;

my %args = (
    -border       => 1, 
    -titlereverse => 0, 
    -padtop       => 2, 
    -padbottom    => 3, 
    -ipad         => 1,
);

while (my ($nr, $title) = each %screens)
{
    my $id = "window_$nr";
    $w{$nr} = $cui->add(
        $id, 'Window', 
        -title => "Curses::UI::POE demo: $title ($nr/" . @screens . ")",
        %args
    );
}

# ----------------------------------------------------------------------
# Label demo
# ----------------------------------------------------------------------



( run in 1.147 second using v1.01-cache-2.11-cpan-39bf76dae61 )