#!/usr/local/bin/perl
#
# Uses pack for the Label Frames so it behaves nicely on window resizi
+ng
#
use strict;
use warnings;
use Tk;
use Tk::widgets qw(LabFrame JFileDialog); # RadiobuttonGroup
use File::Spec::Functions qw(canonpath);
use File::HomeDir;
# Global Variables
my $bins = 10;
my $process = "180nm";
my $mw = MainWindow->new;
my $file_lf = $mw->LabFrame(
-label => 'File Name',
-labelside => 'acrosstop',
-foreground => 'blue',
);
$file_lf->pack(
-expand => 0,
-fill => 'x',
);
# File
my $ent = $file_lf->Entry(
-width => 35,
)->grid(
-row => 0, -column => 0,
-padx => 5,
-pady => 5,
);
my $file_btn = $file_lf->Button(
-text => 'Select',
-command => sub { get_file() },
)->grid(
-row => 0, -column => 1,
-padx => 5,
-pady => 5,
);
# Scale
my $bins_lf = $mw->LabFrame(
-label => 'Number of bins',
-labelside => 'acrosstop',
-foreground => 'blue',
);
$bins_lf->pack(
-expand => 0,
-fill => 'x',
);
# Number of bins
my $scl = $bins_lf->Scale(
-orient => 'h',
-digit => 1,
-from => 10,
-to => 100,
-variable => \$bins,
-tickinterval => 25
)->pack(
-ipadx => 100,
);
my $process_lf = $mw->LabFrame(
-label => 'Process',
-labelside => 'acrosstop',
-foreground => 'blue',
);
$process_lf->pack(
-expand => 0,
-fill => 'x',
);
# Select the process
# Would be easier with RadiobuttonGroup, but I got some random failure
+s...
# my $process = [ "40nm:GF", "65nm:GF", "140nm:NXP", "180nm:GF" ];
# my $vprocess;
# my $rgen = $process_lf->RadiobuttonGroup(
# -list => $process,
# -orientation => 'horizontal',
# -variable => \$vprocess,
# )->pack;
my $frm_process = $process_lf->Frame()->pack; # just for centering the
+ buuton row
my $rdb_40 = $frm_process->Radiobutton(
-text => "40nm:GF",
-value => "40nm",
-variable => \$process
)->pack( -side => 'left' );
my $rdb_65 = $frm_process->Radiobutton(
-text => "65nm:GF",
-value => "65nm",
-variable => \$process
)->pack( -side => 'left' );
my $rdb_140 = $frm_process->Radiobutton(
-text => "140nm:NXP",
-value => "140nm",
-variable => \$process
)->pack( -side => 'left' );
my $rdb_180 = $frm_process->Radiobutton(
-text => "180nm:GF",
-value => "180nm",
-variable => \$process
)->pack( -side => 'left' );
# Run
my $run_lf = $mw->LabFrame(
-label => 'Run',
-labelside => 'acrosstop',
-foreground => 'blue',
);
$run_lf->pack(
-expand => 1,
-fill => 'both',
);
my $but = $run_lf->Button(
-text => "Go!",
-command => \&push_button,
)->pack;
my $txt = $run_lf->Scrolled(
'Text',
-width => 40,
-height => 5,
-wrap => 'word',
-scrollbars => 'e',
-background => 'white',
);
$txt->pack(
-expand => 1,
-fill => 'both',
-padx => 5,
-pady => 5,
);
MainLoop;
# Functions
sub push_button {
my $name = $ent->get();
$name ||= '?';
# ...
$txt->insert( 'end',
"Process is $process. File location is $name and selected bins
+ is $bins.\n"
);
}
sub get_file {
# JFileDialog works better on Windows XP ;)
# Use getOpenFile if that's not important
my $file_dlg = $mw->JFileDialog(
-Title => 'File name',
-Create => 0,
-Path => File::HomeDir->my_documents,
-FPat => '*.txt',
-ShowAll => 'NO'
);
my $file = $file_dlg->Show(-Horiz => 1);
unless ($file) {
print "cancelled...\n";
return;
}
$file = canonpath($file);
update_file($file);
return;
}
sub update_file {
my $value = shift;
$ent->delete( 0, 'end' );
$ent->insert( 0, $value ) if defined $value;
return;
}
I think it looks a little better... :)
Regards, Stefan.