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.