The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Devel::ebug::Wx::Command::Views;

use strict;
use Devel::ebug::Wx::Plugin qw(:plugin);

sub commands : Command {
    my( $class, $wxebug ) = @_;
    my @commands;

    my $viewmanager = $wxebug->view_manager_service;
    foreach my $view ( $viewmanager->views ) {
        my $tag = $view->tag;
        my $cmd = sub {
            my( $wx ) = @_;

            # show if present, recreate if not present
            if( $viewmanager->has_view( $tag ) ) {
                if( $viewmanager->is_shown( $tag ) ) {
                    $viewmanager->hide_view( $tag );
                } else {
                    $viewmanager->show_view( $tag );
                }
            } else {
                my $instance = $view->new( $wx, $wx );
                $viewmanager->create_pane_and_update
                  ( $instance, { name    => $instance->tag, # for multiviews
                                 float   => 1,
                                 caption => $instance->description,
                                 } );
            }
        };
        my $update_ui = sub {
            my( $wx, $event ) = @_;

            $event->Check( $viewmanager->is_shown( $tag ) );
        };
        push @commands, 'show_' . $tag,
             { sub         => $cmd,
               menu        => 'view',
               update_menu => $update_ui,
               checkable   => 1,
               label       => sprintf( "Show %s", $view->description ),
               priority    => 200,
               };
    }

    return @commands;
}

1;