use Tk; use Tk::NoteBook; use Tk::ROText; use IPC::Run ();
package Tk; use File::UserConfig ();
my $cfgdir = File::UserConfig->configdir(); print $cfgdir; package main;
sub StartInstallation;
my $mw = MainWindow->new(); $mw->geometry( "800x600" ); eval { # eval, in case fonts already exist $mw->fontCreate(qw/C_normal -family courier -size 10/); $mw->fontCreate(qw/C_bold -family courier -size 10 -weight bold/); }; my $nb = $mw->NoteBook()->pack( -fill=>'both', -expand=>1 );
my @tabs; push @tabs, $nb->add( "welcome", -label => "Welcome" ); push @tabs, $nb->add( "install", -label => "Install" ); push @tabs, $nb->add( "config", -label => "COnfiguration" );
$tabs[0]->Label( -text=>"Welcome to PAR-Install-PPD-GUI!" )->pack( );
# init install tab my $urientry; my $ppduri = 'http://'; my $resulttext; my $should_wrap = 0; my $verbose = 0; { my $fr = $tabs[1]->Frame()->pack(qw/-side top -fill both/);
my $urifr = $fr->Frame()->pack(qw/-side top -fill x/);
$urifr->Label(qw/-text/, "PPD URI: ")->pack(qw/-side left -ipady 10/);
$urientry = $urifr->Entry(
qw/-width 80 -textvariable/, \$ppduri
)->pack(qw/-side left -ipadx 10/);
$urifr->Button(
qw/-width 20 -text Install -command/, \&StartInstallation
)->pack(qw/-side left/);
my $resultfr = $fr->Frame()->pack(qw/-side top -fill both/);
my $tframe = $resultfr->Frame()->pack(qw/-side top -fill x/);
$tframe->Label(qw/-text/, "Results:")->pack(qw/-side left/);
$tframe->Checkbutton(
qw/-text/, "Wrap Lines",
qw/-variable/, \$should_wrap, qw/-command/, \&WrapToggle
)->pack(qw/-side left -padx 3/);
$tframe->Checkbutton(
qw/-text/, "Verbose Output",
qw/-variable/, \$verbose,
)->pack(qw/-side left -padx 3/);
$resulttext = $resultfr->Scrolled(
qw/ROText -scrollbars osoe -background white/
)->pack(qw/-side top -fill both -padx 5/);
$resulttext->tag(qw/configure output -foreground black -font C_normal/);
$resulttext->tag(qw/configure error -foreground red -font C_bold/);
WrapOff();
}
# Init Config tab my $parinstallppd = 'parinstallppd'; { my $fr = $tabs[2]->Frame()->pack(qw/-side top -fill both/);
}
MainLoop;
sub StartInstallation { my $uri = $ppduri; my @call = ($parinstallppd, '--uri', $ppduri); push @call, '--verbose' if $verbose; $resulttext->Contents(''); $resulttext->insert('0.0', ''); my $update_out = sub{ $resulttext->insert('insert', join("",@_), 'output'); }; my $update_err = sub{ $resulttext->insert('insert', join("",@_), 'error'); }; IPC::Run::run(\@call, \undef, $update_out, $update_err); }
sub WrapOn { $resulttext->configure( qw/-wrap word/ ); } sub WrapOff { $resulttext->configure( qw/-wrap none/ ); }
sub WrapToggle { if ($should_wrap) { WrapOn() } else { WrapOff() } }