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 ); =cut