Gtk2-Ex-MenuView

 view release on metacpan or  search on metacpan

devel/run.pl  view on Meta::CPAN

       $treestore->insert_with_values ($parent, 0, 0 => rand());
     });
  $left_vbox->pack_start ($button, 0,0,0);
}
{
  my $button = Gtk2::Button->new_with_label ('Delete');
  $button->signal_connect
    (clicked => sub {
       my $iter = $treestore->get_iter (Gtk2::TreePath->new(2));
       if ($iter) { $treestore->remove ($iter); }
     });
  $left_vbox->pack_start ($button, 0,0,0);
}
{
  my $button = Gtk2::Button->new_with_label ('Reorder Up');
  $button->signal_connect
    (clicked => sub {
       my $len = $treestore->iter_n_children (undef);
       my $end = $len - 1;
       $treestore->reorder (1 .. $end, 0);
     });
  $left_vbox->pack_start ($button, 0,0,0);
}
{
  my $button = Gtk2::Button->new_with_label ('Reorder Down');
  $button->signal_connect
    (clicked => sub {
       my $len = $treestore->iter_n_children (undef);
       my $end = $len - 1;
       $treestore->reorder ($end, 0 .. $end-1);
     });
  $left_vbox->pack_start ($button, 0,0,0);
}
{
  my $button = Gtk2::Button->new_with_label ('New Model');
  $button->signal_connect
    (clicked => sub {
       print "$progname: new model in 3 seconds\n";
       Glib::Timeout->add
           (3_000, # 3 seconds
            sub {
              print "$progname: new model now\n";
              $treestore = treestore_copy_model($treestore);
              $menuview->set (model => $treestore);
              $treeview->set (model => $treestore);
              return Glib::SOURCE_REMOVE;
            });
     });
  $left_vbox->pack_start ($button, 0,0,0);
}
{
  my $combobox = Gtk2::ComboBox->new_with_model ($treestore);
  $combobox->set (add_tearoffs => 1);
  $left_vbox->pack_start ($combobox, 0,0,0);
  my $renderer = Gtk2::CellRendererText->new;
  $renderer->set (xalign => 1); # right align
  $combobox->pack_start ($renderer, 1);
  $combobox->add_attribute ($renderer, text => 0);
}

$menuview->popup (undef, undef, undef, undef, 0, 0);
print "$progname: children ",$menuview->get_children,"\n";

$toplevel->show_all;
Gtk2->main;
exit 0;


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

# return a new Gtk2::TreeStore which is a copy of the $model contents
sub treestore_copy_model {
  my ($model) = @_;
  require Gtk2::Ex::TreeModelBits;
  my $treestore = Gtk2::TreeStore->new
    (Gtk2::Ex::TreeModelBits::all_column_types ($model));
  my @columns = (0 .. $model->get_n_columns - 1);
  $model->foreach
    (sub {
       my ($model, $path, $iter) = @_;
       my $treepath = $path->copy;
       $treepath->up;
       my $treeiter;
       if ($treepath->get_depth) {
         $treeiter = $treestore->get_iter($treepath);
       }
       print "$progname: copy ",$path->to_string," to append ",$treepath->to_string//'top',"\n";
       $treestore->insert_with_values ($treeiter, -1,
                                       map { ($_, $model->get($iter,$_)) }
                                       @columns);
       return 0; # keep traversing
     });
  return $treestore;
}



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