/usr/local/CPAN/Padre-Plugin-REPL/Padre/Plugin/REPL/Panel.pm
package Padre::Plugin::REPL::Panel;
use strict;
use warnings;
our $VERSION = '0.01';
use Padre::Wx;
use Padre::Util qw/_T/;
use Wx qw/WXK_UP WXK_DOWN/;
use base 'Wx::Panel';
sub new {
my $class = shift;
my $main = shift;
my $self = $class->SUPER::new( Padre::Current->main->bottom );
my $box = Wx::BoxSizer->new(Wx::wxVERTICAL);
my $bottom_box = Wx::BoxSizer->new(Wx::wxHORIZONTAL);
my $output = Wx::TextCtrl->new(
$self,
-1,
"",
Wx::wxDefaultPosition,
Wx::wxDefaultSize,
Wx::wxTE_READONLY
| Wx::wxTE_MULTILINE
| Wx::wxTE_DONTWRAP
| Wx::wxNO_FULL_REPAINT_ON_RESIZE,
);
$box->Add( $output, 2, Wx::wxGROW );
my $input = Wx::TextCtrl->new(
$self,
-1,
"",
Wx::wxDefaultPosition,
Wx::wxDefaultSize,
Wx::wxTE_PROCESS_ENTER
);
Wx::Event::EVT_TEXT_ENTER( $self, $input, \&Padre::Plugin::REPL::evaluate );
Wx::Event::EVT_CHAR( $input, \&Padre::Plugin::REPL::Panel::process_key );
my $button = Wx::Button->new( $self, -1, _T("Evaluate") );
Wx::Event::EVT_BUTTON( $self, $button, \&Padre::Plugin::REPL::evaluate );
$bottom_box->Add( $input, 1 );
$bottom_box->Add($button);
$box->Add( $bottom_box, 1, Wx::wxGROW );
$self->SetSizer($box);
Padre::Current->main->bottom->show($self);
return ( $input, $output );
}
sub process_key {
my ( $input, $event ) = @_;
my $code = $event->GetKeyCode;
if ( $code == WXK_UP ) {
Padre::Plugin::REPL::History::go_previous();
} elsif ( $code == WXK_DOWN ) {
Padre::Plugin::REPL::History::go_next();
}
$event->Skip();
}
sub gettext_label {
return "REPL";
}
1;