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->SetFontWx::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__