Devel-ebug-Wx

 view release on metacpan or  search on metacpan

lib/Devel/ebug/Wx.pm  view on Meta::CPAN

package Devel::ebug::Wx;

use Wx;

use strict;
use base qw(Wx::Frame Devel::ebug::Wx::Service::Base Class::Accessor::Fast);

our $VERSION = '0.09';

use Wx qw(:aui wxOK);
use Wx::Event qw(EVT_CLOSE);

use Devel::ebug::Wx::ServiceManager;
use Devel::ebug::Wx::ServiceManager::Holder;
use Devel::ebug::Wx::Publisher;

__PACKAGE__->mk_ro_accessors( qw(ebug) );

sub service_name { 'ebug_wx' }
sub initialized  { 1 }

sub new {
    my( $class, $args ) = @_;
    my $self = $class->SUPER::new( undef, -1, 'wxebug', [-1, -1], [-1, 500] );

    EVT_CLOSE( $self, \&_on_close );

    $self->service_manager( Devel::ebug::Wx::ServiceManager->new );
    $self->service_manager->add_service( Devel::ebug::Wx::Publisher->new ); # FIXME
    $self->service_manager->add_service( $self );
    $self->{ebug} = $self->ebug_publisher_service;

    $self->service_manager->initialize;
    $self->service_manager->load_configuration;

    $self->ebug->add_subscriber( 'load_program', $self, '_pgm_load' );
    $self->ebug->add_subscriber( 'finished', $self, '_pgm_stop' );

    $self->SetMenuBar( $self->command_manager_service->get_menu_bar );

    $self->ebug->load_program( $args->{argv} );

    return $self;
}

sub _on_close {
    my( $self ) = @_;

    $self->service_manager->finalize( $self );
    $self->Destroy;
}

sub _pgm_load {
    my( $self, $ebug, $event, %params ) = @_;

    $self->SetTitle( $params{filename} );
}

sub _pgm_stop {
    my( $self, $ebug, $event, %params ) = @_;

    Wx::MessageBox( "Program terminated", "wxebug", wxOK, $self );
}

1;

__END__

=head1 NAME

Devel::ebug::Wx - GUI interface for your (d)ebugging needs

=head1 SYNOPSIS

  # it's easier to use the 'ebug_wx' script
  my $app = Wx::SimpleApp->new;
  my $wx = Devel::ebug::Wx->new( { argv => \@ARGV } );
  $wx->Show;
  $app->MainLoop;

=head1 DESCRIPTION

L<Devel::ebug::Wx> is a GUI front end to L<Devel::ebug>.

The core is a publisher/subscriber wrapper around L<Devel::ebug>
(L<Devel::ebug::Wx::Publisher>) plus a plugin system for defining menu
commands and keyboard bindings (L<Devel::ebug::Wx::Command::*>) and
views (L<Devel::ebug::Wx::View::*>).

The wxWidgets Advanced User Interface (AUI) is used, so it is possible
to dock/undock and arrange views.

=head1 TODO

=over 4

=item * make a saner interface for plugins

command is just an action (coderef) with a string id



( run in 1.251 second using v1.01-cache-2.11-cpan-63c85eba8c4 )