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 )