Adding the first part of the graphing POD and changed the drawLabel function to have a saner api
This commit is contained in:
parent
c7e5d5ee24
commit
a4254f51b4
6 changed files with 916 additions and 46 deletions
|
|
@ -5,6 +5,12 @@ use Image::Magick;
|
||||||
use WebGUI::Image::Palette;
|
use WebGUI::Image::Palette;
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getBackgroundColor
|
||||||
|
|
||||||
|
Returns the background color triplet. Defaults to #ffffff (white).
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getBackgroundColor {
|
sub getBackgroundColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -12,6 +18,12 @@ sub getBackgroundColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getImageHeight
|
||||||
|
|
||||||
|
Returns the height of the image in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getImageHeight {
|
sub getImageHeight {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -19,6 +31,12 @@ sub getImageHeight {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getImageWidth
|
||||||
|
|
||||||
|
Returns the width in pixels of the image.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getImageWidth {
|
sub getImageWidth {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -26,6 +44,12 @@ sub getImageWidth {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getPalette
|
||||||
|
|
||||||
|
Returns the palette object this image is set to. Defaults to the default palette.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getPalette {
|
sub getPalette {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -37,6 +61,13 @@ sub getPalette {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getXOffset
|
||||||
|
|
||||||
|
Returns the horizontal offset of the center, relative to which the image is drawn.
|
||||||
|
Defaults to the physical center of the image.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getXOffset {
|
sub getXOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -44,6 +75,13 @@ sub getXOffset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getYOffset
|
||||||
|
|
||||||
|
Returns the vertical offset of the center, relative to which the image is drawn.
|
||||||
|
Defaults to the physical center of the image.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getYOffset {
|
sub getYOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -51,6 +89,12 @@ sub getYOffset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 image
|
||||||
|
|
||||||
|
Returns the imagemagick object containing this image.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub image {
|
sub image {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -58,6 +102,24 @@ sub image {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 new ( session, [ width, height ] )
|
||||||
|
|
||||||
|
Constructor for an image. Optionally you can pass the size of the image.
|
||||||
|
|
||||||
|
=head2 session
|
||||||
|
|
||||||
|
The webgui session object.
|
||||||
|
|
||||||
|
=head2 width
|
||||||
|
|
||||||
|
The width of the image in pixels. Defaults to 300.
|
||||||
|
|
||||||
|
=head2 height
|
||||||
|
|
||||||
|
The height of the image in pixels. Defaults to 300.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
my $session = shift;
|
my $session = shift;
|
||||||
|
|
@ -76,6 +138,12 @@ sub new {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 session
|
||||||
|
|
||||||
|
Returns the the session object.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub session {
|
sub session {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -83,6 +151,18 @@ sub session {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setBackgroundColor ( colorTriplet )
|
||||||
|
|
||||||
|
Sets the backgroundcolor. Using this method will erase everything that is
|
||||||
|
already on the image.
|
||||||
|
|
||||||
|
=head2 colorTriplet
|
||||||
|
|
||||||
|
The color for the background. Supply as a html color triplet of the form
|
||||||
|
#ffffff.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setBackgroundColor {
|
sub setBackgroundColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $colorTriplet = shift;
|
my $colorTriplet = shift;
|
||||||
|
|
@ -92,6 +172,16 @@ sub setBackgroundColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setImageHeight ( height)
|
||||||
|
|
||||||
|
Set the height of the image.
|
||||||
|
|
||||||
|
=head2 height
|
||||||
|
|
||||||
|
The height of the image in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setImageHeight {
|
sub setImageHeight {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $height = shift;
|
my $height = shift;
|
||||||
|
|
@ -103,6 +193,16 @@ sub setImageHeight {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setImageWidth ( width )
|
||||||
|
|
||||||
|
Set the width of the image.
|
||||||
|
|
||||||
|
=head2 width
|
||||||
|
|
||||||
|
Teh width of the image in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setImageWidth {
|
sub setImageWidth {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $width = shift;
|
my $width = shift;
|
||||||
|
|
@ -114,6 +214,16 @@ sub setImageWidth {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setPalette ( palette )
|
||||||
|
|
||||||
|
Set the palette object this image will use.
|
||||||
|
|
||||||
|
=head2 palette
|
||||||
|
|
||||||
|
An instanciated WebGUI::Image::Palette object.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setPalette {
|
sub setPalette {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $palette = shift;
|
my $palette = shift;
|
||||||
|
|
@ -122,6 +232,21 @@ sub setPalette {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 saveToFileSystem ( path, [ filename ] );
|
||||||
|
|
||||||
|
Saves the image to the specified path and filename.
|
||||||
|
|
||||||
|
=head2 path
|
||||||
|
|
||||||
|
The directory where the image should be saved.
|
||||||
|
|
||||||
|
=head2 filename
|
||||||
|
|
||||||
|
The filename the image should get. If not passed it will default to the name set
|
||||||
|
by the setFilename method.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub saveToFileSystem {
|
sub saveToFileSystem {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $path = shift;
|
my $path = shift;
|
||||||
|
|
@ -132,6 +257,14 @@ sub saveToFileSystem {
|
||||||
|
|
||||||
# This doesn't seem to work...
|
# This doesn't seem to work...
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 saveToScalar
|
||||||
|
|
||||||
|
Returns a scalar containing the image contents.
|
||||||
|
|
||||||
|
NOTE: This method does not work properly at the moment!
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub saveToScalar {
|
sub saveToScalar {
|
||||||
my $imageContents;
|
my $imageContents;
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -144,6 +277,21 @@ sub saveToScalar {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 saveToStorageLocation ( storage, [ filename ] )
|
||||||
|
|
||||||
|
Save the image to the specified storage location.
|
||||||
|
|
||||||
|
=head2 storage
|
||||||
|
|
||||||
|
An instanciated WebGUI::Storage::Image object.
|
||||||
|
|
||||||
|
=head2 filename
|
||||||
|
|
||||||
|
The filename the image should get. If not passed it will default to the name set
|
||||||
|
by the setFilename method.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub saveToStorageLocation {
|
sub saveToStorageLocation {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $storage = shift;
|
my $storage = shift;
|
||||||
|
|
@ -152,53 +300,70 @@ sub saveToStorageLocation {
|
||||||
$self->image->Write($storage->getPath($filename));
|
$self->image->Write($storage->getPath($filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 text ( properties )
|
||||||
|
|
||||||
|
Extend the imagemagick Annotate method so alignment can be controlled better.
|
||||||
|
|
||||||
|
=head2 properties
|
||||||
|
|
||||||
|
A hash containing the imagemagick Annotate properties of your choice.
|
||||||
|
Additionally you can specify:
|
||||||
|
|
||||||
|
alignHorizontal : The horizontal alignment for the text. Valid values
|
||||||
|
are: 'left', 'center' and 'right'. Defaults to 'left'.
|
||||||
|
alignVertical : The vertical alignment for the text. Valid values are:
|
||||||
|
'top', 'center' and 'bottom'. Defaults to 'top'.
|
||||||
|
|
||||||
|
You can use the align property to set the text justification.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub text {
|
sub text {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my %props = @_;
|
my %properties = @_;
|
||||||
|
|
||||||
my $anchorX = $props{x};
|
my $anchorX = $properties{x};
|
||||||
my $anchorY = $props{y};
|
my $anchorY = $properties{y};
|
||||||
|
|
||||||
|
|
||||||
my ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $self->image->QueryMultilineFontMetrics(%props);
|
my ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $self->image->QueryMultilineFontMetrics(%properties);
|
||||||
|
|
||||||
# Process horizontal alignment
|
# Process horizontal alignment
|
||||||
if ($props{alignHorizontal} eq 'center') {
|
if ($properties{alignHorizontal} eq 'center') {
|
||||||
$props{x} -= ($width / 2);
|
$properties{x} -= ($width / 2);
|
||||||
}
|
}
|
||||||
elsif ($props{alignHorizontal} eq 'right') {
|
elsif ($properties{alignHorizontal} eq 'right') {
|
||||||
$props{x} -= $width;
|
$properties{x} -= $width;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Process vertical alignment
|
# Process vertical alignment
|
||||||
if ($props{alignVertical} eq 'center') {
|
if ($properties{alignVertical} eq 'center') {
|
||||||
$props{y} -= ($height / 2);
|
$properties{y} -= ($height / 2);
|
||||||
}
|
}
|
||||||
elsif ($props{alignVertical} eq 'bottom') {
|
elsif ($properties{alignVertical} eq 'bottom') {
|
||||||
$props{y} -= $height;
|
$properties{y} -= $height;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Compensate for ImageMagicks 'ignore gravity when align is set' behaviour...
|
# Compensate for ImageMagicks 'ignore gravity when align is set' behaviour...
|
||||||
if ($props{align} eq 'Center') {
|
if ($properties{align} eq 'Center') {
|
||||||
$props{x} += ($width / 2);
|
$properties{x} += ($width / 2);
|
||||||
}
|
}
|
||||||
elsif ($props{align} eq 'Right') {
|
elsif ($properties{align} eq 'Right') {
|
||||||
$props{x} += $width;
|
$properties{x} += $width;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Compensate for ImageMagick's 'put all text a line up when align is set' behaviour...
|
# Compensate for ImageMagick's 'put all text a line up when align is set' behaviour...
|
||||||
$props{y} += $y_ppem;
|
$properties{y} += $y_ppem;
|
||||||
|
|
||||||
# We must delete these keys or else placement can go wrong for some reason...
|
# We must delete these keys or else placement can go wrong for some reason...
|
||||||
delete($props{alignHorizontal});
|
delete($properties{alignHorizontal});
|
||||||
delete($props{alignVertical});
|
delete($properties{alignVertical});
|
||||||
|
|
||||||
$self->image->Annotate(
|
$self->image->Annotate(
|
||||||
#Leave align => 'Left' here as a default or all text will be overcompensated.
|
#Leave align => 'Left' here as a default or all text will be overcompensated.
|
||||||
align => 'Left',
|
align => 'Left',
|
||||||
%props,
|
%properties,
|
||||||
gravity => 'NorthWest',
|
gravity => 'NorthWest',
|
||||||
antialias => 'true',
|
antialias => 'true',
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,17 @@ use List::Util;
|
||||||
|
|
||||||
our @ISA = qw(WebGUI::Image);
|
our @ISA = qw(WebGUI::Image);
|
||||||
|
|
||||||
|
=head1 addDataset ( dataset )
|
||||||
|
|
||||||
|
Adds a dataset to the graph. Please not that not all graph types can handle
|
||||||
|
multiple datasets and will therefore ignore any dataset but the first.
|
||||||
|
|
||||||
|
=head2 dataset
|
||||||
|
|
||||||
|
An arrayref containg the values of the data. The dat must be numeric.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub addDataset {
|
sub addDataset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -16,6 +27,20 @@ sub addDataset {
|
||||||
push(@{$self->{_datasets}}, $dataset);
|
push(@{$self->{_datasets}}, $dataset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=head1 configurationForm
|
||||||
|
|
||||||
|
Returns a hashref containing the form where the properties of your graph type
|
||||||
|
can be set. Your pluging should extend this method by append the form to the
|
||||||
|
hashref returned by the super method and returning the reference.
|
||||||
|
|
||||||
|
The key for this entry must be unique, so use the namespace of your plugin
|
||||||
|
without the WebGUI::Image part; the :: converted to and underscore and
|
||||||
|
everything in lowercase.
|
||||||
|
|
||||||
|
Check some of the plugins that come with WebGUI for examples.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub configurationForm {
|
sub configurationForm {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -71,11 +96,28 @@ sub configurationForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawLabel ( label, [ properties ] )
|
||||||
|
|
||||||
|
Draws a label with your preferred properties. Defaults the font, font size and
|
||||||
|
color which you can override.
|
||||||
|
|
||||||
|
=head2 label
|
||||||
|
|
||||||
|
The text of the label you want to print.
|
||||||
|
|
||||||
|
=head2 properties
|
||||||
|
|
||||||
|
A hash containing imagemagick Annotate properties.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawLabel {
|
sub drawLabel {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $label = shift;
|
||||||
my %properties = @_;
|
my %properties = @_;
|
||||||
|
|
||||||
$self->text(
|
$self->text(
|
||||||
|
text => $label,
|
||||||
font => $self->getLabelFont->getFile,
|
font => $self->getLabelFont->getFile,
|
||||||
fill => $self->getLabelColor,
|
fill => $self->getLabelColor,
|
||||||
style => 'Normal',
|
style => 'Normal',
|
||||||
|
|
@ -85,11 +127,34 @@ sub drawLabel {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 formNamespace
|
||||||
|
|
||||||
|
Returns the namespace used in the configuration form. You must extend this
|
||||||
|
method by concatenating an underscore and the last part of your namespace to the
|
||||||
|
output of the SUPER method.
|
||||||
|
|
||||||
|
For examples please see the implementation in the plugins that come with WebGUI.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub formNamespace {
|
sub formNamespace {
|
||||||
return "Graph";
|
return "Graph";
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getConfiguration
|
||||||
|
|
||||||
|
Returns the configuration hashref of the plugin. You must extend this method by
|
||||||
|
adding your configuration keys to the hashref returned by the SUPER method. To
|
||||||
|
avoid conflicts prepend your configuration keys with the namespace of your
|
||||||
|
plugin, encoded as follows: take the part of the namespace without
|
||||||
|
WebGUI::Image, convert it to lowercase and substitute the :: with a single
|
||||||
|
underscore.
|
||||||
|
|
||||||
|
Check out the plugins that are shipped with WebGUI for examples.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getConfiguration {
|
sub getConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -107,6 +172,22 @@ sub getConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getGraphingTab ( session, [ config ] )
|
||||||
|
|
||||||
|
Returns the contents of the graphing tab you can add to your asset.
|
||||||
|
|
||||||
|
This is a class method, and therefore you must pass the WebGUI session object.
|
||||||
|
|
||||||
|
=head2 session
|
||||||
|
|
||||||
|
An instanciated WebGUI session object.
|
||||||
|
|
||||||
|
=head2 config
|
||||||
|
|
||||||
|
Optionally you can pass a configuration hash to populate the form
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getGraphingTab {
|
sub getGraphingTab {
|
||||||
my (%configForms, $output);
|
my (%configForms, $output);
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
|
@ -211,6 +292,18 @@ EOS
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getDataset ( [ index ] )
|
||||||
|
|
||||||
|
Returns the dataset indicated by index.
|
||||||
|
|
||||||
|
=head2 index
|
||||||
|
|
||||||
|
The index of the array containing the datasets. The first dataset is indicated
|
||||||
|
by index 0. If ommitted this method returns an arrayref of arrayrefs containing
|
||||||
|
all datasets.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getDataset {
|
sub getDataset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $index = shift;
|
my $index = shift;
|
||||||
|
|
@ -223,6 +316,17 @@ sub getDataset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabel ( [ index ] )
|
||||||
|
|
||||||
|
Returns the index'th label or an arrayref containing all labels.
|
||||||
|
|
||||||
|
=head2 index
|
||||||
|
|
||||||
|
The index of label to return. Numbering starts at 0. If omitted an arrayref
|
||||||
|
containing all labels is returned.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabel {
|
sub getLabel {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $index = shift;
|
my $index = shift;
|
||||||
|
|
@ -232,6 +336,12 @@ sub getLabel {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabelColor
|
||||||
|
|
||||||
|
Returns the triplet of the label color. Defaults to '#333333'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabelColor {
|
sub getLabelColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -239,6 +349,21 @@ sub getLabelColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabelDimensions ( text, [ properties ] )
|
||||||
|
|
||||||
|
Returns a hashref containg the width and height in pixels of the passed text.
|
||||||
|
Width and height are referenced by the keys 'width' and 'height' respectively.
|
||||||
|
|
||||||
|
=head2 text
|
||||||
|
|
||||||
|
The text you want to know the dimensions of.
|
||||||
|
|
||||||
|
=head2 properties
|
||||||
|
|
||||||
|
Optionally you can pass a hashref containing imagemagick's Annotate properties.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabelDimensions {
|
sub getLabelDimensions {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $text = shift;
|
my $text = shift;
|
||||||
|
|
@ -258,6 +383,13 @@ sub getLabelDimensions {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabelFont
|
||||||
|
|
||||||
|
Returns the WebGUI::Image::Font object this image is set to. Defaults to the
|
||||||
|
default font.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabelFont {
|
sub getLabelFont {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -265,6 +397,12 @@ sub getLabelFont {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabelFontSize
|
||||||
|
|
||||||
|
Returns the font size of the labels. Defaults to 20.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabelFontSize {
|
sub getLabelFontSize {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -272,14 +410,26 @@ sub getLabelFontSize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getLabelOffset
|
||||||
|
|
||||||
|
Returns the label offset. This is the distance between the label and the axis.
|
||||||
|
Defaults to 10 pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getLabelOffset {
|
sub getLabelOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $self->{_labels}->{labelOffset} || 10;
|
return $self->{_labels}->{labelOffset} || 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getMaxValueFromDataset
|
||||||
|
|
||||||
|
Returns the highest value of all added datasets.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getMaxValueFromDataset {
|
sub getMaxValueFromDataset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -306,6 +456,20 @@ sub getMaxValueFromDataset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 load ( session, namespace )
|
||||||
|
|
||||||
|
Instanciates an WebGUI::Graph object with the given namespace.
|
||||||
|
|
||||||
|
=head2 session
|
||||||
|
|
||||||
|
A WebGUI::Session object.
|
||||||
|
|
||||||
|
=head2 namespace
|
||||||
|
|
||||||
|
The full namespace of the plugin you want to load.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub load {
|
sub load {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $session = shift;
|
my $session = shift;
|
||||||
|
|
@ -320,6 +484,20 @@ sub load {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 loadByConfiguration ( session, configuration )
|
||||||
|
|
||||||
|
Loads a plugin defined by a configuration hash.
|
||||||
|
|
||||||
|
=head2 session
|
||||||
|
|
||||||
|
A WebGUI::Session object.
|
||||||
|
|
||||||
|
=head2 configuration
|
||||||
|
|
||||||
|
A configuration hashref.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub loadByConfiguration {
|
sub loadByConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $session = shift;
|
my $session = shift;
|
||||||
|
|
@ -337,6 +515,17 @@ sub loadByConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 processConfigurationForm ( session )
|
||||||
|
|
||||||
|
Processes the configuration form that is submitted and returns the correct
|
||||||
|
instanciated graphing plugin.
|
||||||
|
|
||||||
|
=head2 session
|
||||||
|
|
||||||
|
The WebGUI session object.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub processConfigurationForm {
|
sub processConfigurationForm {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $session = shift;
|
my $session = shift;
|
||||||
|
|
@ -352,14 +541,18 @@ my $graph = $self->load($session, $namespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub setBackground {
|
=head1 setConfiguration ( config )
|
||||||
my $self = shift;
|
|
||||||
my $backgroundColor = shift;
|
|
||||||
|
|
||||||
$self->{_properties}->{backgroundColor} = $backgroundColor;
|
Configures the pluging according to the configuration hashref that is passed.
|
||||||
}
|
You must extend this method by calling the SUPER method with the configuration
|
||||||
|
hashref and processing your part of the configuration options.
|
||||||
|
|
||||||
|
=head2 config
|
||||||
|
|
||||||
|
The configuration hashref.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
|
||||||
sub setConfiguration {
|
sub setConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $config = shift;
|
my $config = shift;
|
||||||
|
|
@ -376,6 +569,16 @@ sub setConfiguration {
|
||||||
};
|
};
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setLabelColor ( color )
|
||||||
|
|
||||||
|
Sets the color triplet of the labels.
|
||||||
|
|
||||||
|
=head2 color
|
||||||
|
|
||||||
|
The triplet defining the color. The triplet should be in the form of '#ffffff'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setLabelColor {
|
sub setLabelColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $color = shift;
|
my $color = shift;
|
||||||
|
|
@ -384,6 +587,16 @@ sub setLabelColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setLabelFont ( font )
|
||||||
|
|
||||||
|
Set the label font.
|
||||||
|
|
||||||
|
=head2 font
|
||||||
|
|
||||||
|
A WebGUI::Image::Font object.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setLabelFont {
|
sub setLabelFont {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $font = shift;
|
my $font = shift;
|
||||||
|
|
@ -392,6 +605,16 @@ sub setLabelFont {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setLabelFontSize ( size )
|
||||||
|
|
||||||
|
Sets the font size of the labels.
|
||||||
|
|
||||||
|
=head2 size
|
||||||
|
|
||||||
|
The desired font size.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setLabelFontSize {
|
sub setLabelFontSize {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $size = shift;
|
my $size = shift;
|
||||||
|
|
@ -400,6 +623,17 @@ sub setLabelFontSize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setLabelOffset ( offset )
|
||||||
|
|
||||||
|
Sets the label offset. This is the distance in pixels between the labels and the
|
||||||
|
axis.
|
||||||
|
|
||||||
|
=head2 offset
|
||||||
|
|
||||||
|
The label offset.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setLabelOffset {
|
sub setLabelOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $offset = shift;
|
my $offset = shift;
|
||||||
|
|
@ -408,6 +642,16 @@ sub setLabelOffset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setLabels ( labels )
|
||||||
|
|
||||||
|
Sets the labels for the datasets.
|
||||||
|
|
||||||
|
=head2 labels
|
||||||
|
|
||||||
|
An arrayref containig the labels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setLabels {
|
sub setLabels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $labels = shift || [];
|
my $labels = shift || [];
|
||||||
|
|
@ -416,6 +660,24 @@ sub setLabels {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 wrapLabelToWidth ( text, maxWidth, [ properties ] )
|
||||||
|
|
||||||
|
Wraps a text string onto multiple lines having a width of maxWidth.
|
||||||
|
|
||||||
|
=head2 text
|
||||||
|
|
||||||
|
The text you want to wrap.
|
||||||
|
|
||||||
|
=head2 maxWidth
|
||||||
|
|
||||||
|
The width the string should have after wrapping/
|
||||||
|
|
||||||
|
=head2 properties
|
||||||
|
|
||||||
|
An optional hashref containing imagemagick's Annotate properties.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub wrapLabelToWidth {
|
sub wrapLabelToWidth {
|
||||||
my (@words, $part, @lines);
|
my (@words, $part, @lines);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -447,4 +709,3 @@ sub wrapLabelToWidth {
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -466,14 +466,13 @@ sub drawLabel {
|
||||||
my $maxWidth = $anchorX;
|
my $maxWidth = $anchorX;
|
||||||
$maxWidth = $self->getImageWidth - $anchorX if ($slice->{avgAngle} > 1.5 * pi || $slice->{avgAngle} < 0.5 * pi);
|
$maxWidth = $self->getImageWidth - $anchorX if ($slice->{avgAngle} > 1.5 * pi || $slice->{avgAngle} < 0.5 * pi);
|
||||||
|
|
||||||
$self->SUPER::drawLabel(
|
$self->SUPER::drawLabel($self->wrapLabelToWidth($text, $maxWidth), (
|
||||||
text => $self->wrapLabelToWidth($text, $maxWidth),
|
|
||||||
alignHorizontal => $horizontalAlign,
|
alignHorizontal => $horizontalAlign,
|
||||||
align => $align,
|
align => $align,
|
||||||
alignVertical => $verticalAlign,
|
alignVertical => $verticalAlign,
|
||||||
x => $anchorX,
|
x => $anchorX,
|
||||||
y => $endPointY,
|
y => $endPointY,
|
||||||
);
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,13 @@ use POSIX;
|
||||||
our @ISA = qw(WebGUI::Image::Graph);
|
our @ISA = qw(WebGUI::Image::Graph);
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 configurationForm
|
||||||
|
|
||||||
|
The configuration form part for this object. See WebGUI::Image::Graph for
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub configurationForm {
|
sub configurationForm {
|
||||||
my ($configForms, $f);
|
my ($configForms, $f);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -75,6 +82,12 @@ sub configurationForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 draw
|
||||||
|
|
||||||
|
Draws the graph.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub draw {
|
sub draw {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -92,6 +105,12 @@ sub draw {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawAxis
|
||||||
|
|
||||||
|
Draws the axis.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawAxis {
|
sub drawAxis {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -107,6 +126,12 @@ sub drawAxis {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawLabels
|
||||||
|
|
||||||
|
Draws the labels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawLabels {
|
sub drawLabels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $location = shift;
|
my $location = shift;
|
||||||
|
|
@ -116,14 +141,13 @@ sub drawLabels {
|
||||||
# Draw x-axis labels
|
# Draw x-axis labels
|
||||||
foreach (@{$self->getLabel}) {
|
foreach (@{$self->getLabel}) {
|
||||||
my $text = $self->wrapLabelToWidth($_, $self->getAnchorSpacing->{x});
|
my $text = $self->wrapLabelToWidth($_, $self->getAnchorSpacing->{x});
|
||||||
$self->drawLabel(
|
$self->drawLabel($text, (
|
||||||
text => $text,
|
|
||||||
alignHorizontal => 'center',
|
alignHorizontal => 'center',
|
||||||
alignVertical => 'top',
|
alignVertical => 'top',
|
||||||
align => 'Center',
|
align => 'Center',
|
||||||
x => $anchorPoint{x},
|
x => $anchorPoint{x},
|
||||||
y => $anchorPoint{y},
|
y => $anchorPoint{y},
|
||||||
);
|
));
|
||||||
|
|
||||||
$anchorPoint{x} += $self->getAnchorSpacing->{x}; #$groupWidth + $self->getGroupSpacing;
|
$anchorPoint{x} += $self->getAnchorSpacing->{x}; #$groupWidth + $self->getGroupSpacing;
|
||||||
$anchorPoint{y} += $self->getAnchorSpacing->{y};
|
$anchorPoint{y} += $self->getAnchorSpacing->{y};
|
||||||
|
|
@ -134,18 +158,23 @@ sub drawLabels {
|
||||||
$anchorPoint{y} = $self->getChartOffset->{y} + $self->getChartHeight;
|
$anchorPoint{y} = $self->getChartOffset->{y} + $self->getChartHeight;
|
||||||
# for (1 .. $self->getYRange / $self->getYGranularity) {
|
# for (1 .. $self->getYRange / $self->getYGranularity) {
|
||||||
foreach (@{$self->getYLabels}) {
|
foreach (@{$self->getYLabels}) {
|
||||||
$self->drawLabel(
|
$self->drawLabel($_, (
|
||||||
text => $_,
|
|
||||||
alignHorizontal => 'right',
|
alignHorizontal => 'right',
|
||||||
alignVertical => 'center',
|
alignVertical => 'center',
|
||||||
x => $anchorPoint{x}, #$self->getChartOffset->{x} - $self->getLabelOffset,
|
x => $anchorPoint{x}, #$self->getChartOffset->{x} - $self->getLabelOffset,
|
||||||
y => $anchorPoint{y}, #$self->getChartOffset->{y} + $self->getChartHeight - $self->getPixelsPerUnit * $_*$self->getYGranularity,
|
y => $anchorPoint{y}, #$self->getChartOffset->{y} + $self->getChartHeight - $self->getPixelsPerUnit * $_*$self->getYGranularity,
|
||||||
);
|
));
|
||||||
$anchorPoint{y} -= $self->getPixelsPerUnit * $self->getYGranularity
|
$anchorPoint{y} -= $self->getPixelsPerUnit * $self->getYGranularity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head drawRulers
|
||||||
|
|
||||||
|
Draws the rulers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawRulers {
|
sub drawRulers {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -164,6 +193,13 @@ sub drawRulers {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 formNamespace
|
||||||
|
|
||||||
|
Extends the form namespace for this object. See WebGUI::Image::Graph for
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub formNamespace {
|
sub formNamespace {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -171,6 +207,12 @@ sub formNamespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getAxisColor
|
||||||
|
|
||||||
|
Returns the color triplet for the axis. Defaults to '#222222'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getAxisColor {
|
sub getAxisColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -178,13 +220,26 @@ sub getAxisColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getChartHeight
|
||||||
|
|
||||||
|
Returns the height of the chart. Defaults to 200.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getChartHeight {
|
sub getChartHeight {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $self->{_properties}->{chartHeight};
|
return $self->{_properties}->{chartHeight} || 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getChartOffset
|
||||||
|
|
||||||
|
Returns the coordinates of the top-left corner of the chart. he coordinates are
|
||||||
|
contained in a hasref with keys 'x' and 'y'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getChartOffset {
|
sub getChartOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -192,13 +247,25 @@ sub getChartOffset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getChartWidth
|
||||||
|
|
||||||
|
Returns the width of the chart. Defaults to 200.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getChartWidth {
|
sub getChartWidth {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $self->{_properties}->{chartWidth};
|
return $self->{_properties}->{chartWidth} || 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getConfiguration
|
||||||
|
|
||||||
|
Returns a configuration hashref. See WebGUI::Image::Graph for documentation.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getConfiguration {
|
sub getConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -216,6 +283,13 @@ sub getConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getDrawMode
|
||||||
|
|
||||||
|
Returns the drawmode. Currently supported are 'stacked' and 'sideBySide'.
|
||||||
|
Defaults to 'sideBySide'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getDrawMode {
|
sub getDrawMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -223,6 +297,13 @@ sub getDrawMode {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getPixelsPerUnit
|
||||||
|
|
||||||
|
Returns the number of pixels that correspond with one unit of the dataset
|
||||||
|
values.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getPixelsPerUnit {
|
sub getPixelsPerUnit {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -230,6 +311,12 @@ sub getPixelsPerUnit {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getRulerColor
|
||||||
|
|
||||||
|
Returns the color triplet of the rulers in the graph. Defaults to '#777777'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getRulerColor {
|
sub getRulerColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -237,13 +324,27 @@ sub getRulerColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getYGranularity
|
||||||
|
|
||||||
|
Returns the granularity of the labels and rulers in the Y direction. Defaults to
|
||||||
|
10. This is value is in terms of the values in the dataset and has no direct
|
||||||
|
relation to pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getYGranularity {
|
sub getYGranularity {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $self->{_properties}->{yGranularity} || 50;
|
return $self->{_properties}->{yGranularity} || 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getYLabels
|
||||||
|
|
||||||
|
Returns an arrayref containing the labels for the Y axis.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getYLabels {
|
sub getYLabels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -256,6 +357,13 @@ sub getYLabels {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getYRange
|
||||||
|
|
||||||
|
Returns the maxmimal value of the range that contains a whole number of times
|
||||||
|
the y granularity and is bigger than the maximum value in the dataset.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getYRange {
|
sub getYRange {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -263,6 +371,17 @@ sub getYRange {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setAxisColor ( color )
|
||||||
|
|
||||||
|
Sets the color of the axis to the supplied value.
|
||||||
|
|
||||||
|
=head2 color
|
||||||
|
|
||||||
|
The triplet of the color you want to set the axis to. Must have the following
|
||||||
|
form: #ffffff.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setAxisColor {
|
sub setAxisColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $color = shift;
|
my $color = shift;
|
||||||
|
|
@ -271,6 +390,16 @@ sub setAxisColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setChartHeight ( height )
|
||||||
|
|
||||||
|
Sets the height of the chart to the specified value.
|
||||||
|
|
||||||
|
=head2 height
|
||||||
|
|
||||||
|
The desired height in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setChartHeight {
|
sub setChartHeight {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $height = shift;
|
my $height = shift;
|
||||||
|
|
@ -279,6 +408,17 @@ sub setChartHeight {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setChartOffset ( location )
|
||||||
|
|
||||||
|
Sets the location of the top-left corner of the graph within the image.
|
||||||
|
|
||||||
|
=head2 location
|
||||||
|
|
||||||
|
A hashref containing the desired location. Use the 'x' and 'y' as keys for the x
|
||||||
|
and y coordinate respectively.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setChartOffset {
|
sub setChartOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $point = shift;
|
my $point = shift;
|
||||||
|
|
@ -287,6 +427,16 @@ sub setChartOffset {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setChartHeight ( width )
|
||||||
|
|
||||||
|
Sets the width of the chart to the specified value.
|
||||||
|
|
||||||
|
=head2 width
|
||||||
|
|
||||||
|
The desired width in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setChartWidth {
|
sub setChartWidth {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $width = shift;
|
my $width = shift;
|
||||||
|
|
@ -295,6 +445,17 @@ sub setChartWidth {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setConfiguration ( config )
|
||||||
|
|
||||||
|
Applies the settings in the given configuration hash. See WebGUI::Image::Graph
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
=head2 config
|
||||||
|
|
||||||
|
A configuration hash.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setConfiguration {
|
sub setConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $config = shift;
|
my $config = shift;
|
||||||
|
|
@ -315,6 +476,18 @@ sub setConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setDrawMode ( mode )
|
||||||
|
|
||||||
|
Set the way the datasets are drawn. Currently supported are 'stacked' and
|
||||||
|
'sideBySide' which correspond to respectivly cumulative drawing and normal
|
||||||
|
processing.
|
||||||
|
|
||||||
|
=head2 mode
|
||||||
|
|
||||||
|
The desired mode. Can be 'sideBySide' or 'stacked'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setDrawMode {
|
sub setDrawMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $mode = shift;
|
my $mode = shift;
|
||||||
|
|
@ -327,6 +500,17 @@ sub setDrawMode {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setRulerColor ( color )
|
||||||
|
|
||||||
|
Set the color of the rulers.
|
||||||
|
|
||||||
|
=head2 color
|
||||||
|
|
||||||
|
The triplet of the desired ruler color. Must be in the following format:
|
||||||
|
'#ffffff'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setRulerColor {
|
sub setRulerColor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $color = shift;
|
my $color = shift;
|
||||||
|
|
@ -335,6 +519,16 @@ sub setRulerColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setShowAxis ( boolean )
|
||||||
|
|
||||||
|
Set whether or not to draw the axis.
|
||||||
|
|
||||||
|
=head2 boolean
|
||||||
|
|
||||||
|
If set to false the axis won't be drawn.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setShowAxis {
|
sub setShowAxis {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $yesNo = shift;
|
my $yesNo = shift;
|
||||||
|
|
@ -343,6 +537,16 @@ sub setShowAxis {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setShowLabels ( boolean )
|
||||||
|
|
||||||
|
Set whether or not to draw the labels.
|
||||||
|
|
||||||
|
=head2 boolean
|
||||||
|
|
||||||
|
If set to false the labels won't be drawn.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setShowLabels {
|
sub setShowLabels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $yesNo = shift;
|
my $yesNo = shift;
|
||||||
|
|
@ -351,6 +555,16 @@ sub setShowLabels {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setShowRulers ( boolean )
|
||||||
|
|
||||||
|
Set whether or not to draw the rulers.
|
||||||
|
|
||||||
|
=head2 boolean
|
||||||
|
|
||||||
|
If set to false the rulers won't be drawn.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setShowRulers {
|
sub setShowRulers {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $yesNo = shift;
|
my $yesNo = shift;
|
||||||
|
|
@ -359,6 +573,16 @@ sub setShowRulers {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setYGranularity ( value )
|
||||||
|
|
||||||
|
Sets the y granularity. See getYGranularity for explanation of this concept.
|
||||||
|
|
||||||
|
=head2 value
|
||||||
|
|
||||||
|
The granularity in dataset units, not pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setYGranularity {
|
sub setYGranularity {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $granularity = shift;
|
my $granularity = shift;
|
||||||
|
|
@ -367,6 +591,12 @@ sub setYGranularity {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 showAxis
|
||||||
|
|
||||||
|
Returns a boolean indicating whether to draw the axis.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub showAxis {
|
sub showAxis {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -375,6 +605,12 @@ sub showAxis {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 showLabels
|
||||||
|
|
||||||
|
Returns a boolean indicating whether to draw the labels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub showLabels {
|
sub showLabels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -383,6 +619,12 @@ sub showLabels {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 showRulers
|
||||||
|
|
||||||
|
Returns a boolean indicating whether to draw the rulers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub showRulers {
|
sub showRulers {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,13 @@ use Data::Dumper;
|
||||||
our @ISA = qw(WebGUI::Image::Graph::XYGraph);
|
our @ISA = qw(WebGUI::Image::Graph::XYGraph);
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 configurationForm
|
||||||
|
|
||||||
|
Creates the configuration form for this plugin. See WebGUI::Image::Graph for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub configurationForm {
|
sub configurationForm {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -34,6 +41,26 @@ my $f = WebGUI::HTMLForm->new($self->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawBar ( bar, location, barWidth )
|
||||||
|
|
||||||
|
Draws a bar defined by bar and with width barWidth at location.
|
||||||
|
|
||||||
|
=head2 bar
|
||||||
|
|
||||||
|
A hashref defining the bar. Must contain keys 'height', 'strokeColor' and
|
||||||
|
'fillColor'.
|
||||||
|
|
||||||
|
=head2 location
|
||||||
|
|
||||||
|
A hashref containing the location of the bottom-left corner of the bar. Keys 'x'
|
||||||
|
and 'y' must specify the x- and y-coordinates respectively.
|
||||||
|
|
||||||
|
=head2 barWidth
|
||||||
|
|
||||||
|
The width of the bar in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawBar {
|
sub drawBar {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $bar = shift;
|
my $bar = shift;
|
||||||
|
|
@ -55,6 +82,12 @@ sub drawBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawGraph
|
||||||
|
|
||||||
|
Draws all the bars.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawGraph {
|
sub drawGraph {
|
||||||
my ($currentBar, %location);
|
my ($currentBar, %location);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -82,6 +115,26 @@ sub drawGraph {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawSideBySide ( bars, location, barWidth )
|
||||||
|
|
||||||
|
Draws the bars in side by side mode. Meaning that per datsetindex the bars
|
||||||
|
representing a single dataset are grouped.
|
||||||
|
|
||||||
|
=head2 bars
|
||||||
|
|
||||||
|
An arrayref containing all the bar description hashrefs as described in drawBar.
|
||||||
|
|
||||||
|
=head2 location
|
||||||
|
|
||||||
|
Hashref containing the initial coordinates of the lower-left corner of the
|
||||||
|
chart. Pass coords in keys 'x' and 'y'.
|
||||||
|
|
||||||
|
=head2 barWidth
|
||||||
|
|
||||||
|
The width of each bar in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawSideBySideBar {
|
sub drawSideBySideBar {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $bars = shift;
|
my $bars = shift;
|
||||||
|
|
@ -97,6 +150,28 @@ sub drawSideBySideBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawStacked ( bars, location, barWidth )
|
||||||
|
|
||||||
|
Draws the bars in side by side mode. Meaning that per datset-index the bars
|
||||||
|
representing a single dataset are stacked on top of each other.
|
||||||
|
|
||||||
|
=head2 bars
|
||||||
|
|
||||||
|
An arrayref containing all the bar description hashrefs as described in drawBar.
|
||||||
|
|
||||||
|
=head2 location
|
||||||
|
|
||||||
|
Hashref containing the initial coordinates of the lower-left corner of the
|
||||||
|
chart. Pass coords in keys 'x' and 'y'.
|
||||||
|
|
||||||
|
=head2 barWidth
|
||||||
|
|
||||||
|
The width of each bar in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub drawStackedBar {
|
sub drawStackedBar {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $bars = shift;
|
my $bars = shift;
|
||||||
|
|
@ -112,6 +187,13 @@ sub drawStackedBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 formNamespace
|
||||||
|
|
||||||
|
Returns the form namespace of this plugin. See WegBUI::Image::Graph for
|
||||||
|
more elaborate information.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub formNamespace {
|
sub formNamespace {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -119,6 +201,13 @@ sub formNamespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getAnchorSpacing
|
||||||
|
|
||||||
|
Returns the distance in pixels between two anchors on the x axis that define teh
|
||||||
|
placement of bars and labels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getAnchorSpacing {
|
sub getAnchorSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -133,6 +222,12 @@ sub getAnchorSpacing {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getBarSpacing
|
||||||
|
|
||||||
|
Returns the width of the gap between two bars within a group in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getBarSpacing {
|
sub getBarSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -140,6 +235,13 @@ sub getBarSpacing {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getConfiguration
|
||||||
|
|
||||||
|
Returns the configuration hashref for this plugin. Refer to WebGUI::IMage::Graph
|
||||||
|
for a more detailed description.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getConfiguration {
|
sub getConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -152,6 +254,12 @@ sub getConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getGroupSpacing
|
||||||
|
|
||||||
|
Returns the width of the gap between two groups of bars in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getGroupSpacing {
|
sub getGroupSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -159,6 +267,13 @@ sub getGroupSpacing {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getFirstAnchorLocation
|
||||||
|
|
||||||
|
Returns a hashref containing the location of the leftmost x-axis anchor.
|
||||||
|
Location coordinates are encoded in keys 'x' and 'y'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getFirstAnchorLocation {
|
sub getFirstAnchorLocation {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -169,6 +284,12 @@ sub getFirstAnchorLocation {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 processDataset
|
||||||
|
|
||||||
|
Processes the dataset. Used by drawGraph.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub processDataSet {
|
sub processDataSet {
|
||||||
my ($barProperties);
|
my ($barProperties);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -192,6 +313,16 @@ sub processDataSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setBarSpacing ( gap )
|
||||||
|
|
||||||
|
Sets the distance between two bars in a group in pixels.
|
||||||
|
|
||||||
|
=head2 gap
|
||||||
|
|
||||||
|
The distance in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setBarSpacing {
|
sub setBarSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $gap = shift;
|
my $gap = shift;
|
||||||
|
|
@ -200,6 +331,17 @@ sub setBarSpacing {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setConfiguration ( config )
|
||||||
|
|
||||||
|
Applies the given configuration hash to this plugin. See WebGUI::Image::Graph
|
||||||
|
for more info.
|
||||||
|
|
||||||
|
=head2 config
|
||||||
|
|
||||||
|
The configuration hash.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setConfiguration {
|
sub setConfiguration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $config = shift;
|
my $config = shift;
|
||||||
|
|
@ -213,6 +355,16 @@ sub setConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 setGroupSpacing ( gap )
|
||||||
|
|
||||||
|
Sets the distance between two groups of bars in pixels.
|
||||||
|
|
||||||
|
=head2 gap
|
||||||
|
|
||||||
|
The distance in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub setGroupSpacing {
|
sub setGroupSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $gap = shift;
|
my $gap = shift;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,12 @@ use Data::Dumper;
|
||||||
our @ISA = qw(WebGUI::Image::Graph::XYGraph);
|
our @ISA = qw(WebGUI::Image::Graph::XYGraph);
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawGraph
|
||||||
|
|
||||||
|
Draws all the lines.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub drawGraph {
|
sub drawGraph {
|
||||||
my ($currentBar, %location);
|
my ($currentBar, %location);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -27,6 +33,28 @@ sub drawGraph {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 drawLine ( line, location, interval )
|
||||||
|
|
||||||
|
Draws a bar defined by bar and with width barWidth at location.
|
||||||
|
|
||||||
|
=head2 line
|
||||||
|
|
||||||
|
A hashref defining the line. Must contain keys 'strokeColor' and
|
||||||
|
'dataset', the latter one being an arrayref containing all points of the line.
|
||||||
|
|
||||||
|
=head2 location
|
||||||
|
|
||||||
|
A hashref containing the location of the bottom-left corner of the line's
|
||||||
|
origin. Keys 'x' and 'y' must specify the x- and y-coordinates respectively.
|
||||||
|
|
||||||
|
=head2 interval
|
||||||
|
|
||||||
|
The distance between x-axis anchors in pixels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub drawLine {
|
sub drawLine {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $line = shift;
|
my $line = shift;
|
||||||
|
|
@ -54,6 +82,13 @@ sub drawLine {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 formNamespace
|
||||||
|
|
||||||
|
Returns the form namespace of this plugin. See WegBUI::Image::Graph for
|
||||||
|
more elaborate information.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub formNamespace {
|
sub formNamespace {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -61,6 +96,13 @@ sub formNamespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getAnchorSpacing
|
||||||
|
|
||||||
|
Returns the distance in pixels between two anchors on the x axis that define teh
|
||||||
|
placement of bars and labels.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getAnchorSpacing {
|
sub getAnchorSpacing {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -75,6 +117,13 @@ sub getAnchorSpacing {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 getFirstAnchorLocation
|
||||||
|
|
||||||
|
Returns a hashref containing the location of the leftmost x-axis anchor.
|
||||||
|
Location coordinates are encoded in keys 'x' and 'y'.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub getFirstAnchorLocation {
|
sub getFirstAnchorLocation {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
|
@ -84,15 +133,17 @@ sub getFirstAnchorLocation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# palette nog laten werken!
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
=head1 processDataset
|
||||||
|
|
||||||
|
Processes the dataset. Used by drawGraph.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
sub processDataSet {
|
sub processDataSet {
|
||||||
my ($barProperties);
|
my ($barProperties);
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
# my $maxElements = List::Util::max(map {scalar @$_} @{$self->{_datasets}});
|
|
||||||
# my $numberOfDatasets = scalar @{$self->{_datasets}};
|
|
||||||
|
|
||||||
my $palette = $self->getPalette;
|
my $palette = $self->getPalette;
|
||||||
foreach (@{$self->{_datasets}}) {
|
foreach (@{$self->{_datasets}}) {
|
||||||
push (@{$self->{_lines}}, {
|
push (@{$self->{_lines}}, {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue