# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
use base
qw(Tk::Derived Tk::Widget);
Construct Tk
::Widget
'Frame';
$VERSION = '3.031'; # $Id: //depot/Tk8/Tk/Frame.pm#31 $
sub Tk_cmd { \&Tk::frame }
return (shift->SUPER::CreateOptions,'-colormap','-visual','-container')
my ($cw,$name,$widget) = @_;
confess 'No name' unless (defined $name);
croak 'No widget' unless (defined $widget);
$cw->Delegates(DEFAULT => $widget);
$cw->ConfigSpecs(DEFAULT => [$widget]);
$widget->pack('-expand' => 1, -fill => 'both') unless ($widget->manager); # Suspect
$cw->Advertise($name,$widget);
my ($cw,$name,@skip) = @_;
my $sw = $cw->Subwidget($name);
foreach $sc ($sw->configure)
$option =~ s/^-(.*)/-$name\u$1/;
$info[0] = Tk::Configure->new($sw,$info[0]);
$cw->ConfigSpecs($option => \@info);
$cw->Delegate('bind',@args);
$cw->Delegate('menu',@args);
$cw->Delegate('focus',@args);
# $cw->Delegate('bindtags',@args);
$cw->Delegate('selection',@args);
$cw->ConfigSpecs('-labelPack' => [ 'METHOD', undef, undef, undef]);
$cw->ConfigSpecs('-labelVariable' => [ 'METHOD', undef, undef, undef]);
$cw->ConfigSpecs('-label' => [ 'METHOD', undef, undef, undef]);
$cw->labelPack([]) if grep /^-label\w+/, keys %$args;
my $menu = $frame->cget('-menu');
$menu->configure(@_) if @_;
$menu = $frame->Menu(-type => 'menubar',@_);
$frame->configure('-menu' => $menu);
$frame->Advertise('menubar' => $menu);
my $w = $cw->Subwidget('label');
if (defined($w) && !defined($val))
elsif (defined($val) && !defined ($w))
$w = Tk::Label->new($cw,-textvariable => $cw->labelVariable);
$cw->Advertise('label' => $w);
$cw->ConfigDelegate('label',qw(-text -textvariable));
if (defined($val) && defined($w))
unless (exists $pack{-side
})
$pack{-side
} = 'top' unless (exists $pack{-side
});
unless (exists $pack{-fill
})
$pack{-fill
} = 'x' if ($pack{-side
} =~ /(top|bottom)/);
$pack{-fill
} = 'y' if ($pack{-side
} =~ /(left|right)/);
unless (exists($pack{'-before'}) || exists($pack{'-after'}))
my $before = ($cw->packSlaves)[0];
$pack{'-before'} = $before if (defined $before);
@result = $w->packInfo if (defined $w);
return (wantarray) ?
@result : \
@result;
my $var = \
$cw->{Configure
}{'-labelVariable'};
if (@_ > 1 && defined $val)
$$val = '' unless (defined $$val);
my $w = $cw->Subwidget('label');
$w = $cw->Subwidget('label');
$w->configure(-textvariable
=> $val);
my $var = $cw->cget('-labelVariable');
if (@_ > 1 && defined $val)
$var = \
$cw->{Configure
}{'-label'};
$cw->labelVariable($var);
return (defined $var) ?
$$var : undef;;
unless ($cw->{'pack_pending'})
$cw->{'pack_pending'} = 1;
$cw->afterIdle([$cw,'packscrollbars']);
my ($cw,$sb,$ref,@args) = @_;
$cw->queuePack if (@args == 2 && $sb->Needed != $$ref);
unless ($w->Tk::bind('Freeze','<Map>'))
$w->Tk::bind('Freeze','<Map>',['packPropagate' => 0])
$w->AddBindTag('Freeze');
foreach $c ($w->configure)
if ($opt eq '-yscrollcommand')
my $slice = Tk
::Frame
->new($cw,Name
=> 'ysbslice');
my $ysb = Tk
::Scrollbar
->new($slice,-orient
=> 'vertical', -command
=> [ 'yview', $w ]);
my $size = $ysb->cget('-width');
my $corner = Tk
::Frame
->new($slice,Name
=>'corner','-relief' => 'raised',
'-width' => $size, '-height' => $size);
$ysb->pack(-side
=> 'left', -fill
=> 'y');
$cw->Advertise('yscrollbar' => $ysb);
$cw->Advertise('corner' => $corner);
$cw->Advertise('ysbslice' => $slice);
$corner->{'before'} = $ysb->PathName;
$slice->{'before'} = $w->PathName;
elsif ($opt eq '-xscrollcommand')
my $xsb = Tk
::Scrollbar
->new($cw,-orient
=> 'horizontal', -command
=> [ 'xview', $w ]);
$cw->Advertise('xscrollbar' => $xsb);
$xsb->{'before'} = $w->PathName;
$cw->Advertise('scrolled' => $w);
$cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]);
my $opt = $cw->cget('-scrollbars');
my $slice = $cw->Subwidget('ysbslice');
my $xsb = $cw->Subwidget('xscrollbar');
my $corner = $cw->Subwidget('corner');
my $w = $cw->Subwidget('scrolled');
my $xside = (($opt =~ /n/) ?
'top' : 'bottom');
$cw->{'pack_pending'} = 0;
my $ysb = $cw->Subwidget('yscrollbar');
if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed))
my $yside = (($opt =~ /w/) ?
'left' : 'right');
$slice->pack(-side
=> $yside, -fill
=> 'y',-before
=> $slice->{'before'});
$w->configure(-yscrollcommand
=> ['set', $ysb]);
$w->configure(-yscrollcommand
=> ['sbset', $cw, $ysb, \
$cw->{'packysb'}]);
$w->configure(-yscrollcommand
=> undef) unless $opt =~ s/[we]//;
$cw->{'packysb'} = $havey;
if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed))
$xsb->pack(-side
=> $xside, -fill
=> 'x',-before
=> $xsb->{'before'});
$w->configure(-xscrollcommand
=> ['set', $xsb]);
$w->configure(-xscrollcommand
=> ['sbset', $cw, $xsb, \
$cw->{'packxsb'}]);
$w->configure(-xscrollcommand
=> undef) unless $opt =~ s/[ns]//;
$cw->{'packxsb'} = $havex;
if ($havex && $havey && defined $corner->{'before'})
$corner->configure(-height
=> $xsb->ReqHeight);
$corner->pack(-before
=> $corner->{'before'}, -side
=> $xside,
-anchor
=> $anchor, -fill
=> 'x');
my $var = \
$cw->{'-scrollbars'};
if (!defined $old || $old ne $opt)
foreach $child ($w->children)
next unless (ref $child);
$match = $child->FindMenu($char);
return $match if (defined $match);