/usr/local/CPAN/Project-Gantt/Project/Gantt/SpanInfo.pm
##########################################################################
#
# File: Project/Gantt/SpanInfo.pm
#
# Author: Alexander Westholm
#
# Purpose: This class visually presents data about a given span.
# It lists the span's description and resource, in a box
# whose color varies based on whether the task is a
# container or task.
#
# Client: CPAN
#
# CVS: $Id: SpanInfo.pm,v 1.4 2004/08/03 17:56:52 awestholm Exp $
#
##########################################################################
package Project::Gantt::SpanInfo;
use strict;
use warnings;
use Project::Gantt::TextUtils;
##########################################################################
#
# Method: new(%opts)
#
# Purpose: Constructor. Takes as parameters the canvas, skin and
# task object it will describe.
#
##########################################################################
sub new {
my $cls = shift;
my %ops = @_;
die "Improper args to SpanInfo!" if(not($ops{canvas} and $ops{task}));
return bless {
canvas => $ops{canvas},
skin => $ops{skin},
task => $ops{task},
}, $cls;
}
##########################################################################
#
# Method: display(height)
#
# Purpose: Functions as a placeholder to call _writeInfo. Exists
# incase a preprocessing need arises later.
#
##########################################################################
sub display {
my $me = shift;
my $hgt = shift;
$me->_writeInfo($hgt);
}
##########################################################################
#
# Method: _writeInfo(height)
#
# Purpose: Writes information for the task associated with this
# object onto the canvas. Creates a box for description
# and another for resource. Background color of these
# boxes depends on whether the task is a Project::Gantt
# instance or a Project::Gantt::Task instance.
#
##########################################################################
sub _writeInfo {
my $me = shift;
my $height = shift;
my $tsk = $me->{task};
my $bgcolor = $me->{skin}->primaryFill();
my $fontFill = $me->{skin}->primaryText();
my $canvas = $me->{canvas};
$bgcolor = $me->{skin}->secondaryFill() if $tsk->isa("Project::Gantt");
$fontFill = $me->{skin}->secondaryText() if $tsk->isa("Project::Gantt");
# rectangle for description
$canvas->Draw(
stroke => $me->{skin}->infoStroke(),
fill => $bgcolor,
primitive => 'rectangle',
points => "0, $height 145, ".($height+17));
# rectangle for name
$canvas->Draw(
stroke => $me->{skin}->infoStroke(),
fill => $bgcolor,
primitive => 'rectangle',
points => "145, $height 200, ".($height+17));
# write description
$canvas->Annotate(
text => truncateStr(
$tsk->getDescription(),
145),
font => $me->{skin}->font(),
fill => $fontFill,
pointsize => 10,
x => 2,
y => $height+12);
# if this is a task, write name... sub-projects aren't associated with
# a specific resource
if($tsk->isa("Project::Gantt::Task")){
$canvas->Annotate(
text => truncateStr(
$tsk->getResources()->[0]->getName(),
55),
font => $me->{skin}->font(),
fill => $fontFill,
pointsize => 10,
x => 147,
y => $height+12);
}
}
1;