Gtk2-Ex-MenuView

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

examples/twiddle.pl
inc/my_pod2html
lib/Gtk2/Ex/MenuView.pm
lib/Gtk2/Ex/MenuView/Menu.pm
Makefile.PL
MANIFEST			This list of files
MANIFEST.SKIP
README
SIGNATURE
t/MenuView-display.t
t/MenuView-weaken.t
t/MenuView.t
t/MyTestHelpers.pm
xt/0-file-is-part-of.t
xt/0-META-read.t
xt/0-no-debug-left-on.t
xt/0-Test-ConsistentVersion.t
xt/0-Test-DistManifest.t
xt/0-Test-Pod.t
xt/0-Test-Synopsis.t
xt/0-Test-YAML-Meta.t

SIGNATURE  view on Meta::CPAN

SHA256 78a05839414d391bf5c526c68d820ae783a5ce63bb3f976e7981cfe49d360dbf examples/builder.pl
SHA256 450996ae1ebf217723eeef43a6606af0f9f2f706fce3f563ac70372d5e1b031b examples/cellview.pl
SHA256 95ff403b66d4f02904305f05c956f776558f8c95ec4c3e779a5879a02231162b examples/checkitem.pl
SHA256 e96f90fa2de6ad17403b3819348ef7371c5fd43d6307e5e7d5e8a00010ed0d43 examples/radiogroup.pl
SHA256 d13edab4b63e63d40ec10803cd3620b946b1f72dec82005ec648da8936f568c4 examples/simple.pl
SHA256 6ddfd51c4b99471b28acad1be50e27139ef0ec953d9c942a37dd3f7502bceeb7 examples/twiddle.pl
SHA256 28bec8fe29b497164cfeac7aa1707d8ed81874bb08ccda5b7a490b0869f4a3ca inc/my_pod2html
SHA256 9a4843a45f028ee9c79d11d2981732dc250bc439fdb76473b04334641e2dfc50 lib/Gtk2/Ex/MenuView.pm
SHA256 690053b65d865a4aa1688ee4c0f10852090127666c629b34452afde6bf95c26c lib/Gtk2/Ex/MenuView/Menu.pm
SHA256 8c25c28c2e01dcf1ec8d9fe377939b0b5a08ba17f98c28f2c575652d357d8b85 t/MenuView-display.t
SHA256 6fbf67fe0573e42427fb37fdbe52a8d5cc01d8e384b6c8b691431f398557665b t/MenuView-weaken.t
SHA256 197f63a8e50f231f03a4d4a8d3ac113accaa84e73fa906d3fd910ab53dbc8e15 t/MenuView.t
SHA256 91cd2bba3e246abf05c342ed549ed6d902e8a77a43b6c9c4e092e4c918732ac0 t/MyTestHelpers.pm
SHA256 ef75312e02ddcfed7095de7eecebc6b7b863d56acd9b64142737ab7a5edb57e3 xt/0-META-read.t
SHA256 f03d4741c4e6dd385c7bafa06118082bad4809a64e28a094635324ef8ab4f3e5 xt/0-Test-ConsistentVersion.t
SHA256 be42622f3841d04240cb1284e6b30e1af81cb0fcb56d29e853c70af656653488 xt/0-Test-DistManifest.t
SHA256 48b441e0c335e93946d913897e342662387788833229c5ba5fac57f0ff3d567c xt/0-Test-Pod.t
SHA256 2e1e1d896a226aeb190cdcfbe83969f634c1be3e7344302e023915e3f7150732 xt/0-Test-Synopsis.t
SHA256 d33b48c1986680cd934565250bd9e3879674dfe6aad69b1717ed76354a29ff44 xt/0-Test-YAML-Meta.t
SHA256 75a73148514fad2715873d1e02a6fa8e3b9cc43f7aff97aaffac9721c086a319 xt/0-file-is-part-of.t
SHA256 6bdbe1a3a52562b120ddac9fab256ef581e65f5b189422c0ccdb968915b6269c xt/0-no-debug-left-on.t

lib/Gtk2/Ex/MenuView.pm  view on Meta::CPAN

