#!/usr/bin/perl use warnings; use strict; my @stn_init = ( "station1", "station2", "station3" ); my @stn_sup = ("station1", "station2", "station3", "stationa", "stationb" ); my @stn = @stn_init; my @station_frames; my @z; my @w; my @b; my @stations; ################################################################################# $ENV{ TZ } = "PST08PDT07"; use Tk; my $mw = MainWindow->new; $mw->minsize( qw(250 150) ); $mw->title( "Metar Watch" ); $mw->configure( -background => 'tan' ); my $menu_bar = $mw->Frame( -relief => 'groove', -borderwidth => 3, -background => 'blue', ) ->pack( '-side' => 'top', -fill => 'x' ); my $file_mb = $menu_bar->Menubutton( -text => 'File', -background => 'blue', -activebackground => 'salmon', -foreground => 'white', )->pack( -side => 'left' ); $file_mb->command( -label => 'About', -background => 'blue', -activebackground => 'salmon', -command => \&ABOUT ); $file_mb->command( -label => 'Exit', -background => 'blue', -activebackground => 'salmon', -command => sub { $mw->destroy } ); my $top = $mw->Scrolled('Pane', -scrollbars=>'osoe', )->pack( -side => 'top', -fill => 'x' ); # make header my $header_f= $top->Frame->pack(); my $station0 = $header_f->Label( -text => 'Station ', )->pack(-side => 'left', -pady => 9, -padx => 8 ); my $z0 = $header_f->Label( -text => 'Time (Z)', )->pack(-side => 'left', -pady => 9, -padx => 8); my $w0 = $header_f->Label( -text => 'Wind (KT)', )->pack(-side => 'left', -pady => 9, -padx => 8); #make control frame my $ob_bar = $mw->Frame( -relief => 'groove', -borderwidth => 3, -background => 'orange', ) ->pack( '-side' => 'bottom', -fill => 'x' ); my $other_obs=0; my $ob_lab = $ob_bar->Checkbutton( -text => 'Show more sites', -variable => \$other_obs, -foreground => 'black', -background => 'orange', -command => \&rebuild )->pack( -side => 'left' ); my $other_buoys=0; my $buoy_check = $ob_bar->Checkbutton( -text => 'Show more buoys', -variable => \$other_buoys, -foreground => 'black', -background => 'orange', -command => \&rebuild )->pack( -side => 'left' ); &build; MainLoop; sub rebuild{ if($other_obs==1){ @stn = @stn_sup }else{ @stn = @stn_init } foreach my $fr (@station_frames){ my @w = $fr->packSlaves; foreach (@w) {$_->packForget;} $fr->packForget; $mw->update; } &build; } sub build { #make frame for each station my $n = 0; for ( 0 .. $#stn ) { $station_frames[$_]= $top->Frame->pack(-expand=>1, -fill=>'both'); $stations[ $n++ ] = $station_frames[$_]->Label( -text => "$stn[$n] " ) ->pack(-side =>'left', -pady => 1 ); $z[ $n ] = $station_frames[$_]->Entry( -justify => 'center', -background => 'light yellow', -width => 5, -borderwidth => 2, -relief => 'sunken' )->pack(-side => 'left', -pady => 2, -padx => 10); $w[ $n ] = $station_frames[$_]->Entry( -justify => 'center', -background => 'light green', -width => 7, -borderwidth => 2, -relief => 'sunken' )->pack(-side => 'left', -pady => 2, -padx => 10); if($other_buoys==1){ $b[ $n ] = $station_frames[$_]->Entry( -justify => 'center', -background => 'light green', -width => 7, -borderwidth => 2, -relief => 'sunken' )->pack(-side => 'left', -pady => 2, -padx => 10); } } $mw->update; }