App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Gtk2/IntradayDialog.pm view on Meta::CPAN
} elsif ($response eq RESPONSE_SAVE) {
require App::Chart::Gtk2::IntradaySave;
App::Chart::Gtk2::IntradaySave->popup ($self);
} elsif ($response eq RESPONSE_PRINT) {
$self->print_image;
} elsif ($response eq 'close') {
# as per a keyboard close, defaults to raising 'delete-event', which in
# turn defaults to a destroy
$self->signal_emit ('close');
} elsif ($response eq 'help') {
require App::Chart::Manual;
App::Chart::Manual->open(__p('manual-node','Intraday'), $self);
}
}
sub _update_title_label {
my ($self) = @_;
my $title_label = $self->{'title_label'};
my $symbol = $self->{'symbol'};
my $mode = $self->{'mode'};
my $handler
= App::Chart::IntradayHandler->handler_for_symbol_and_mode ($symbol, $mode);
my $modename = ($handler ? $handler->name_sans_mnemonic : '');
$title_label->set_text ($symbol
? __x('Chart: Intraday: {symbol} - {modename}',
symbol => $symbol,
modename => $modename)
: __('Chart: Intraday'));
}
# 'status-change' signal emission hook
sub _do_job_status_changed {
my ($invocation_hint, $param_list, $ref_weak_self) = @_;
my $self = $$ref_weak_self || return 0; # disconnect
_update_job_status ($self);
return 1; # stay connected
}
sub _update_job_status {
my ($self) = @_;
### IntradayDialog update job status
my $symbol = $self->{'symbol'};
my $mode = $self->{'mode'};
my $job = App::Chart::Gtk2::Job::Intraday->find ($symbol, $mode);
my $job_running = ($job && $job->is_stoppable);
### job: $job
my $status_str = ($job ? __('Download: ') . $job->status : '');
$self->{'progress_label'}->set_text ($status_str);
### status: $job && $job->status
$self->set_response_sensitive (RESPONSE_REFRESH,
$symbol && $mode && ! $job_running);
if ($job_running) {
# created when first needed for a running job
$self->{'widgetcursor'} ||= do {
require Gtk2::Ex::WidgetCursor;
Gtk2::Ex::WidgetCursor->new (widgets => [ $self->{'image'},
$self->{'refresh_button'} ],
cursor => 'watch',
priority => 10);
};
}
if (my $wcursor = $self->{'widgetcursor'}) {
$wcursor->active ($job_running);
}
}
sub _do_accel_redraw {
my ($accelgroup, $self, $keyval, $modifiers) = @_;
$self->queue_draw;
}
sub popup {
my ($class, $symbol, $parent) = @_;
if (! defined $symbol) { $symbol = ''; }
require App::Chart::Gtk2::Ex::ToplevelBits;
return App::Chart::Gtk2::Ex::ToplevelBits::popup
($class,
properties => { symbol => $symbol },
screen => $parent);
}
#------------------------------------------------------------------------------
# printing
sub print_image {
my ($self) = @_;
my $print = Gtk2::PrintOperation->new;
$print->set_n_pages (1);
if (my $settings = $self->{'print_settings'}) {
$print->set_print_settings ($settings);
}
$print->signal_connect (draw_page => \&_draw_page,
App::Chart::Glib::Ex::MoreUtils::ref_weak($self));
my $result = $print->run ('print-dialog', $self);
if ($result eq 'apply') {
$self->{'print_settings'} = $print->get_print_settings;
}
}
sub _draw_page {
my ($print, $pcontext, $pagenum, $ref_weak_self) = @_;
### _draw_page()
my $self = $$ref_weak_self || return;
my $c = $pcontext->get_cairo_context;
my $symbol = $self->{'symbol'};
my $mode = $self->{'mode'};
my $handler = App::Chart::IntradayHandler->handler_for_symbol_and_mode
($symbol, $mode);
my $modename = ($handler ? $handler->name_sans_mnemonic : '');
my $str = "$symbol - $mode";
my $dbh = App::Chart::DBI->instance;
my $sth = $dbh->prepare_cached
('SELECT image, error, fetch_timestamp FROM intraday_image WHERE symbol=? AND mode=?');
my ($blob, $error, $timestamp) = $dbh->selectrow_array
($sth, undef, $self->{'symbol'}, $self->{'mode'});
$sth->finish();
if (defined $timestamp) {
my $timet = App::Chart::Download::timestamp_to_timet($timestamp);
my $timezone = App::Chart::TZ->for_symbol ($symbol);
$str .= ' ' . POSIX::strftime ($App::Chart::option{'d_fmt'} . ' %H:%M',
( run in 1.096 second using v1.01-cache-2.11-cpan-39bf76dae61 )