001 package Syntax::Kamelon::Wx::PluggableTextCtrl;
002 
003 use strict;
004 use warnings;
005 use Carp;
006 
007 use vars qw($VERSION);
008 $VERSION="0.01";
009 
010 use Wx qw( :textctrl :font :colour );
011 use Wx::DND;
012 use Wx qw( wxTheClipboard );
013 use base qw( Wx::TextCtrl );
014 use Wx::Event qw( EVT_CHAR );
015 
016 require Syntax::Kamelon::Wx::PluggableTextCtrl::KeyEchoes;
017 require Syntax::Kamelon::Wx::PluggableTextCtrl::UndoRedo;
018 require Syntax::Kamelon::Wx::PluggableTextCtrl::Highlighter;
019 
020 my $defaultfont = [10, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, 0];
021 
022 my $debug = 0;
023 
024 if ($debug) {
025    use Data::Dumper;
026 }
027 
028 sub new {
029    my $class = shift;
030    my $self = $class->SUPER::new(@_);
031 
032    $self->{CALLBACK} = sub {};
033    $self->{COMMANDS} = {
034       'doremove' => \&DoRemove,
035       'doreplace' => \&DoReplace,
036       'dowrite' => \&DoWrite,
037    };
038    $self->{LISTENING} = 0;
039    
040    $self->{OVRMODE} = 0;
041    $self->{PLUGINS} = [];
042 
043    $self->SetFont( Wx::Font->new(@$defaultfont) );
044    EVT_CHAR($self, \&OnChar);
045 
046    return $self;
047 }
048 
049 sub AppendText {
050    my $self = shift;
051    unless ($self->Broadcast('append', @_)) {
052       $self->SUPER::Append(@_);
053    }
054 }
055 
056 sub Broadcast {
057    my $self = shift;
058    my $plugs = $self->{PLUGINS};
059    my $flag = 0;
060    foreach (@$plugs) {
061       if ($_->Receive(@_)) {
062          $flag = 1;
063       }
064    }
065    return $flag;
066 }
067 
068 
069 
070 1;
071 __END__