App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Gtk2/View.pm view on Meta::CPAN
($self, $self->{'hscroll'}, 0,1, $y,$y+1,
['fill','shrink','expand'],
['fill','shrink'], 0,0);
$y++;
if (my $cross = $self->{'crosshair_object'}) {
### _update_attach() cross widgets: "@$graphs"
$cross->set (widgets => $graphs);
}
$self->resize (3, $y);
}
sub _make_graph {
my ($self) = @_;
require App::Chart::Gtk2::Graph;
require App::Chart::Gtk2::AdjScale;
my $vadj = App::Chart::Gtk2::AdjScale->new (orientation => 'vertical',
inverted => 1);
my $graph = App::Chart::Gtk2::Graph->new (hadjustment => $self->{'hadjustment'},
vadjustment => $vadj);
$graph->{'heading_in_graph'} = 1;
$vadj->set (widget => $graph);
$graph->signal_connect (button_press_event => \&_do_graph_button_press);
require Gtk2::Ex::NumAxis;
my $vaxis = $graph->{'vaxis'}
= Gtk2::Ex::NumAxis->new (adjustment => $vadj,
inverted => 1);
$vaxis->signal_connect (number_to_text => \&_vaxis_number_to_text);
require Gtk2::Ex::NoShrink;
$graph->{'noshrink'} = Gtk2::Ex::NoShrink->new (child => $vaxis);
my $vscroll = $graph->{'vscroll'} = Gtk2::VScrollbar->new ($vadj);
$vscroll->set_inverted (1);
$vaxis->add_events (['button-press-mask',
'button-motion-mask',
'button-release-mask']);
$vaxis->signal_connect (button_press_event => \&_do_vaxis_button_press);
$graph->show_all;
return $graph;
}
sub _vaxis_number_to_text {
my ($axis, $number, $decimals) = @_;
return App::Chart::number_formatter()->format_number ($number, $decimals, 1);
}
sub _do_vaxis_button_press {
my ($vaxis, $event) = @_;
if ($event->button == 1) {
require Gtk2::Ex::Dragger;
my $dragger = ($vaxis->{'dragger'} ||=
Gtk2::Ex::Dragger->new
(widget => $vaxis,
vadjustment => $vaxis->get('adjustment'),
vinverted => 1,
cursor => 'sb-v-double-arrow',
confine => 1));
$dragger->start ($event);
}
return Gtk2::EVENT_PROPAGATE;
}
sub _set_symbol {
my ($self, $symbol) = @_;
if (! $symbol) { return; }
_init_graphs ($self);
my $hadj = $self->{'hadjustment'};
my $haxis = $self->{'haxis'};
if (! $symbol) {
foreach my $graph (@{$self->{'graphs'}}) {
$graph->set('series_list', []);
$graph->get('vadjustment')->empty
}
$hadj->empty;
return;
}
require App::Chart::Series::Database;
my $series = App::Chart::Series::Database->new ($symbol);
my $viewstyle = $self->{'viewstyle'};
if ($viewstyle->{'adjust_splits'}
|| $viewstyle->{'adjust_dividends'}
|| $viewstyle->{'adjust_rollovers'}) {
require App::Chart::Series::Derived::Adjust;
$series = App::Chart::Series::Derived::Adjust->derive
($series,
adjust_splits => $viewstyle->{'adjust_splits'},
adjust_dividends => $viewstyle->{'adjust_dividends'},
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++) {
( run in 0.552 second using v1.01-cache-2.11-cpan-39bf76dae61 )