The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use SDLx::App;

use lib 'lib';
use SDLx::Widget::Menu;

my $app = SDLx::App->new(
    w   => 800,
    h   => 600,
    eoq => 1,
);


my $show_menu = 1;
my $menu_event_id;
my $menu = SDLx::Widget::Menu->new( topleft => [100, 230] )->items(
    'Some Option'       => sub { },
    'Open Submenu'      => \&open_submenu,
    'Some Other Option' => sub { },
    'Quit'              => sub { $show_menu = 0; },
);

my $show_submenu = 0;
my $submenu = SDLx::Widget::Menu->new( topleft => [100, 530] )->items(
     'Item 1' => sub { },
     'Item 2' => sub { },
     'Item 3' => sub { },
     'Back'   => sub { $show_submenu = 0 },
);

open_menu();

$app->add_show_handler(
    sub {
        $app->draw_rect( undef, undef );
        $menu->render($app);
        $submenu->render($app) if $show_submenu;
        $app->update;
    }
);

$app->run;
exit;

sub open_submenu {
    $submenu->selected( undef );
    $show_submenu = 1;

    $app->remove_event_handler( $menu_event_id );

    my $submenu_id;
    $submenu_id = $app->add_event_handler( sub {
            $submenu->event_hook( $_[0] );

            if ($show_submenu == 0) {
                $app->remove_event_handler( $submenu_id );
                open_menu();
            }
    });
}

sub open_menu {
    $menu->selected( undef );

    $menu_event_id = $app->add_event_handler( sub {
        $menu->event_hook( $_[0] );
        $app->stop if $show_menu == 0;
    });
}