/usr/local/CPAN/Devel-ebug-Wx/Devel/ebug/Wx/View/Base.pm


package Devel::ebug::Wx::View::Base;

use strict;
use base qw(Class::Accessor::Fast Devel::ebug::Wx::Plugin::Listener::Base);

__PACKAGE__->mk_accessors( qw(wxebug _has_destroy) );

# not yet in wxPerl
sub EVT_DESTROY($$$) { $_[0]->Connect( $_[1], -1, &Wx::wxEVT_DESTROY, $_[2] ) }

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

    unless( $self->_has_destroy ) {
        $self->_has_destroy( 1 );
        EVT_DESTROY( $self, $self, \&_on_destroy );
    }
}

# FIXME will likely need to be generalized
sub is_managed   { !$_[0]->GetParent->isa( 'Wx::AuiNotebook' ) }
sub is_multiview { 0 }
sub default_size { ( 350, 250 ) }

# save/restore view layout
sub set_layout_state { }
sub get_layout_state {
    my( $self ) = @_;

    return { class => ref( $self ),
             };
}

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

    $self->_setup_destroy;
    $self->wxebug->view_manager_service->register_view( $self );
}

sub subscribe_ebug {
    my( $self, $event, $handler ) = @_;

    $self->_setup_destroy;
    $self->add_subscription( $self->ebug, $event, $handler );
}

sub _on_destroy {
    my( $self ) = @_;
    $self->delete_subscriptions;
    $self->wxebug->view_manager_service->unregister_view( $self );
}

sub ebug { $_[0]->wxebug->ebug }

1;