File Coverage

blib/lib/GIFgraph/WithMap.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package GIFgraph::WithMap;
2              
3 1     1   798 use strict;
  1         2  
  1         58  
4 1     1   6 use vars qw (@ISA %fields $AUTOLOAD $VERSION);
  1         2  
  1         89  
5 1     1   6 use Carp;
  1         5  
  1         105  
6 1     1   2093 use CGI;
  1         19421  
  1         9  
7              
8 1     1   1816 use MRP::BaseClass;
  0            
  0            
9              
10             $VERSION = 1.0;
11              
12             # use AUTOLOAD to pass everything that we can't do to _GIFgraph.
13             # don't know if this is kosha. AHHHH.
14             sub AUTOLOAD {
15             my $thing = shift;
16             my ($package, $function) = $AUTOLOAD =~ m/^(.*)::([^:]+)$/;
17              
18             if(ref($thing)) {
19             my $delegate = $thing->_GIFgraph;
20             $function = join '::', $delegate, $function;
21             return $thing->$function(@_);
22             }
23             die "Could not find method $AUTOLOAD via $thing";
24             }
25              
26             sub isa {
27             my ($thing, $type) = @_;
28             return $thing->_GIFgraph->isa($type) || $thing->SUPER::isa($type);
29             }
30              
31             sub new {
32             my $class = shift;
33             my $GIFgraph = shift;
34             my $baseClass = new MRP::BaseClass;
35              
36             my $self = $class->rebless($GIFgraph, $baseClass);
37              
38             $self->_GIFgraph(ref $GIFgraph);
39              
40             return $self;
41             }
42              
43             sub draw_data {
44             my ($self, $gd, $data) = @_;
45             my $fuzz = $self->fuzz;
46             my $map = "";
47             my $mapname = $self->mapname || confess "You must set the name for this map before calling plot";
48             my $seriesnames = $self->seriesnames;
49             my $links = $self->links;
50              
51             my $delegateFunc = join '::', $self->_GIFgraph, 'draw_data';
52             $self->$delegateFunc($gd, $data);
53            
54             $map = ''."\n";
55             foreach my $series (1 .. $self->{numsets}) {
56             my (@up, @down);
57             foreach my $point (0 .. $self->{numpoints}) {
58             next unless defined($$data[$series][$point]);
59             my ($x, $y) = $self->val_to_pixel($point+1, $$data[$series][$point], $series);
60             push @up, $x, $y+$fuzz;
61             unshift @down, $x, $y-$fuzz;
62             }
63             my $seriesname = $seriesnames->[$series-1] || 'series '.$series;
64             my $link = $links->[$series-1] || "#$seriesname";
65             $map .= join("\n\t",
66             '
67             'alt="' . $seriesname . '"',
68             'href="' . $link . '"',
69             'onMouseOver="self.status=' . "'$seriesname'" . '; return true"',
70             'onMouseOut="self.status=' . "''" . '; return true"',
71             'shape=polygon',
72             'coords="' . join(', ', @up, @down) . '"',
73             );
74             $map .= ">\n";
75             }
76             $map .= "\n";
77              
78             $self->map($map);
79             }
80              
81             BEGIN {
82             @ISA = qw (MRP::BaseClass);
83             %fields = (
84             'fuzz' => 1,
85             'map' => undef,
86             'mapname' => undef,
87             'seriesnames' => [],
88             'links' => [],
89             '_GIFgraph' => undef,
90             );
91             GIFgraph::WithMap->check4Clashes;
92             }
93              
94             $VERSION;
95              
96             __END__