App-Chart

 view release on metacpan or  search on metacpan

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

    $item->signal_connect (activate => \&_do_intraday);
    $self->append ($item);
  }
  {
    my $item = Gtk2::MenuItem->new_with_mnemonic (__('_Web'));
    $self->append ($item);
    require App::Chart::Gtk2::WeblinkMenu;
    my $weblinkmenu = $self->{'weblinkmenu'} = App::Chart::Gtk2::WeblinkMenu->new;
    $item->set_submenu ($weblinkmenu);
  }
  $self->show_all;
}

sub SET_PROPERTY {
  my ($self, $pspec, $newval) = @_;
  my $pname = $pspec->get_name;
  $self->{$pname} = $newval;  # per default GET_PROPERTY

  if ($pname eq 'symbol') {
    my $symbol = $newval;
    $self->{'menu_title'}->set_text ($symbol);
    $self->{'menu_intraday'}->set_sensitive
      (App::Chart::Gtk2::WatchlistDialog::symbol_intraday_sensitive($symbol));
    $self->{'weblinkmenu'}->set (symbol => $symbol);
  }
}

# open the main chart display on the current symbol
sub _do_chart {
  my ($menuitem) = @_;
  my $self = $menuitem->get_ancestor (__PACKAGE__);
  require App::Chart::Gtk2::Main;
  my $main = App::Chart::Gtk2::Main->find_for_dialog ($self->{'watchlist'});
  $main->goto_symbol ($self->{'symbol'}, $self->{'symlist'});
  $main->present;
}

sub _do_refresh {
  my ($menuitem) = @_;
  my $self = $menuitem->get_ancestor (__PACKAGE__);
  require App::Chart::Gtk2::Job::Latest;
  App::Chart::Gtk2::Job::Latest->start ([$self->{'symbol'}]);
}

sub _do_intraday {
  my ($menuitem) = @_;
  my $self = $menuitem->get_ancestor(__PACKAGE__) || return;
  ### WatchlistSymbolMenu intraday: $self->{'symbol'}
  App::Chart::Gtk2::Ex::ToplevelBits::popup
      ('App::Chart::Gtk2::IntradayDialog',
       properties => { symbol => $self->get('symbol') },
       screen => $self);
}

sub popup_from_treeview {
  my ($class_or_self, $event, $treeview) = @_;
  my $self = ref $class_or_self ? $class_or_self : $class_or_self->new;

  my $watchlist = $treeview->get_toplevel;
  require Scalar::Util;
  Scalar::Util::weaken ($self->{'watchlist'} = $watchlist);

  my ($path) = $treeview->get_path_at_pos ($event->x, $event->y);
  if (! $path) { return; }

  my $model = $treeview->get_model;  # App::Chart::Gtk2::WatchlistModel
  my $symlist = $model->get_symlist;
  my $iter = $symlist->get_iter ($path);
  my $symbol = $symlist->get_value ($iter, $model->COL_SYMBOL);
  $self->set (symbol => $symbol,
              symlist => $symlist);
  $self->set_screen ($treeview->get_screen);
  $self->popup (undef, undef, undef, undef, $event->button, $event->time);
}

1;
__END__

=for stopwords watchlist Watchlist WatchlistSymbolMenu Popup undef clickable symlist

=head1 NAME

App::Chart::Gtk2::WatchlistSymbolMenu -- menu for watchlist symbol

=for test_synopsis my ($event, $treeview)

=head1 SYNOPSIS

 use App::Chart::Gtk2::WatchlistSymbolMenu;
 App::Chart::Gtk2::WatchlistSymbolMenu->popup_from_treeview ($event, $treeview);

=head1 WIDGET HIERARCHY

C<App::Chart::Gtk2::WatchlistSymbolMenu> is a subclass of C<Gtk::Menu>,

    Gtk2::Widget
      Gtk2::Container
        Gtk2::MenuShell
          Gtk2::Menu
            App::Chart::Gtk2::WatchlistSymbolMenu

=head1 DESCRIPTION

A C<App::Chart::Gtk2::WatchlistSymbolMenu> shows the following things which can be
done from a symbol in the Watchlist.  It's split out from the main Watchlist
code to keep the size there down and since it may not be needed at all if
not used.

    +----------+
    | <SYMBOL> |
    +----------+
    | Chart    |    view the full chart
    | Refresh  |    get a new quote
    | Intraday |    view an intraday graph
    | Web >    |    web links from App::Chart::Gtk2::WeblinkMenu
    +----------+

=head1 FUNCTIONS

=over 4



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