The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
#
# This file is part of Curses-Toolkit
#
# This software is copyright (c) 2011 by Damien "dams" Krotkine.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#

use strict;
use warnings;

use FindBin qw( $Bin );
use lib qw(../../../lib);

open STDERR, '>>/dev/null';

main() unless caller;

sub main {
    use POE::Component::Curses;

    use Curses::Toolkit::Widget::Window;
    use Curses::Toolkit::Widget::Label;
    use Curses::Toolkit::Widget::HBox;
    use Curses::Toolkit::Widget::VBox;
    use Curses::Toolkit::Widget::Border;
    use Curses::Toolkit::Widget::Button;
    use Curses::Toolkit::Widget::HProgressBar;
    use Curses::Toolkit::Widget::VProgressBar;

    my $root = POE::Component::Curses->spawn;

    my $hbar;
    my $vbar;
    {
        my $window1 =
          Curses::Toolkit::Widget::Window->new->set_name('window')->set_title("manual progress bar")
              ->set_coordinates( x1 => 0, y1 => 0, x2 => '100%', y2 => 30 );
        $root->add_window($window1);

        $window1->add_widget(
          Curses::Toolkit::Widget::VBox->new
          ->pack_end(
            Curses::Toolkit::Widget::HBox->new
            ->pack_end(
              Curses::Toolkit::Widget::Border->new
              ->add_widget(
                Curses::Toolkit::Widget::VBox->new
                ->pack_end(
                  Curses::Toolkit::Widget::Label->new->set_text('Click to decrease'),
                  { expand => 0 },
                )
                ->pack_end(
                  Curses::Toolkit::Widget::Button->new_with_label('-')->signal_connect( clicked => 
                      sub {
                          $hbar->set_position( $hbar->get_position - 1 );
                          $vbar->set_position( $hbar->get_position - 1 );
                      }),
                  { expand => 0 },
                )
              ),
              { expand => 0 },
            )
            ->pack_end(
              Curses::Toolkit::Widget::VBox->new
              ->pack_end(
                $hbar  = Curses::Toolkit::Widget::HProgressBar->new,
                { expand => 1 },
              )
               ->pack_end(
                 $vbar  = Curses::Toolkit::Widget::VProgressBar->new,
                 { expand => 1 },
               ),
              { expand => 1 },
            )
            ->pack_end(
              Curses::Toolkit::Widget::Border->new
              ->add_widget(
                Curses::Toolkit::Widget::VBox->new
                ->pack_end(
                  Curses::Toolkit::Widget::Label->new->set_text('Click to increase'),
                  { expand => 0 },
                )
                ->pack_end(
                  Curses::Toolkit::Widget::Button->new_with_label('+')->signal_connect( clicked =>
                      sub {
                          $hbar->set_position( $hbar->get_position + 1 );
                          $vbar->set_position( $hbar->get_position + 1 );
                      }),
                  { expand => 0 },
                )
              ),
              { expand => 0 },
            ),
            { expand => 1 },
          )
          ->pack_end(
			Curses::Toolkit::Widget::Button->new_with_label('Exit')->signal_connect( clicked => sub {exit} ),
			{ expand => 0 }
          )
        );
    }
    POE::Kernel->run();
}