App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Gtk2/View.pm  view on Meta::CPAN

       adjust_imputation => $viewstyle->{'adjust_imputation'},
       adjust_rollovers  => $viewstyle->{'adjust_rollovers'});
  }

  my $timebase_class = $self->{'timebase_class'};
  if (! $series->timebase->isa ($timebase_class)) {
    ### collapse to: $timebase_class
    $series = $series->collapse ($timebase_class);
  }

  my $timebase = $series->timebase;
  $haxis->set(timebase => $timebase);

  my $graphstyles = $viewstyle->{'graphs'} || [];
  my $graphs = $self->{'graphs'};

  require App::Chart::Gtk2::Graph::Plugin::Latest;
  require App::Chart::Gtk2::Graph::Plugin::Today;
  require App::Chart::Gtk2::Graph::Plugin::Text;
  require App::Chart::Gtk2::Graph::Plugin::AnnLines;
  my @hrange = (0, $series->hi);
  my @today_hrange;

  for (my $i = 0; $i < @$graphstyles; $i++) {
    my $graphstyle = $graphstyles->[$i];
    my $graph = $graphs->[$i] || die;
    my $series_list = graphstyle_to_series_list ($graphstyle, $series);

    # date range for series, latest, and perhaps today
    if ($i == 0) {
      push @hrange,
        (@today_hrange = App::Chart::Gtk2::Graph::Plugin::Today->hrange ($graph, $series_list));
      push @hrange,
        (App::Chart::Gtk2::Graph::Plugin::Latest->hrange ($graph, $series_list),
         App::Chart::Gtk2::Graph::Plugin::Text->hrange ($graph, $series_list),
         App::Chart::Gtk2::Graph::Plugin::AnnLines->hrange ($graph, $series_list));
    }

    $graph->set('series_list', []);
    $graph->set('series_list', $series_list);
    my $decimals = max (0, map {$_->decimals} @$series_list);
    $graph->{'vaxis'}->set (min_decimals => $decimals);
    ### graph: "$i decimals $decimals"
  }

  require List::MoreUtils;
  my ($lower, $upper) = List::MoreUtils::minmax (@hrange);
  $upper += 2;  # +1 for inclusive, +1 for bit of margin

  # rightmost edge
  my $value = $upper;
  my $today = $today_hrange[0];
  if (defined $today) {
    if ($upper > $today + 10) {
      $value = $today + 4;
    }
  }
  $value -= $hadj->page_size;
  $lower = min ($lower, $value);

  ### View decide hadj: "$lower to $upper, value=$value"
  Gtk2::Ex::AdjustmentBits::set_maybe ($hadj,
                                       lower => $lower,
                                       upper => $upper,
                                       value => $value);
  ### View hadj: $hadj->lower." to $upper =",$timebase->to_iso($upper)
  my ($lo, $hi) = $hadj->value_range_inc;

  foreach my $graph (@$graphs) {
    $graph->update_v_range;

    #     my $series_list = $graph->{'series_list'};
    #     my $this_series = $series_list->[0] || next;
    #
    #     my ($p_lo, $p_hi) = $this_series->range ($lo, $hi);
    #     if (! defined $p_lo) {
    #       $p_hi = $p_lo = 0;
    #     }
    #     ### View graph vrange: "$p_lo $p_hi"
    #     Gtk2::Ex::AdjustmentBits::set_maybe ($graph->get('vadjustment'),
    #                                          lower => $p_lo,
    #                                          upper => $p_hi);
  }
}

sub graphstyle_to_series_list {
  my ($graphstyle, $series) = @_;
  ### View graphstyle_to_series_list()
  my @series_list;

  # top-level series goes into upper graph only
  if (exists $graphstyle->{'linestyle'}
      && ($graphstyle->{'linestyle'}||'') ne 'None') {
    $series->linestyle($graphstyle->{'linestyle'});
    push @series_list, $series;
  }

  foreach my $indicatorstyle (@{$graphstyle->{'indicators'}}) {
    my $key = $indicatorstyle->{'key'} || next;
    if ($key eq 'None') { next; }
    ### $indicatorstyle

    if (! $series->can($key)) {
      warn "Ignoring unknown indicator '$key'";
      next;
    }

    require App::Chart::IndicatorInfo;
    my $info = App::Chart::IndicatorInfo->new ($key);
    my @params;
    foreach my $paraminfo (@{$info->parameter_info}) {
      my $paramkey = $paraminfo->{'key'};
      push @params, ($indicatorstyle->{$paramkey}
                     // $paraminfo->{'default'});
    }
    ### @params
    my $derived = $series->$key (@params);
    push @series_list, $derived;
  }
  return \@series_list;
}



( run in 1.828 second using v1.01-cache-2.11-cpan-39bf76dae61 )