Data-Reporter
view release on metacpan or search on metacpan
bin/VisRep.pl view on Meta::CPAN
#!/usr/local/bin/perl
use Cwd;
use Tk;
use Tk::DialogBox;
use Data::Reporter::VisSection;
use Data::Reporter::Datasource;
use strict;
use vars qw ($visrep);
sub resize() {
$visrep->{VSIZEX} = $visrep->{WSIZEX}->get();
$visrep->{VSIZEY} = $visrep->{WSIZEY}->get();
$visrep->{ACTUAL_SEC}->configure(Size => $visrep->{WSIZEVAREA}->get(),
Width => $visrep->{VSIZEX});
$visrep->{TOPWIN}->configure(width => $visrep->{VSIZEX},
height => $visrep->{ACTUAL_SEC}->size()+
$visrep->{VSIZEC});
$visrep->{WWORKAREA}->configure(width => $visrep->{VSIZEX});
#set ruler
my $cont;
my $rulertext="";
for ($cont = 0; $cont < $visrep->{VSIZEX}; $cont++) {
$rulertext .= $cont % 10;
}
$visrep->{WRULER}->configure(state => 'normal');
$visrep->{WRULER}->configure(width => $visrep->{VSIZEX});
$visrep->{WRULER}->delete(0,'end');
$visrep->{WRULER}->insert(0.1, $rulertext);
$visrep->{WRULER}->configure(state => 'disabled');
update_section();
update_textarea();
}
sub update_textarea() {
my $nrows = $visrep->{ACTUAL_SEC}->size();
my $topwin = $visrep->{TOPWIN};
my $nactrows = @{$visrep->{AROWS}}+0;
my $cont;
my $workarea = $visrep->{WWORKAREA};
my $only_code = $visrep->{ACTUAL_SEC}->only_code();
#if nrows > nrowsact, increment rows
if ($nrows > $nactrows) {
for ($cont = $nactrows + 1 ; $cont <= $nrows; $cont++) {
my $row = $workarea->Entry(width => $visrep->{VSIZEX},
relief => 'sunken',
font => "fixed")->pack(side => 'top');
push @{$visrep->{AROWS}}, $row;
}
} elsif ($nrows < $nactrows) {
for ($cont = $nactrows; $cont > $nrows; $cont--) {
my $row = pop @{$visrep->{AROWS}};
$row->destroy();
}
} else {
for ($cont = 0; $cont < $nrows; $cont++) {
my $row = $visrep->{AROWS}->[$cont];
$row->configure(width => $visrep->{VSIZEX});
}
}
#put information on it
my @data = $visrep->{ACTUAL_SEC}->lines();
for ($cont = 0; $cont < $nrows; $cont++) {
my $row = $visrep->{AROWS}->[$cont];
$row->delete(0,'end');
$row->insert(0.1, $data[$cont]);
}
#update code area
$visrep->{WCODEAREA}->delete(0.1, 'end');
$visrep->{WCODEAREA}->insert(0.1, $visrep->{ACTUAL_SEC}->code());
}
sub update_section() {
my @lines = ();
my $nrows = @{$visrep->{AROWS}}+0;
my $cont;
for ($cont = 0; $cont < $nrows; $cont++) {
my $row = $visrep->{AROWS}->[$cont];
push @lines, $row->get();
}
my $code="";
my $jointext = sub {
$code .= @_[1];
};
$visrep->{WCODEAREA}->dump(-text, -command => $jointext, 0.1, 'end');
$visrep->{ACTUAL_SEC}->configure(Lines => \@lines,
Code => $code,
Break_field => $visrep->{WBREAKFIELD}->get());
}
sub update_toolbar() {
$visrep->{WAREANAME}->configure(text => $visrep->{ACTUAL_SEC}->name());
$visrep->{WSIZEVAREA}->delete(0.1, 'end');
$visrep->{WSIZEVAREA}->insert(0, $visrep->{ACTUAL_SEC}->size());
$visrep->{WBREAKFIELD}->configure(state => 'normal');
$visrep->{WBREAKFIELD}->delete(0.1, 'end');
my $valor = $visrep->{ACTUAL_SEC}->break_field();
$visrep->{WBREAKFIELD}->insert(0, $visrep->{ACTUAL_SEC}->break_field());
}
sub load_section($) {
my $section = shift;
$visrep->{ACTUAL_SEC} = $section;
$visrep->{WSIZEVAREA}->configure(state => 'normal');
$visrep->{WBREAKFIELD}->configure(state => 'normal');
update_toolbar();
update_textarea();
$visrep->{WSIZEVAREA}->configure(state => 'disabled')
if ($section->{ONLY_CODE});
$visrep->{WBREAKFIELD}->configure(state => 'disabled')
unless ($section->{NAME} =~ /^BREAK/);
}
sub create_toolbar() {
#create array of rows
my @rows=();
$visrep->{AROWS} = \@rows;
my $topwin = $visrep->{TOPWIN};
my $chars = $topwin->Frame()->pack(side => 'top',
fill => 'x');
#create dimensions
$chars->Label(text => 'width',
relief => 'groove',
borderwidth => 2)->pack(side => 'left');
$visrep->{WSIZEX} =$chars->Entry(relief => 'sunken',
width => 3)->pack(side => 'left');
$chars->Label(text => 'height',
relief => 'groove',
borderwidth => 2)->pack(side => 'left');
$visrep->{WSIZEY} =$chars->Entry(relief => 'sunken',
width => 3)->pack(side => 'left');
$visrep->{WSIZEX}->insert(0, $visrep->{VSIZEX});
$visrep->{WSIZEY}->insert(0, $visrep->{VSIZEY});
$visrep->{WSIZEX}->bind('<Return>' => \&resize);
$visrep->{WSIZEY}->bind('<Return>' => \&resize);
#create section info
$chars->Label(text => 'Active section',
relief => 'groove',
borderwidth => 2)->pack(side => 'left');
$visrep->{WAREANAME} =$chars->Label(
text => $visrep->{ACTUAL_SEC}->name(),
relief => 'groove',
borderwidth => 2,)->pack(side => 'left');
$chars->Label(text => 'Rows in section',
relief => 'groove',
borderwidth => 2)->pack(side => 'left');
( run in 0.616 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )