| Devel-ebug-Wx documentation | Contained in the Devel-ebug-Wx distribution. |
Devel::ebug::Wx - GUI interface for your (d)ebugging needs
# 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;
Devel::ebug::Wx is a GUI front end to Devel::ebug.
The core is a publisher/subscriber wrapper around Devel::ebug (Devel::ebug::Wx::Publisher) plus a plugin system for defining menu commands and keyboard bindings (Devel::ebug::Wx::Command::*) and views (Devel::ebug::Wx::View::*).
The wxWidgets Advanced User Interface (AUI) is used, so it is possible to dock/undock and arrange views.
command is just an action (coderef) with a string id command description ties commands to the CommandManager to create menus
for example for code-viewing, gui management, view management allow enabling/disabling services, commands, views auto-disable commands/views/services with clashing identifiers
allow a configuration view to configure multiple objects (by explicit registration)
better editing interface better debugging; edge cases still present, esp. at load time rethink container view interface and the whole concept of multiviews
visual feedback in the main window disable commands/etc when they do not make sense
command returns a (subscribable) handle that can be used to poll/listen to changes explict use of update_ui is an hack!
Devel::ebug, ebug_wx, Wx, ebug
Mattia Barbon, <mbarbon@cpan.org>
Copyright (C) 2007, Mattia Barbon
This program is free software; you can redistribute it or modify it under the same terms as Perl itself.
| Devel-ebug-Wx documentation | Contained in the Devel-ebug-Wx distribution. |
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__