#
# This file is part of Games-Risk
#
# This software is Copyright (c) 2008 by Jerome Quelin.
#
# This is free software, licensed under:
#
#   The GNU General Public License, Version 3, June 2007
#
use 5.010;
use strict;
use warnings;

package Games::Risk::GUI;
# ABSTRACT: gui multiplexer poe session
$Games::Risk::GUI::VERSION = '4.000';
use POE qw{ Loop::Tk };
use MooseX::POE;
use Readonly;

use Games::Risk::Logger qw{ debug };

Readonly my $K  => $poe_kernel;


# -- initialization

sub START {
    # prettyfying tk app.
    # see http://www.perltk.org/index.php?option=com_content&task=view&id=43&Itemid=37
    $poe_main_window->optionAdd('*BorderWidth' => 1);

    # register aliases
    $K->alias_set('gui');
}

sub STOP { debug( "GUI shutdown\n" ); }


# -- public events

#
# this event will track all the events not caught specifically, and
# forward them to all the gui sessions.
#
event _default => sub {
    my ($sender, $event, $args) = @_[SENDER, ARG0, ARG1];
    return if $sender eq $poe_kernel;
    $K->post($_, $event, @$args) foreach qw{ main cards continents gameover move-armies };
};

no Moose;
__PACKAGE__->meta->make_immutable;
1;

__END__

=pod

=head1 NAME

Games::Risk::GUI - gui multiplexer poe session

=head1 VERSION

version 4.000

=head1 DESCRIPTION

C<Games::Risk> uses various windows to display the game: the board of
course, but also the window displaying the cards owned by the player,
and some others.

Depending on the event, the controller needs to send events to a given
window, or even to more than one. But it is clearly not the controller's
job to know how the GUI works!

Therefore, C<Games::Risk::GUI> is a poe session that will receive all
the events fired by the controller, and forward them to the other
windows. Of course, the controller now fires its events only to the
C<Games::Risk::GUI> session.

This poe session answers to the C<gui> L<POE> alias.

=for Pod::Coverage START STOP

=head1 AUTHOR

Jerome Quelin

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2008 by Jerome Quelin.

This is free software, licensed under:

  The GNU General Public License, Version 3, June 2007

=cut