The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Tk::AppWindow::CookBook::ContentManager - Write your own content manager

OTHER RECIPIES

Tk::AppWindow::CookBook::Extension
Tk::AppWindow::CookBook::Plugin

A SIMPLE TEXT CONTENT MANAGER

package TextManager;

use base qw(Tk::Derived Tk::AppWindow::BaseClasses::ContentManager);
Construct Tk::Widget 'TextManager';
require Tk::TextUndo;

sub Populate {
   my ($self,$args) = @_;

   $self->SUPER::Populate($args);

   my $text = $self->Scrolled('TextUndo',
      -scrollbars => 'ose',
   )->pack(-expand => 1, -fill => 'both');
   $self->CWidg($text);
   $text->bind('<Control-a>', [$text, 'selectAll']);
   $text->bind('<Control-Z>', [$text, 'redo']);

   #########################################################
   # The options below also have to be defined during the  #
   # initialization of your application                    #
   #########################################################
   $self->ConfigSpecs(
      -contentbackground => [{-background => $text}],
      -contentforeground => [{-foreground => $text}],
      -contentfont => [{-font => $text}],
      -contenttabs => [{-tabs => $text}],
      -contentwrap => [{-wrap => $text}],
      -background => ['SELF', 'DESCENDANTS'],
      DEFAULT => [$text],
   );
}

sub doClear {
   my $self = shift;
   my $t = $self->CWidg;
   $t->delete('0.0', 'end');
   $t->editReset;
}

sub doLoad {
   my ($self, $file) = @_;
   my $t = $self->CWidg;
   $t->Load($file);
   $t->editModified(0);
   return 1
}

sub doSave {
   my ($self, $file) = @_;
   my $t = $self->CWidg;
   $t->Save($file);
   $t->editModified(0);
   return 1
}

sub doSelect {
   $_[0]->CWidg->focus
}

sub IsModified {
   my $self = shift;
   return $self->CWidg->editModified;	
}

AUTHOR

Hans Jeuken (hanje at cpan dot org)

SEE ALSO

Tk::AppWindow
Tk::AppWindow::BaseClasses::ContentManager
Tk::AppWindow::Ext::MDI