App-GUI-GoLP
view release on metacpan or search on metacpan
['Plaintext (.cells)' => '*.cells'],
]
);
if ( $open->execute ) {
if ( load_game($open->fileName) ) {
# start paused
$window->menu->uncheck('play');
$window->Timer->stop();
$play = 0;
$ticks = 0;
# exit edit mode if on
$window->menu->uncheck('edit');
$edit_mode = 0;
($filebase, $dirs, $suffix) = fileparse($open->fileName, '.rle', '.cells');
$window->text("GoLP | " . $filebase . $suffix);
my $rule = to_bs_string($birth, $survival);
$window->menu->check($rule);
$window->repaint();
}
else {
message('ERROR: Could not load ' . $open->fileName);
}
}
}],
['Save' => sub {
my ( $window, $menu ) = @_;
my $save_file = ($filebase // '') . ($suffix // '');
my $save = Prima::Dialog::SaveDialog-> new(
fileName => $save_file,
defaultExt => '.rle',
filter => [
['Run-length encoded (.rle)' => '*.rle'],
['Plaintext (.cells)' => '*.cells'],
]
);
if ( $save->execute ) {
if ( save_game($save->fileName) ) {
($filebase, $dirs, $suffix) = fileparse($save->fileName, '.rle', '.cells');
$window->text("GoLP | " . $filebase . $suffix);
}
else {
message('ERROR: Could not save ' . $save->fileName);
}
}
}],
[],
['~Exit', 'Ctrl+X', '^X', sub { shift-> close } ],
]],
[ '~Options' => [
[ 'play' => '~Play/Pause' => 'Space' => kb::Space => sub {
my ( $window, $menu ) = @_;
unless ( $edit_mode ) {
# prevent accidental unpausing if editing
$play = $window->menu->toggle($menu);
$play ? $window->Timer->start() : $window->Timer->stop();
}
} ],
['*Grid' => '~Grid' => sub {
my ( $window, $menu ) = @_;
$grid = $window->menu->toggle($menu);
$window->repaint();
} ],
['*Grow' => '~Autogrow' => sub {
my ( $window, $menu ) = @_;
$autogrow = $window->menu->toggle($menu);
} ],
['*Status' => 'S~tatus line' => sub {
my ( $window, $menu ) = @_;
$status = $window->menu->toggle($menu);
$window->repaint();
} ],
[ '~Snapshot board' => 'F5' => kb::F5 => sub {
my $snapname = to_png($game->get_grid());
if ( -e $snapname ) {
message("Snapshot written to $snapname");
}
else {
message("ERROR - snapshot not created");
}
} ],
[ 'L~oop delay' => [
[ '(s_zero' => '0 ms' => sub { $_[0]->Timer->timeout(0); } ],
[ 'ms_25' => '25 ms' => sub { $_[0]->Timer->timeout(25); } ],
[ 'ms_50' => '50 ms' => sub { $_[0]->Timer->timeout(50); } ],
[ 'ms_100' => '100 ms' => sub { $_[0]->Timer->timeout(100); } ],
[ '*ms_250' => '250 ms' => sub { $_[0]->Timer->timeout(250); } ],
[ 'ms_500' => '500 ms' => sub { $_[0]->Timer->timeout(500); } ],
[ 'one_s' => '1 s' => sub { $_[0]->Timer->timeout(1000); } ],
[ 'ms_2500' => '2.5 s' => sub { $_[0]->Timer->timeout(2500); } ],
[ 'five_s' => '5 s' => sub { $_[0]->Timer->timeout(5000); } ],
[ 'ten_s)' => '10 s' => sub { $_[0]->Timer->timeout(10000); } ],
]],
[ '~Rules' => [
[ '*(B3/S23' => "Conway's Life (B3/S23)" => sub { handle_rule($_[0], 'B3/S23'); } ],
[ 'B357/S1358' => "Amoeba (B357/S1358)" => sub { handle_rule($_[0], 'B357/S1358'); } ],
[ 'B345/S4567' => "Assimilation (B345/S4567)" => sub { handle_rule($_[0], 'B345/S4567'); } ],
[ 'B34/S456' => "Bacteria (B34/S456)" => sub { handle_rule($_[0], 'B34/S456'); } ],
[ 'B3/S45678' => "Coral (B3/S45678)" => sub { handle_rule($_[0], 'B3/S45678'); } ],
[ 'B3678/S34678' => "Day and Night (B3678/S34678)" => sub { handle_rule($_[0], 'B3678/S34678'); } ],
[ 'B3/S12' => "Flock (B3/S12)" => sub { handle_rule($_[0], 'B3/S12'); } ],
[ 'B3578/S24678' => "Geology (B3578/S24678)" => sub { handle_rule($_[0], 'B3578/S24678'); } ],
[ 'B1/S1' => "Gnarl (B1/S1)" => sub { handle_rule($_[0], 'B1/S1'); } ],
[ 'B36/S23' => "HighLife (B36/S23)" => sub { handle_rule($_[0], 'B36/S23'); } ],
[ 'B38/S238' => "HoneyLife (B38/S238)" => sub { handle_rule($_[0], 'B38/S238'); } ],
[ 'B3/S012345678' => "Life without death (B3/S012345678)" => sub { handle_rule($_[0], 'B3/S012345678'); } ],
[ 'B2/S0' => "Live Free or Die (B2/S0)" => sub { handle_rule($_[0], 'B2/S0'); } ],
[ 'B345/S5' => "Long Life (B345/S5)" => sub { handle_rule($_[0], 'B345/S5'); } ],
[ 'B3/S13' => "LowLife (B3/S13)" => sub { handle_rule($_[0], 'B3/S13'); } ],
[ 'B3/S12345' => "Maze (B3/S12345)" => sub { handle_rule($_[0], 'B3/S12345'); } ],
[ 'B3/S1234' => "Mazectric (B3/S1234)" => sub { handle_rule($_[0], 'B3/S1234'); } ],
[ 'B368/S245' => "Morley (B368/S245)" => sub { handle_rule($_[0], 'B368/S245'); } ],
[ 'B38/S23' => "Pedestrian Life (B38/S23)" => sub { handle_rule($_[0], 'B38/S23'); } ],
[ 'B234/S' => "Persian rug (B234/S)" => sub { handle_rule($_[0], 'B234/S'); } ],
( run in 0.647 second using v1.01-cache-2.11-cpan-e1769b4cff6 )