App-Chart

 view release on metacpan or  search on metacpan

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

  $self->{$pname} = $newval;  # per default GET_PROPERTY

  # $pname eq 'symbol'
  _update_model_contents ($self);
  _update_parent_sensitive ($self);
}

sub _do_notify {
  my ($self, $pspec) = @_;
  ### WeblinkMenu _do_notify: $pspec->get_name
  if ($pspec->get_name eq 'attach_widget') {
    my $parent = $self->get_attach_widget;
    ### attached: "$parent"
    ### model: $self->get('model')
    $self->{'connp'} = Glib::Ex::ConnectProperties->dynamic
      ([$self->get('model'), 'model-rows#not-empty'],
       [$parent, 'sensitive']);
  }
  # return shift->signal_chain_from_overridden(@_);
}

sub _update_model_contents {
  my ($self) = @_;
  ### WeblinkMenu _update_model_contents()
  my $model = $self->get('model');
  my $symbol = $self->get('symbol');
  my $i = 0;
  if (defined $symbol) {
    foreach my $weblink (App::Chart::Weblink->links_for_symbol ($symbol)) {
      my $iter = $model->iter_nth_child(undef,$i++) || $model->append;
      $model->set ($iter, 0 => $weblink);
    }
  }
  while (my $iter = $model->iter_nth_child(undef,$i)) {
    $model->remove ($iter);
  }
}
sub _update_parent_sensitive {
  my ($self) = @_;
  return;

  ### WeblinkMenu _update_parent_sensitive: $self->get_attach_widget
  my $parent_item = $self->get_attach_widget || return;
  my $model = $self->get('model');
  $parent_item->set_sensitive ($model->get_iter_first);
}

# 'item-create-or-update' class closure handler
sub _do_item_create_or_update {
  my ($self, $item, $model, $path, $iter) = @_;
  my $weblink = $model->get_value ($iter, 0);
  if (! $item) {
    $item = Gtk2::MenuItem->new_with_label ('');
    $item->show;
  }
  $item->get_child->set_text_with_mnemonic ($weblink->name);
  set_property_maybe
    ($item,
     sensitive      => $weblink->sensitive($self->get('symbol')),
     # tooltip-markup new in 2.12
     tooltip_markup => Glib::Markup::escape_text($weblink->{'desc'} || ''));
  return $item;
}

# 'activate' class closure
sub _do_activate {
  my ($self, $item, $model, $path, $iter) = @_;
  my $weblink = $model->get_value ($iter, 0);
  my $symbol = $self->get('symbol');
  $weblink->open ($symbol);
}

1;
__END__

=for stopwords weblinks weblink WeblinkMenu

=head1 NAME

App::Chart::Gtk2::WeblinkMenu -- menu of weblinks for stock symbol

=head1 SYNOPSIS

 use App::Chart::Gtk2::WeblinkMenu;
 my $menu = App::Chart::Gtk2::WeblinkMenu->new;

=head1 DESCRIPTION

A App::Chart::Gtk2::WeblinkMenu widget displays a menu of the weblinks (see
L<App::Chart::Weblink>) for a given stock symbol.  Clicking on one of the
menu items opens the corresponding weblink in a browser as per
C<< $weblink->open >>.

    +---------------------------+
    | FOOEX Company Information |
    | Google Stock Page         |
    | Yahoo Stock Page          |
    +---------------------------+

Any parent menu item holding the WeblinkMenu is set sensitive or insensitive
according to whether there's weblinks for the given symbol, including
insensitive when the symbol is the empty string.

=head1 WIDGET HIERARCHY

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

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

=head1 FUNCTIONS

=over 4

=item C<< App::Chart::Gtk2::WeblinkMenu->new (key=>value,...) >>

Create and return a new C<App::Chart::Gtk2::WeblinkMenu> object.  Optional
key/value pairs can be given to set initial properties as per



( run in 2.743 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )