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 )