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 )