package Syntax::Kamelon::Wx::PluggableTextCtrl;
 

 
use strict;
 
use warnings;
 
use Carp;
 

 
use vars qw($VERSION);
 
$VERSION="0.01";
 

 
use Wx qw( :textctrl :font :colour );
 
use Wx::DND;
 
use Wx qw( wxTheClipboard );
 
use base qw( Wx::TextCtrl );
 
use Wx::Event qw( EVT_CHAR );
 

 
require Syntax::Kamelon::Wx::PluggableTextCtrl::KeyEchoes;
 
require Syntax::Kamelon::Wx::PluggableTextCtrl::UndoRedo;
 
require Syntax::Kamelon::Wx::PluggableTextCtrl::Highlighter;
 

 
my $defaultfont = [10, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, 0];
 

 
my $debug = 0;
 

-
if ($debug) {
 
   use Data::Dumper;
 
}
 

-
sub new {
 
   my $class = shift;
 
   my $self = $class->SUPER::new(@_);
 

 
   $self->{CALLBACK} = sub {};
-
   $self->{COMMANDS} = {
 
      'doremove' => \&DoRemove,
 
      'doreplace' => \&DoReplace,
 
      'dowrite' => \&DoWrite,
 
   };
 
   $self->{LISTENING} = 0;
 
   
 
   $self->{OVRMODE} = 0;
 
   $self->{PLUGINS} = [];
 

 
   $self->SetFontWx::Font->new(@$defaultfont) );
 
   EVT_CHAR($self, \&OnChar);
 

 
   return $self;
 
}
 

-
sub AppendText {
 
   my $self = shift;
-
   unless ($self->Broadcast('append'@_)) {
 
      $self->SUPER::Append(@_);
 
   }
 
}
 

-
sub Broadcast {
 
   my $self = shift;
 
   my $plugs = $self->{PLUGINS};
 
   my $flag = 0;
-
   foreach (@$plugs) {
-
      if ($_->Receive(@_)) {
 
         $flag = 1;
 
      }
 
   }
 
   return $flag;
 
}
 

 

 

 
1;
 
__END__