2025-04-27 07:49:33 -04:00

174 lines
4.0 KiB
Perl

package Win32::GUI::CardLayout;
$VERSION = "0.1"; # Oct. 8, 1999
sub new {
my($class, $win, $base) = @_;
my $r_card = {
"window" => $win,
"base" => $base,
};
bless $r_card, $class;
return $r_card;
}
sub add {
my($cardMgr, $widget, $index) = @_;
$cardMgr->{'window'}->{$widget}->Hide() if $index ne $cardMgr->{'base'};
push(@content, [$cardMgr->{'window'}, $cardMgr->{'window'}->{$widget}, $index]);
$cardMgr->{'content'} = [ @content ];
$cardMgr->{'last'} = $index;
}
sub showCard {
my($cardMgr, $index) = @_;
foreach $piece(@{$cardMgr->{'content'}}) {
$thiswindow = $piece->[0];
$thiswidget = $piece->[1];
$thiswidget->Show() if($piece->[2] eq $index && $thiswindow eq $cardMgr->{'window'});
$thiswidget->Hide() if($piece->[2] ne $index && $thiswindow eq $cardMgr->{'window'});
}
}
sub showFirstCard {
my($cardMgr) = @_;
foreach $piece(@{$cardMgr->{'content'}}) {
$thiswindow = $piece->[0];
$thiswidget = $piece->[1];
$thiswidget->Show() if($piece->[2] eq $cardMgr->{'base'} && $thiswindow eq $cardMgr->{'window'});
$thiswidget->Hide() if($piece->[2] ne $cardMgr->{'base'} && $thiswindow eq $cardMgr->{'window'});
}
}
sub showLastCard {
my($cardMgr) = @_;
foreach $piece(@{$cardMgr->{'content'}}) {
$thiswindow = $piece->[0];
$thiswidget = $piece->[1];
$thiswidget->Show() if($piece->[2] eq $cardMgr->{'last'} && $thiswindow eq $cardMgr->{'window'});
$thiswidget->Hide() if($piece->[2] ne $cardMgr->{'last'} && $thiswindow eq $cardMgr->{'window'});
}
}
1;
__END__
=head1 NAME
Win32::GUI::CardLayout - Card layout support for Win32::GUI
=head1 SYNOPSIS
use Win32::GUI;
use Win32::GUI::CardLayout;
$Window = new GUI::Window(
-text => "CardLayout Window",
-name => "MainWindow",
-width => 200,
-height => 100,
-left => 110,
-top => 110,
);
$card = new Win32::GUI::CardLayout($Window, "Main");
$Window->AddButton(
-name => "ShowCardTwoButton",
-text => "Push",
-left => 10,
-top => 40,
);
$card->add("ShowCardTwoButton", "Main");
$Window->AddLabel(
-name => "CardTwoLabel",
-text => "Label Two",
-left => 5,
-top => 35,
);
$card->add("CardTwoLabel", "Second");
$Window->Show();
Win32::GUI::Dialog();
sub ShowCardTwoButton_Click {
$card->showCard("Second");
}
=head1 DESCRIPTION
Multiple GUI interfaces may be placed within one window. Each interface is
assigned a name and placed in the CardLayout Manager with the add() function.
The constructor accepts two parameters. The first is the window object that the
new CardLayout object will be associated with and the second parameter is the name
of the base card. Widgets added to the CardLayout Manager with the same name as the
base card will be displayed first while all others are hidden.
=head2 Constructor
=over 4
=item new Win32::GUI::CardLayout(Window, Base_Card_Name)
=back
=head2 Methods
=over 4
=item add("WidgetObject", "CardName")
Adds the widget with the name WidgetObject to the card named CardName.
Example:
$card->add("FirstNameLabel", "FormCard");
=item showCard("CardName")
Hides the current card and displays the card labeled CardName.
Example:
$card->showCard("Main");
=item showFirstCard()
Hides the current card and displays the first card. The first card will
be the base card named the constructor.
Example:
$card->showFirstCard();
=item showLastCard()
Hides the current card and displays the last card. The last card is the
name of the last card added the the CardLayout Manager.
Example:
$card->showLastCard();
=back
=head1 VERSION
Win32::GUI::CardLayout version 0.1, October 8 1999.
=head1 AUTHOR
Mike Kangas ( C<kangas@anlon.com> );
=cut