Gtk2-Ex-MenuView

 view release on metacpan or  search on metacpan

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

      'want-visible "show" leaves item child not visible');
}

{
  my $store = Gtk2::ListStore->new ('Glib::String');
  $store->set ($store->append, 0 => 'foo');

  my $menuview = Gtk2::Ex::MenuView->new (model => $store,
                                          want_visible => 'no');
  is ($menuview->get('want-visible'), 'no',
      'want-visible set to "no"');

  $menuview->signal_connect
    (item_create_or_update => sub {
       my ($menuview, $item, $model, $path, $iter) = @_;
       $item = Gtk2::MenuItem->new;
       my $label = Gtk2::Label->new ('foo');
       $item->add ($label);
       return $item;
     });
  my $item = $menuview->item_at_indices (0);
  my $label = $item->get_child;
  ok (! $item->get('visible'),
      'want-visible "no" leave item not visible');
  ok (! $label->get('visible'),
      'want-visible "no" leaves item child not visible');
}

#------------------------------------------------------------------------------
# size_request

{
  # TODO:
  # local $TODO = 'size_request chaining in newer Glib';

  my $store = Gtk2::ListStore->new ('Glib::String');
  $store->set ($store->append, 0 => 'foo');
  my %created;
  my $menuview = Gtk2::Ex::MenuView->new (model => $store);
  $menuview->signal_connect
    (item_create_or_update => sub {
       my ($menuview, $item, $model, $path, $iter) = @_;
       diag "size_request create ",$path->to_string;
       $created{$path->to_string} = 'done';
       $item = Gtk2::MenuItem->new;
       my $drawing = Gtk2::DrawingArea->new;
       $drawing->set_size_request (200, 200);
       $item->add ($drawing);
       return $item;
     });
  my $req = $menuview->size_request;

  my $item_count = scalar @{[$menuview->get_children]};
  is ($item_count, 1, 'size_request - item count');
  is_deeply (\%created, {0=>'done'}, 'size_request - created paths');
  cmp_ok ($req->width, '>=', 150, 'size_request - width');
  cmp_ok ($req->height, '>=', 150, 'size_request - height');
}

#------------------------------------------------------------------------------
# popup creates items

{
  my $store = Gtk2::ListStore->new ('Glib::String');
  $store->set ($store->append, 0 => 'foo');
  $store->set ($store->append, 0 => 'bar');
  my %created;
  my $menuview = Gtk2::Ex::MenuView->new (model => $store);
  $menuview->signal_connect
    (item_create_or_update => sub {
       my ($menuview, $item, $model, $path, $iter) = @_;
       diag "create ",$path->to_string;
       $created{$path->to_string} = 'done';
       $item = Gtk2::MenuItem->new_with_label ($model->get($iter,0));
       return $item;
     });
  $menuview->popup (undef, undef, undef, undef, 1, 0);
  MyTestHelpers::wait_for_event ($menuview, 'map-event');
  my $child_count = scalar @{[$menuview->get_children]};
  is ($child_count, 2, 'popup create children - count');
  is_deeply (\%created, {0=>'done',1=>'done'},
             'popup create children - paths');
}

#------------------------------------------------------------------------------
# no signals left on model

{
  my $model = Gtk2::ListStore->new ('Glib::String');
  my $menuview = Gtk2::Ex::MenuView->new (model => $model);
  ok (MyTestHelpers::any_signal_connections($model));

  $menuview->set (model => undef);
  ok (! MyTestHelpers::any_signal_connections($model));
}

{
  my $model = Gtk2::ListStore->new ('Glib::String');
  my $menuview = Gtk2::Ex::MenuView->new (model => $model);
  ok (MyTestHelpers::any_signal_connections($model));

  my $model2 = Gtk2::ListStore->new ('Glib::String');
  $menuview->set (model => $model2);
  ok (! MyTestHelpers::any_signal_connections($model));

  ok (MyTestHelpers::any_signal_connections($model2));
}

#------------------------------------------------------------------------------
# recursive item-create-or-update

{
  my $model = Gtk2::ListStore->new ('Glib::String');
  $model->append;
  $model->append;
  my $menuview = Gtk2::Ex::MenuView->new (model => $model);
  my $item0;
  $menuview->signal_connect
    (item_create_or_update => sub {
       my ($menuview, $item, $model, $path, $iter) = @_;
       diag "item create ",$path->to_string;
       if (($path->get_indices)[0] == 1) {
         diag "recurse for item0";
         $item0 = $menuview->item_at_indices (0);
       }
       return ($item || Gtk2::MenuItem->new_with_label ($path->to_string));
     });

  isa_ok ($menuview->item_at_indices(1), 'Gtk2::MenuItem',
          'recurse - item_at_indices(1)');
  ok ($item0, 'recurse - item0 set');
  isa_ok ($item0, 'Gtk2::MenuItem', 'recurse - item0 type');
  is ($item0, $menuview->item_at_indices(0),
      'recurse - item0 same as item_at_indices(0)');
}

#------------------------------------------------------------------------------
# bad recursive item-create-or-update

{
  my $model = Gtk2::ListStore->new ('Glib::String');
  $model->append;



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