TUI-Vision
view release on metacpan or search on metacpan
xt/02StatusLineAndMenu/15MenuExpanded.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use Test::Exception;
use constant ManualTestsEnabled => exists($ENV{MANUAL_TESTS})
&& !$ENV{AUTOMATED_TESTING}
&& !$ENV{NONINTERACTIVE_TESTING};
BEGIN {
use_ok 'TUI::App';
use_ok 'TUI::Objects';
use_ok 'TUI::Drivers';
use_ok 'TUI::Views';
use_ok 'TUI::Menus';
use_ok 'TUI::toolkit';
}
BEGIN {
package TMyApp;
use TUI::App; # TApplication
use TUI::Objects; # Window section (TRect)
use TUI::Drivers; # Hotkey
use TUI::Views; # Event (cmQuit)
use TUI::Menus; # Status line and menu
use TUI::toolkit;
# For custom commands, you must define a command code.
# It is recommended to use values > 1000 to avoid conflicts with the standard
# codes.
use constant {
cmList => 1002, # File list
cmAbout => 1001, # Show About
};
# For a menu, you must overwrite C<initMenuBar>
extends TApplication;
# We want to use a console resolution like MS DOS.
sub BUILDARGS {
my $args = shift->SUPER::BUILDARGS( @_ ) || return;
$args->{bounds} = new_TRect( 0, 0, 80, 25 );
return $args;
}
sub initStatusLine {
my ( $class, $r ) = @_;
$r->{a}{y} = $r->{b}{y} - 1;
return
new_TStatusLine( $r,
new_TStatusDef( 0, 0xFFFF ) +
new_TStatusItem( '~Alt+X~ Exit', kbAltX, cmQuit ) +
new_TStatusItem( '~F10~ Menu', kbF10, cmMenu ) +
new_TStatusItem( '~F1~ Help', kbF1, cmHelp )
);
}
# You can also split menu entries using ScalarRef's.
# Whether you nest them or split them is a matter of taste.
# You can insert a blank line using C<newLine>.
# If a dialog box opens for a menu item, it is advisable to write C<...>
# after the name.
sub initMenuBar {
my ( $class, $r ) = @_;
$r->{b}{y} = $r->{a}{y} + 1;
return
new_TMenuBar( $r,
new_TSubMenu( '~F~ile', hcNoContext ) +
new_TMenuItem( '~L~ist', cmList, kbF2, hcNoContext, 'F2' ) +
newLine +
new_TMenuItem( 'E~x~it', cmQuit, kbAltX, hcNoContext, 'Alt-X' ) +
new_TSubMenu( '~H~elp', hcNoContext ) +
new_TMenuItem( '~A~bout', cmAbout, hcNoContext )
);
}
$INC{"TMyApp.pm"} = 1;
}
use_ok 'TMyApp';
SKIP: {
skip 'Manual test not enabled', 2 unless ManualTestsEnabled();
my $myApp = TMyApp->new();
isa_ok( $myApp, TApplication );
lives_ok { $myApp->run() } 'TMyApp object executed successfully';
}
done_testing;
( run in 0.910 second using v1.01-cache-2.11-cpan-5511b514fd6 )