Wx::Event::EVT_COMMAND($panel, -1, $ID_OUR_EVENT, \&ourHandler)
sub ourHandler
{
my( $frame, $event ) = @_;
my $text = $event->GetData;
my $textvalue = Wx::GetTextFromUser($text, "some header", wxOK | wxCANCEL,$self ) ;
#---> what to do here with the dialog text.
}
####
share (my $clientline); # in the main code, referenced here for clarity.
my $event = new Wx::PlThreadEvent( -1, $ID_OUR_EVENT, $clientline);
Wx::PostEvent($panel, $event );
####
local (*HIS_IN ,*HIS_OUT, *HIS_ERR, $childpid);
use IPC::Open3;
$childpid=open3( *HIS_IN, *HIS_OUT, *HIS_OUT,$command);
####
print HIS_IN $clientline . "\n";
####
use Wx::Perl::ProcessStream qw( :everything );
# setup the stream handlers
EVT_WXP_PROCESS_STREAM_STDOUT ( wxperl_window, \&evt_process_stdout_err );
EVT_WXP_PROCESS_STREAM_STDERR ( wxperl_window, \&evt_process_stdout_err );
EVT_WXP_PROCESS_STREAM_EXIT ( wxperl_window, \&evt_process_exit );
EVT_WXP_PROCESS_STREAM_MAXLINES ( wxperl_window, \&evt_process_maxlines );
the handlers (here both the childs stdout & sterr are handled in the same handler)
sub evt_process_stdout_err
{
my( $self, $event ) = @_;
$event->Skip(1);
my $process = $event->GetProcess;
my $clientline = $event->GetLine;
$clientline=~s/"//g;
$clientline=~s/\s+$//g;
# string off all quotes and trailing whitespace
# show it in the test window
$detailsInfo->AppendText("$clientline\n");
# if the output line ends with identified line end, then it is about to be a prompt
if ($clientline=~m/($specialeol)$/)
{
my $textvalue = Wx::GetTextFromUser($clientline, "pre exit prompt", "",$self) ;
$process->WriteProcess("$textvalue\n");
}
}
sub evt_process_exit
{
my ($self, $event) = @_;
$event->Skip(1);
my $process = $event->GetProcess;
my $line = $event->GetLine;
my @buffers = @{ $process->GetStdOutBuffer };
my @errors = @{ $process->GetStdErrBuffer };
my $exitcode = $process->GetExitCode;
$process->Destroy;
}
the startup (this replaces all the thread goo)
my $proc1 = Wx::Perl::ProcessStream::Process->new($command, 'somelabel', wxperl_window)->Run;