package Chart::OFC::Pie; { $Chart::OFC::Pie::VERSION = '0.11'; } use strict; use warnings; use Moose; use MooseX::StrictConstructor; use Chart::OFC::Types; extends 'Chart::OFC'; has dataset => ( is => 'ro', isa => 'Chart::OFC::Dataset', required => 1, ); has slice_colors => ( is => 'ro', isa => 'Chart::OFC::Type::NonEmptyArrayRefOfColors', coerce => 1, lazy => 1, default => sub { [ qw( red blue green yellow orange purple black ) ] }, ); has line_color => ( is => 'ro', isa => 'Chart::OFC::Type::Color', coerce => 1, default => '#000000', ); has labels => ( is => 'ro', isa => 'Chart::OFC::Type::NonEmptyArrayRef', required => 1, auto_deref => 1, ); has label_style => ( is => 'ro', isa => 'Str', default => 'color: #000000', ); has opacity => ( is => 'ro', isa => 'Chart::OFC::Type::Opacity', default => '80', ); sub BUILD { my $self = shift; my @l = $self->labels(); my @v = $self->dataset()->values(); die 'You must have the same number of labels and values.' unless @l == @v; return; } override _ofc_data_lines => sub { my $self = shift; return ( super(), $self->_data_line( 'pie', $self->opacity(), $self->line_color(), $self->_formatted_label_style(), ), $self->_data_line( 'pie_labels', $self->labels() ), $self->_data_line( 'colours', @{ $self->slice_colors() } ), $self->dataset()->_ofc_data_lines(), ); }; sub _formatted_label_style { my $self = shift; my $style = $self->label_style(); return unless length $style; return '{ ' . $self->label_style() . ' }'; } no Moose; __PACKAGE__->meta()->make_immutable(); 1; # ABSTRACT: A pie chart =pod =head1 NAME Chart::OFC::Pie - A pie chart =head1 VERSION version 0.11 =head1 SYNOPSIS my $dataset = Chart::OFC::Dataset->new( values => [ 1 .. 5] ); my $pie = Chart::OFC::Pie->new( title => 'My Pie Chart', dataset => $dataset, ); =head1 DESCRIPTION This class represents a pie chart. A pie chart displays a single dataset as a set of pie slices. =head1 ATTRIBUTES This class is a subclass of C and accepts all of that class's attribute. It has several attributes of its own which may be passed to the C method. =head2 dataset This should be a single dataset of the C class. (It could be any Dataset subclass, but all the subclass's attributes will be ignored). This attribute is required. =head2 slice_colors This should an array of colors. If you give fewer colors than there are in your dataset then colors will be reused (in order). This defaults to "red, blue, green, yellow, orange, purple, black". =head2 line_color The colors of the lines which define slices. Defaults to #000000 (black). =head2 labels This should be an array reference containing one or more labels for the slices. This should contain one label per valuable in the dataset. =head2 label_style A snippet of CSS that will be applied to the labels. The default is "color: #000000". If you change this you should probably make sure to include a color. =head2 opacity This defines how opaque the slices are. When they are moused over, they become fully opaque. Defaults to 80 (percent). =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2012 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut __END__