cvsuser     05/11/08 19:39:37

  Modified:    App-Widget-ChartDirector/lib/App/Widget ChartDirector.pm
  Log:
  use continuous rather than enumerated x-axis for numeric and date dimensions
  
  Revision  Changes    Path
  1.3       +66 -44    
p5ee/App-Widget-ChartDirector/lib/App/Widget/ChartDirector.pm
  
  Index: ChartDirector.pm
  ===================================================================
  RCS file: 
/cvs/public/p5ee/App-Widget-ChartDirector/lib/App/Widget/ChartDirector.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ChartDirector.pm  8 Nov 2005 17:43:46 -0000       1.2
  +++ ChartDirector.pm  9 Nov 2005 03:39:36 -0000       1.3
  @@ -10,6 +10,9 @@
   use App::Widget::Graph;
   @ISA = ( "App::Widget::Graph" );
   
  +use Date::Format;
  +use Date::Parse;
  +
   use strict;
   
   =head1 NAME
  @@ -280,39 +283,6 @@
           $legend->setMargin(5);
       }
   
  -    #if ($x && $#$x > -1) {
  -    #    if ($x->[0] =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  -    #        my $begin_yr  = $1;
  -    #        my $begin_mon = $2;
  -    #        my $begin_day = $3;
  -    #        my $begin_time = &perlchartdir::chartTime($1, $2, $3);
  -    #        my ($end_time, $end_yr, $end_mon, $end_day);
  -    #        if ($x->[$#$x] =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  -    #            $end_yr   = $1;
  -    #            $end_mon  = $2;
  -    #            $end_day  = $3;
  -    #            $end_time = &perlchartdir::chartTime($1, $2, $3);
  -    #        }
  -    #        $c->xAxis()->setDateScale($begin_time, $end_time);
  -    #        my (@x_date);
  -    #        for (my $i = 0; $i <= $#$x; $i++) {
  -    #            if ($x->[$i] =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  -    #                $x_date[$i] = &perlchartdir::chartTime($1, $2, $3);
  -    #            }
  -    #            else {
  -    #                $x_date[$i] = $perlchartdir::NoValue;
  -    #            }
  -    #        }
  -    #        $spec->{x} = [EMAIL PROTECTED];
  -    #        #$c->xAxis()->setDateFormat("{value|mm/dd}");
  -    #    }
  -    #    else {
  -    #        $c->xAxis()->setLabels($x);
  -    #    }
  -    #}
  -    $c->xAxis()->setLabels($x);
  -
  -    $c->xAxis()->setTitle($spec->{x_title}) if ($spec->{x_title});
       $c->yAxis()->setTitle($spec->{y_title}) if ($spec->{y_title});
       $c->setBackground(0xbbbbff);
       #$c->setBackground(perlchartdir::metalColor(0xaaaaff));
  @@ -406,11 +376,11 @@
       my $c = $self->new_xy_chart($spec);
       my $x  = $self->get_x($spec);
       my $yn = $self->get_y($spec);
  +    my ($layer);
       if ($#$yn > 0) {
           if ($spec->{stacked}) {
               my $three_d_depth = $spec->{"3D"} ? 8 : 0;
  -            my $layer = $c->addBarLayer2($perlchartdir::Stack, 
$three_d_depth);
  -            #$layer->setXData($x);
  +            $layer = $c->addBarLayer2($perlchartdir::Stack, $three_d_depth);
               my $y_labels = $spec->{y_labels} || [];
               for (my $i = 0; $i <= $#$yn; $i++) {
                   $layer->addDataSet($yn->[$i], -1, $y_labels->[$i]);
  @@ -421,8 +391,7 @@
               #$layer->setDataLabelStyle();
           }
           else {
  -            my $layer = $c->addBarLayer2($perlchartdir::Side, $#$yn + 1);
  -            #$layer->setXData($x);
  +            $layer = $c->addBarLayer2($perlchartdir::Side, $#$yn + 1);
               my $y_labels = $spec->{y_labels} || [];
               for (my $i = 0; $i <= $#$yn; $i++) {
                   $layer->addDataSet($yn->[$i], -1, $y_labels->[$i]);
  @@ -445,14 +414,63 @@
           }
       }
       elsif ($#$yn > -1) {
  -        my $layer = $c->addBarLayer($yn->[0]);
  -        #$layer->setXData($x);
  +        $layer = $c->addBarLayer($yn->[0]);
           $layer->set3D() if ($spec->{"3D"});
       }
  +
  +    $self->set_x_axis($spec, $c, $layer, $x);
  +
       $c->makeChart($spec->{image_path});
       &App::sub_exit() if ($App::trace);
   }
   
  +sub set_x_axis {
  +    my ($self, $spec, $chart, $layer, $x) = @_;
  +    my $x_title = $spec->{x_title} || "";
  +    if ($x && $#$x > -1) {
  +        my ($begin_datetime, $end_datetime, $begin_time, $end_time, 
$begin_yr, $end_yr);
  +        if ($x->[0] =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
  +            #my $bar_offset = ($spec->{graphtype} =~ /bar/) ? 24*3600 : 0;
  +            my $bar_offset = 0;
  +            $begin_datetime = $bar_offset ? time2str("%Y-%m-%d", 
str2time($x->[0]) - $bar_offset) : $x->[0];
  +            if ($begin_datetime =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  +                $begin_yr   = $1;
  +                $begin_time = &perlchartdir::chartTime($1, $2, $3);
  +            }
  +            $end_datetime = $bar_offset ? time2str("%Y-%m-%d", 
str2time($x->[$#$x]) + $bar_offset) : $x->[$#$x];
  +            if ($end_datetime =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  +                $end_yr   = $1;
  +                $end_time = &perlchartdir::chartTime($1, $2, $3);
  +            }
  +            $chart->xAxis()->setDateScale($begin_time, $end_time);
  +            my (@x_date);
  +            for (my $i = 0; $i <= $#$x; $i++) {
  +                if ($x->[$i] =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/) {
  +                    $x_date[$i] = &perlchartdir::chartTime($1, $2, $3);
  +                }
  +                else {
  +                    $x_date[$i] = $perlchartdir::NoValue;
  +                }
  +            }
  +            $x_title .= " " if ($x_title);
  +            $x_title .= "($begin_yr";
  +            $x_title .= "-$end_yr" if ($end_yr ne $begin_yr);
  +            $x_title .= ")";
  +            $chart->xAxis()->setLabelFormat("{value|mm/dd}");
  +            $layer->setXData([EMAIL PROTECTED]);
  +        }
  +        elsif ($x->[0] =~ /^[0-9]+$/) {
  +            $layer->setXData($x);
  +        }
  +        else {
  +            $chart->xAxis()->setLabels($x);
  +        }
  +    }
  +    if ($spec->{graphtype} ne "pie" && $spec->{graphtype} ne "meter") {
  +        $chart->xAxis()->setTitle($x_title) if ($x_title);
  +    }
  +}
  +
   sub write_line_graph_image {
       &App::sub_entry if ($App::trace);
       my ($self, $spec) = @_;
  @@ -511,6 +529,9 @@
           $label_format = "{value|0}" if ($label_format eq "1");
           $layer->setDataLabelFormat($label_format);
       }
  +
  +    $self->set_x_axis($spec, $c, $layer, $x);
  +
       $c->makeChart($spec->{image_path});
       &App::sub_exit() if ($App::trace);
   }
  @@ -621,6 +642,7 @@
       $value = $y_max if ($value > $y_max);
       $value = 0 if ($value < 0);
       $c->addPointer($value, 0x40666699, 0x0);
  +    $c->xAxis()->setLabels($x);
       $c->makeChart($spec->{image_path});
       &App::sub_exit() if ($App::trace);
   }
  @@ -631,12 +653,12 @@
       my $c = $self->new_pie_chart($spec);
       my $x = $self->get_x($spec);
       my $yn = $self->get_y($spec);
  +    my $y = $yn->[0];
       if ($#$yn > 0) {
       }
  -    else {
  -    }
  -    $c->setData($yn->[0], $x);
  +    $c->setData($y, $x);
       $c->set3D() if ($spec->{"3D"});
  +    $c->xAxis()->setLabels($x);
       $c->makeChart($spec->{image_path});
       &App::sub_exit() if ($App::trace);
   }
  
  
  

Reply via email to