Wx-Perl-PodBrowser

 view release on metacpan or  search on metacpan

devel/index.pl  view on Meta::CPAN

# with Wx-Perl-PodBrowser.  If not, see <http://www.gnu.org/licenses/>.


use 5.008;
use strict;
use Wx;
use Wx::Perl::PodRichText;

# uncomment this to run the ### lines
# use Smart::Comments;



{
  my $app = Wx::SimpleApp->new;
  my $frame = Wx::Dialog->new (undef,  # parent
                               Wx::wxID_ANY(),
                               'Index',
                               Wx::wxDefaultPosition(),
                               Wx::wxDefaultSize(),
                               (Wx::wxRESIZE_BORDER()
                                | Wx::wxSYSTEM_MENU()
                                | Wx::wxCLOSE_BOX())
                              );

  my $vert_sizer = Wx::BoxSizer->new (Wx::wxVERTICAL());

  my $list = Wx::ListView->new($frame,
                               Wx::wxID_ANY(),
                               Wx::wxDefaultPosition(),
                               Wx::wxDefaultSize(),
                               (Wx::wxLC_REPORT() | Wx::wxLC_SINGLE_SEL()));
  Wx::Event::EVT_LIST_ITEM_ACTIVATED($list, $list, sub {
                                       my ($list, $event) = @_;
                                       my $index = $event->GetIndex;
                                       print "activate index=$index\n";
                                     });
  $vert_sizer->Add ($list, 1, Wx::wxGROW(), 0);

  my @names = ( "Cheese", "apples 10", "Apples 1", "Oranges" );

  my @index;
  foreach my $i ( 0 .. 50 ) {
    my $t = (rand() * 100) % scalar(@names);
    my $position = int( rand() * 1000 );
    my $name = $names[$t];
    push @index, { name        => $name,
                   line_number => int($position / 10),
                   position    => $position,
                 };
  }

  $list->InsertColumn(0, 'Index');
  $list->InsertColumn(1, 'Line', Wx::wxLIST_FORMAT_RIGHT() | Wx::wxGROW());

  my $fill = sub {
    my ($by_position) = @_;
    if ($by_position) {
      @index = sort {$a->{'position'} <=> $b->{'position'} } @index;
    } else {
      my $cmp = eval { require Sort::Naturally; 1 }
        ? \&Sort::Naturally::ncmp
          : sub { $_[0] cmp $_[1] };
      @index = sort {$cmp->($a->{'name'}, $b->{'name'})
                       || $a->{'position'} <=> $b->{'position'}
                     } @index;
    }

    my $prev_name = '';
    my $pos = 0;
    foreach my $entry (@index) {
      {
        my $item = Wx::ListItem->new;
        $item->SetText($entry->{'name'} eq $prev_name ? '' : $entry->{'name'});
        $item->SetId($pos);
        $item->SetColumn(0);
        $list->InsertItem ($item);
      }
      {
        my $item = Wx::ListItem->new;
        $item->SetText($entry->{'line_number'});
        $item->SetId($pos);
        $item->SetColumn(1);
        $list->SetItem ($item);
      }
      # $list->SetItemData ($pos, $entry);

      $prev_name = $entry->{'name'};
      $pos++;
    }
  };
  $fill->(0);

  # my $prev_name = '';
  # foreach my $i ( 0 .. 50 ) {
  #   my $t = ( rand() * 100 ) % 3;
  #   my $q = int( rand() * 100 );
  #   my $name = $names[$t];
  #   my $idx = $list->InsertImageStringItem($i,
  #                                          ($name eq $prev_name ? '' : $name),
  #                                          0);
  #   $list->SetItemData( $idx, $i );
  #   $list->SetItem( $idx, 1, $q );
  #   $prev_name = $name;
  # }

  $list->SetColumnWidth(0, Wx::wxLIST_AUTOSIZE());
  $list->SetColumnWidth(1, Wx::wxLIST_AUTOSIZE());

  # CreateSeparatedButtonSizer
  my $button_sizer = $frame->CreateStdDialogButtonSizer (Wx::wxOK());
  $vert_sizer->Add ($button_sizer, 0, 0, 0);

  {
    my $choice = Wx::Choice->new ($frame,
                                  Wx::wxID_ANY(),
                                  Wx::wxDefaultPosition(),
                                  Wx::wxDefaultSize(),
                                  [ 'Alphabetical', 'Position' ]);
    Wx::Event::EVT_CHOICE($choice, $choice, sub {
                            my ($choice, $event) = @_;
                            my $value = $choice->GetCurrentSelection;



( run in 0.846 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )