Games-Risk
view release on metacpan or search on metacpan
lib/Games/Risk/Tk/Main.pm view on Meta::CPAN
# create the action bar at the top of the window, with the various
# action buttons that a player can press when it's her turn.
#
sub _build_action_bar {
my $self = shift;
my $session = $self->_session;
# create the toolbar
my $tbmain = $self->_w('toolbar');
my $tb = $mw->ToolBar(-movable => 0, -in=>$tbmain );
$self->_set_w('tbactions', $tb);
# the toolbar widgets
my @actions = (
[ T('Game state: ') ],
[ T('place armies'), 'lab_step_place_armies' ],
[ T('undo all'), 'place_armies_redo', 'actreload22' ],
[ T('ready for attack'), 'place_armies_done', 'navforward22' ],
[ T('attack'), 'lab_step_attack' ],
[ T('attack again'), 'attack_redo', 'actredo22' ],
[ T('consolidate'), 'attack_done', 'navforward22' ],
[ T('move armies'), 'lab_step_move_armies' ],
[ T('turn finished'), 'move_armies_done', 'playstop22' ],
);
# create the widgets
foreach my $item ( @actions ) {
my ($label, $action, $icon) = @$item;
if ( defined $icon ) {
# regular toolbar widgets
my $widget = $tb->Button(
-image => $icon,
-tip => $label,
-command => $session->postback( "_$action" ),
);
$self->_action($action)->add_widget($widget);
next;
}
# label
my $widget = $tb->Label( -text => $label );
next unless $action;
$widget->configure( disabled );
$self->_set_w( $action => $widget );
}
}
#
# $main->_build_menubar;
#
# create the window's menu.
#
sub _build_menubar {
my $self = shift;
my $s = $self->_session;
# no tear-off menus
$mw->optionAdd('*tearOff', 'false');
my $menubar = $mw->Menu;
$mw->configure(-menu => $menubar );
$self->_set_w('menubar', $menubar);
# menu game
my @mnu_game = (
[ 'new', 'filenew16', 'Ctrl+N', T('~New game') ],
#[ 'load', 'fileopen16', 'Ctrl+O', T('~Load game') ],
[ 'close', 'fileclose16', 'Ctrl+W', T('~Close game') ],
[ '---' ],
[ 'quit', 'actexit16', 'Ctrl+Q', T('~Quit') ],
);
$self->_build_menu('game', T('~Game'), @mnu_game);
# menu view
my @mnu_view = (
[ 'show_cards', $mw->Photo(-file=>$SHAREDIR->file('icons', '16', 'cards.png')), 'F5', T('~Cards') ],
[ 'show_continents', $mw->Photo(-file=>$SHAREDIR->file('icons', '16', 'continents.png')), 'F6', T('C~ontinents') ],
);
$self->_build_menu('view', T('~View'), @mnu_view);
# menu actions
my @mnu_actions = (
[ 'place_armies_redo', 'actreload16', 'u', T('~Undo all') ],
[ 'place_armies_done', 'navforward16', 'a', T('~Attack') ],
[ 'attack_redo', 'actredo16', 'r', T('~Re-attack') ],
[ 'attack_done', 'navforward16', 'c', T('~Consolidate') ],
[ 'move_armies_done', 'playstop16', 'f', T('~Finish turn') ],
);
$self->_build_menu('actions', T('~Actions'), @mnu_actions);
# menu help
my @mnu_help = (
[ 'help', $mw->Photo(-file=>$SHAREDIR->file('icons', '16', 'help.png')), 'F1', T('~Help') ],
[ 'about', $mw->Photo(-file=>$SHAREDIR->file('icons', '16', 'about.png')), '', T('~About') ],
);
$self->_build_menu('help', T('~Help'), @mnu_help);
}
#
# $self->_build_menu( $mnuname, $mnulabel, @submenus );
#
# Create the menu $label, with all the @submenus.
# @submenus is a list of [$name, $icon, $accel, $label] items.
# Store the menu items under the name menu_$mnuname_$name.
#
sub _build_menu {
my ($self, $mnuname, $mnulabel, @submenus) = @_;
my $menubar = $self->_w('menubar');
my $s = $self->_session;
my $menu = $menubar->cascade(-label => $mnulabel);
foreach my $item ( @submenus ) {
my ($name, $icon, $accel, $label) = @$item;
# separators are easier
if ( $name eq '---' ) {
$menu->separator;
next;
}
( run in 1.664 second using v1.01-cache-2.11-cpan-524268b4103 )