#    my ($self) = @_;
# }

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

  if ($pname eq 'model') {
    my $model = $newval;
    Scalar::Util::weaken (my $weak_self = $self);
    my $ref_weak_self = \$weak_self;
    $self->{'model_ids'} = $model && Glib::Ex::SignalIds->new
      ($model,
       $model->signal_connect (row_changed => \&_do_row_changed,
                               $ref_weak_self),
       $model->signal_connect (row_deleted => \&_do_row_deleted,
                               $ref_weak_self),
       $model->signal_connect (row_inserted => \&_do_row_inserted,
                               $ref_weak_self),
       $model->signal_connect (rows_reordered => \&_do_rows_reordered,

lib/Gtk2/Ex/MenuView.pm  view on Meta::CPAN

# }


#------------------------------------------------------------------------------
# dirtiness etc

sub _idle_freshen {
  my ($menu) = @_;
  if ($menu->mapped) {
    my $self = $menu->_get_menuview;
    Scalar::Util::weaken (my $weak_self = $self);
    $self->{'idle'} ||= Glib::Ex::SourceIds->new
      (Glib::Idle->add (\&_do_idle, \$weak_self,
                        Gtk2::GTK_PRIORITY_RESIZE - 1)); # just before resize
  }
}
sub _do_idle {
  my ($ref_weak_self) = @_;
  ### _do_idle
  my $self = $$ref_weak_self || return;
  delete $self->{'idle'};

lib/Gtk2/Ex/MenuView.pm  view on Meta::CPAN


=head2 Radio Button Items

C<Gtk2::RadioMenuItem> is a subclass of C<Gtk2::CheckMenuItem> so the above
L</Check Items> notes apply to it too.

When creating or updating a C<Gtk2::RadioMenuItem> the "group" is set by
passing another radio item widget to group with.  Currently there's not much
in MenuView to help you find a widget to group with.

Keeping group members in a weakened bucket is one possibility.  For
top-level rows another is C<< $menuview->get_children >> (the
C<Gtk2::Container> method) to find a suitable existing group item.  If radio
items are all you ever have in the menu then just the first (if any) will be
enough.

Calling C<< $menuview->item_at_path >> to get another row is no use because
you don't want to create new items, only find an existing one.  In the
future there'll probably be some sort of get current item at path if exists,
or get existing items and paths, or get current items in submenu, or get
submenu widget, etc.

t/MenuView-display.t  view on Meta::CPAN


  my $item = $menuview->item_at_indices(0);
  isa_ok ($item, 'Gtk2::MenuItem');
  isnt ($err, undef, 'bad recurse - expect error');
  like ($err, qr/Recursive item create or update/,
        'bad recurse - error message');
}

#------------------------------------------------------------------------------

# destroyed when weakened on unrealized
{
  my $menuview = Gtk2::Ex::MenuView->new;
  my $weak_menuview = $menuview;
  require Scalar::Util;
  Scalar::Util::weaken ($weak_menuview);
  $menuview = undef;
  MyTestHelpers::main_iterations();
  ok (! defined $weak_menuview);
}

# destroyed when weakened with model
{
  my $liststore = Gtk2::ListStore->new ('Glib::String');
  $liststore->insert_with_values (0, 0=>'foo');

  my $menuview = Gtk2::Ex::MenuView->new (model => $liststore);
  ok (MyTestHelpers::any_signal_connections($liststore));
  my $weak_menuview = $menuview;
  require Scalar::Util;
  Scalar::Util::weaken ($weak_menuview);
  $menuview = undef;
  MyTestHelpers::main_iterations();

  ok (! defined $weak_menuview);
  ok (! MyTestHelpers::any_signal_connections($liststore),
      'no leftover model signal connections');
}



t/MenuView-weaken.t  view on Meta::CPAN


use strict;
use warnings;
use Gtk2::Ex::MenuView;
use Test::More;

use lib 't';
use MyTestHelpers;

# Test::Weaken 3.010 for constructor multiple values
my $have_test_weaken = eval "use Test::Weaken 3.010;
                             use Test::Weaken::Gtk2;
                             1";
if (! $have_test_weaken) {
  plan skip_all => "due to Test::Weaken 3 and/or Test::Weaken::Gtk2 not available -- $@";
}
diag ("Test::Weaken version ", Test::Weaken->VERSION);

require Gtk2;
Gtk2->disable_setlocale;  # leave LC_NUMERIC alone for version nums
my $have_display = Gtk2->init_check;
if (! $have_display) {
  plan skip_all => "due to no DISPLAY";
}

t/MyTestHelpers.pm  view on Meta::CPAN

                                          ? "$obj->{$_}" : '[undef]')}
                              keys %$obj));
  }
  if (eval { require Devel::FindRef }) {
    MyTestHelpers::diag (Devel::FindRef::track($obj, 8));
  } else {
    MyTestHelpers::diag ("Devel::FindRef not available -- ", $@);
  }
}

sub test_weaken_show_leaks {
  my ($leaks) = @_;
  $leaks || return;

  my $unfreed = $leaks->unfreed_proberefs;
  my $unfreed_count = scalar(@$unfreed);
  MyTestHelpers::diag ("Test-Weaken leaks $unfreed_count objects");
  MyTestHelpers::dump ($leaks);

  my $proberef;
  foreach $proberef (@$unfreed) {



( run in 1.170 second using v1.01-cache-2.11-cpan-65fba6d93b7 )