The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.