Gtk2-Ex-History

 view release on metacpan or  search on metacpan

lib/Gtk2/Ex/History/MenuToolButton.pm  view on Meta::CPAN

  my ($self) = @_;
  $self->set_stock_id ('gtk-go-back');
}

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

  if ($pname eq 'history') {
    unless ($self->get_menu) {
      $self->set_menu (Gtk2::Menu->new); # dummy to make arrow sensitive
    }
  }

  if ($pname eq 'way') {
    $self->set_stock_id ("gtk-go-$newval");
  }

  my $history = $self->{'history'};
  my $way = $self->get('way');
  if (my $menu = $self->get_menu) {
    if ($menu->isa('Gtk2::Ex::History::Menu')) {
      $menu->set (history => $history,
                  way => $way);
    }
  }
  $self->{'connp'} = $history && Glib::Ex::ConnectProperties->dynamic
    ([$history->model($way), 'model-rows#not-empty'],
     [$self, 'sensitive']);
}

sub _do_show_menu {
  my ($self) = @_;
  ### _do_show_menu()
  if (my $history = $self->{'history'}) {
    my $menu;
    unless (($menu = $self->get_menu)
            && ($menu->isa('Gtk2::Ex::History::Menu'))) {
      require Gtk2::Ex::History::Menu;
      $self->set_menu (Gtk2::Ex::History::Menu->new (history => $history,
                                                     way => $self->get('way')));
    }
  }
  shift->signal_chain_from_overridden(@_);
}

# 'clicked' class closure
sub _do_clicked {
  my ($self) = @_;
  ### History-MenuToolButton clicked: $self->get('way')
  my $history = $self->{'history'} || return;
  my $way = $self->get('way');
  $history->$way;
  return shift->signal_chain_from_overridden(@_);
}

1;
__END__

=for stopwords enum MenuToolButton popup Ryde Gtk2-Ex-History

=head1 NAME

Gtk2::Ex::History::MenuToolButton -- toolbar button for history "back" or "forward"

=for test_synopsis my ($my_history, $toolbar)

=head1 SYNOPSIS

 use Gtk2::Ex::History::MenuToolButton;
 my $item = Gtk2::Ex::History::MenuToolButton->new
              (history => $my_history,
               way => 'forward');
 $toolbar->add ($item);

=head1 OBJECT HIERARCHY

C<Gtk2::Ex::History::MenuToolButton> is a subclass of
C<Gtk2::MenuToolButton>.

    Gtk2::Widget
      Gtk2::Container
        Gtk2::Bin
          Gtk2::ToolItem
            Gtk2::ToolButton
              Gtk2::MenuToolButton
                Gtk2::Ex::History::MenuToolButton

=head1 DESCRIPTION

This is a toolbar button which invokes either C<back> or C<forward> on a
C<Gtk2::Ex::History> object.  The arrow part of the button presents a menu
of the history in that direction.

    +-------------+---+
    |             |   |
    | ==> Forward | V |
    |             |   |
    +-------------+---+
                  +---------------+
                  | Some Thing    |
                  | Another Place |
                  | Future Most   |
                  +---------------+

A plain C<Gtk2::Ex::History::Button> can be put in a C<Gtk2::ToolItem> and
used in a toolbar for a similar result.  The difference is whether you
prefer the menu popup with an arrow or with mouse button-3.  The arrow has
the advantage of a visual indication that there's something available.

=head1 FUNCTIONS

=over 4

=item C<< $item = Gtk2::Ex::History::MenuToolButton->new (key => value, ...) >>

Create and return a new history button.  Optional key/value pairs can be
given to set initial properties, as per C<< Glib::Object->new >>.

The C<history> property should be set to say what to display and act on, and
C<way> for back or forward.

    my $item = Gtk2::Ex::History::MenuToolButton->new
                  (history => $history,
                   way => 'forward');

=back

=head1 PROPERTIES

=over 4

=item C<history> (C<Gtk2::Ex::History> object, default C<undef>)

The history object to act on.

=item C<way> (enum C<Gtk2::Ex::History::Way>, default 'back')

The direction to go, either "back" or "forward".

The C<stock-id> property (per C<Gtk2::ToolButton>) is set from this, either
C<gtk-go-back> or C<gtk-go-forward>.

=back

=head1 SEE ALSO

L<Gtk2::Ex::History>,
L<Gtk2::Ex::History::Menu>,
L<Gtk2::Ex::History::Button>,
L<Gtk2::Ex::History::Action>,
L<Gtk2::MenuToolButton>

=head1 HOME PAGE

L<http://user42.tuxfamily.org/gtk2-ex-history/index.html>

=head1 LICENSE

Gtk2-Ex-History is Copyright 2010, 2011 Kevin Ryde

Gtk2-Ex-History is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

Gtk2-Ex-History is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY



( run in 0.939 second using v1.01-cache-2.11-cpan-364913b4093 )