#
# Labeled frame. Derives from Tk::Frame, but intercepts the labeling
# part.
package Tk::LabFrame;
use vars qw($VERSION);
$VERSION = '4.010'; # $Id: //depot/Tkutf8/Tixish/LabFrame.pm#11 $
use Tk;
use base qw(Tk::Frame);
Tk::Widget->Construct('LabFrame');
sub autoLabel { 0 }
sub Populate {
my ($cw, $args) = @_;
$cw->{m_geoMgr} = "";
my $border = $cw->Component(
Frame => 'border',
-relief => 'groove',
-bd => 2,
);
my $pad = $border->Frame;
$cw->Advertise(pad => $pad);
my $frame = $border->Frame;
$cw->Advertise(frame => $frame);
my $label = $cw->Component(Label => 'label');
$cw->SUPER::Populate($args);
$cw->Delegates(DEFAULT => $frame);
$cw->ConfigSpecs(
-background => [[qw/SELF ADVERTISED/],
qw/background Background/],
-borderwidth => [$border, qw/borderWidth Border 2/],
-font => [$label, qw/font Font/],
-foreground => [$label, qw/foreground Foreground black/],
-label => [{-text => $label}, qw/label Label/],
-labelside => [qw/METHOD labelSide LabelSide acrosstop/],
-labelvariable => [{-textvariable => $label}],
-relief => [$border, qw/relief Relief groove/],
DEFAULT => [$frame]
);
return $cw;
}
use Tk::Submethods(
form => [qw/check forget grid info slaves/],
grid => [qw/bbox columnconfigure configure forget info location
propagate rowconfigure remove size slaves/],
pack => [qw/forget info propagate slaves/],
place => [qw/forget info slaves/]
);
sub labelside {
my ($cw, $side) = @_;
return $cw->{Configure}{-labelside} unless $side;
my $border = $cw->Subwidget('border');
my $pad = $cw->Subwidget('pad');
my $frame = $cw->Subwidget('frame');
my $label = $cw->Subwidget('label');
## packForget/formForget as appropriate
foreach ($border, $label, $pad, $frame) {
$_->formForget if $cw->{m_geoMgr} eq "form";
$_->packForget if ($cw->{m_geoMgr} eq "pack" && $_->ismapped);
}
if ($side eq "acrosstop") {
my $y = $label->reqheight / 2;
my $ph = $y - ($border->cget(-bd));
$ph = 0 if $ph < 0;
$label->form(qw/-top 0 -left 4 -padx 6 -pady 2/);
$border->form(-top => $y,
qw/-bottom -1 -left 0 -right -1 -padx 2 -pady 2/);
$pad->form(-bottom => $ph,
qw/-top 0 -left 0 -right -1/);
$frame->form(-top => $pad,
qw/-bottom -1 -left 0 -right -1 -fill both/);
$cw->{m_geoMgr} = "form";
} else {
$label->pack(-side => $side);
$frame->pack(-expand => 1, -fill => 'both');
$border->pack(-side => $side, -expand => 1, -fill => 'both');
$cw->{m_geoMgr} = "pack";
}
}
sub form {
my $cw = shift;
$cw = $cw->Subwidget('frame')
if (@_ && $_[0] =~ /^(?:slaves)$/);
$cw->SUPER::form(@_);
}
sub grid {
my $cw = shift;
$cw = $cw->Subwidget('frame') if (@_ && $_[0] =~
/^(?:bbox
|columnconfigure
|location
|propagate
|rowconfigure
|size
|slaves)
$/x);
$cw->SUPER::grid(@_);
}
sub pack {
my $cw = shift;
$cw = $cw->Subwidget('frame')
if (@_ && $_[0] =~ /^(?:propagate|slaves)$/);
$cw->SUPER::pack(@_);
}
sub place {
my $cw = shift;
$cw = $cw->Subwidget('frame')
if (@_ && $_[0] =~ /^(?:slaves)$/);
$cw->SUPER::place(@_);
}
1;