The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

POE::Component::XUL - Easier use of XUL::Node when using POE

DESCRIPTION

POE::Component::XUL uses POE::XUL::SessionManager and POE::XUL::Session in a slightly different way to allow poe callbacks to your session for XUL application calls.

SYNOPSIS

use POE qw( Component::XUL );
use XUL::Node;
use XUL::Node::Application;

use base 'XUL::Node::Application';

POE::Session->create(
	inline_states => {
		_start => sub {
			my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];

			POE::Component::XUL->spawn({
				port => 8001,
				root => '/usr/local/xul-node',
				apps => {
					# a callback
					Test => $session->callback("client_start"),
					# or a sub
					Test2 => sub {
						# code for app Test2 here
						# see client_start below
					},
				},
			});
		},
		client_start => sub {
			my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
			# the label object is kept in the heap to use it on callbacks
			return Window(
				VBox(FILL, $heap->{label} = Label(value => 'select item from list'),
					ListBox(FILL,
						(map { ListItem(label => "item #$_") } 1..10),
						Select => $session->callback('listbox_select')
					),
				),
			);
		},
		listbox_select => sub {
			my ($kernel, $heap, $session, $event) = (@_[KERNEL, HEAP, SESSION], $_[ARG1]->[0]);
			print "[".$event->{session}."] picked #".($event->{selectedIndex}+1)."\n";
			# example of doing 2 or more things in request
			# set the label text and make it change colors
			my @colors = ('red','blue','green','yellow','white','black');
			return $heap->{label}->value("you selected #".($event->{selectedIndex}+1)).
				$heap->{label}->style('color:'.$colors[(int(rand($#colors)))]);		
		},
	},
);

$poe_kernel->run();

DESCRIPTION

POE::Component::XUL allows you to use poe callbacks in your XUL::Node apps. In its current state, XUL::Node doesn't give you a way to use POE easily in your apps, but with this component you will have the control you need.

AUTHOR

David Davis, <xantus@cpan.org>

THANKS

Rocco Caputo, for pushing me. :)

SEE ALSO

perl(1), XUL::Node, XUL::Node::Application.