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 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::VBox;
	use Curses::Toolkit::Widget::HBox;
	use Curses::Toolkit::Widget::Button;
	use Curses::Toolkit::Widget::Border;
	use Curses::Toolkit::Widget::Entry;
	use Curses::Toolkit::Widget::HPaned;
	use Curses::Toolkit::Widget::VPaned;
	use Curses::Toolkit::Widget::Label;

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

    {

	my $window;
	$root->add_window( $window = Curses::Toolkit::Widget::Window->new()->set_name('window')->set_title("title 1") );

	my $label = Curses::Toolkit::Widget::Label->new->set_text(
		"This is <span weight='underline'>underlined text <span weight='bold'>underlined + bold</span> chunk </span> chunk"
	);
	my $label2 = Curses::Toolkit::Widget::Label->new->set_text(
		"This is <span fgcolor='black'>in black, <span bgcolor='red'>red background </span> and black again</span> chunk");
	my $label3 = Curses::Toolkit::Widget::Label->new->set_text(
		"This is a <span weight='bold'>bold <span weight='normal'>then normal</span> then back to bold</span> chunk");
	$window->add_widget( my $vbox =
			Curses::Toolkit::Widget::VBox->new()->pack_end( $label, { expand => 0 } )
			->pack_end( $label2, { expand => 0 } )->pack_end( $label3, { expand => 0 } ) );
	$window->set_coordinates(
		x1 => '15%', y1 => '55%',
		x2 => '85%',
		y2 => '85%',
	);

    }


	my $window2;
	$root->add_window( $window2 = Curses::Toolkit::Widget::Window->new()->set_name('window2')->set_title("title 2") );

	my $hpaned = Curses::Toolkit::Widget::HPaned->new();
	$hpaned->set_name('hpaned'), $hpaned->set_gutter_position(35);
	$window2->add_widget($hpaned);
	my $vpaned = Curses::Toolkit::Widget::VPaned->new();
	$vpaned->set_name('vpaned'), $vpaned->set_gutter_position(4);

	my $label_void1 = Curses::Toolkit::Widget::Label->new->set_text(' ');
	my $label_void2 = Curses::Toolkit::Widget::Label->new->set_text(' ');
	my $label1 = Curses::Toolkit::Widget::Label->new->set_text(' ');
	my $label2 = Curses::Toolkit::Widget::Label->new->set_text('You entered in the entry :');
	my $entry =
		Curses::Toolkit::Widget::Entry->new()->signal_connect( focus_changed => \&focus_changed, $label1 )
		->signal_connect( content_changed => \&content_changed, $label2 );

sub focus_changed {
	my ( $event, $widget, $label ) = @_;
	my $focus = $event->isa('Curses::Toolkit::Event::Focus::In') ? 'in' : 'out';
	$label->set_text("you just focused $focus of the entry");
	return;
}

sub content_changed {
	my ( $event, $widget, $label ) = @_;
	$label->set_text( "Entry changed : [" . $widget->get_text . "]" );
	return;
}


	$hpaned->add1(
        Curses::Toolkit::Widget::VBox->new()->pack_end(
			Curses::Toolkit::Widget::Label->new()->set_wrap_mode('never')->set_text("Please enter your name"),
			{ expand => 0 }
			)->pack_end(
			$entry,
			{ expand => 0 }
			)->pack_end(
            $label_void1,
			{ expand => 1 }
			)->pack_end(
			$label2,
			{ expand => 0 }
			)->pack_end(
            $label_void1,
			{ expand => 1 }
			)->pack_end(
			$label1,
			{ expand => 0 }
	        )
    );
	$hpaned->add2(
		$vpaned->add1(
			Curses::Toolkit::Widget::Label->new()->set_text('An other label')
				->set_name('label2'),
			)->add2(
			Curses::Toolkit::Widget::VBox->new()
                ->pack_end( Curses::Toolkit::Widget::Label->new()->set_text('What ?! yet another Label ?!')->set_justify('center'), { expand => 1 } )
                ->pack_end( Curses::Toolkit::Widget::HBox->new()->pack_end(Curses::Toolkit::Widget::Button->new_with_label('A Button'), { expand => 1 }), { expand => 0 } )
			)
	);
	$window2->set_coordinates(
		x1 => '5%', y1 => '5%',
		x2 => '95%',
		y2 => '40%',
	);

	POE::Kernel->run();
}