The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        lib/Wx/DemoModules/wxGridER.pm
## Purpose:     wxPerl demo helper for wxGrid editors and renderers
## Author:      Mattia Barbon
## Modified by:
## Created:     05/06/2003
## RCS-ID:      $Id: wxGridER.pm 2378 2008-04-26 04:21:45Z mdootson $
## Copyright:   (c) 2003, 2006 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

package Wx::DemoModules::wxGridER;

use strict;
use base 'Wx::Grid';

my $longtext = join ' ', qw(Multiple lines of text are displayed
                            wrapped in the cell. AutoSize is set on to
                            display the contents);
my @editors_renderers =
  ( [ 'Default editor and renderer', 'Test 1', undef ],
    [ 'Float editor', '1.00', sub { Wx::GridCellFloatEditor->new },
      'Float renderer', '2.13', sub { Wx::GridCellFloatRenderer->new( 12, 7 ) },
      ],
    [ 'Bool editor', '1', sub { Wx::GridCellBoolEditor->new },
      'Bool renderer', '1', sub { Wx::GridCellBoolRenderer->new },
      ],
    [ 'Number editor', '14', sub { Wx::GridCellNumberEditor->new( 12, 20 ) },
      'Number renderer', '12', sub { Wx::GridCellNumberRenderer->new },
      ],
    [ 'Choice editor', 'Test', sub { Wx::GridCellChoiceEditor->new( [qw(This Is a Test) ] ) },
      ],
    [ 'Auto Wrap editor', $longtext, sub { Wx::GridCellAutoWrapStringEditor->new },
      'Auto Wrap renderer', $longtext, sub { Wx::GridCellAutoWrapStringRenderer->new },
      ],
    [ 'Enum editor', 2, sub { Wx::GridCellEnumEditor->new( 'First,Second,Third,Fourth,Fifth' ) },
      # unluckily Enum renderer requires a custom grid table to work
      ],
    );

sub new {
  my( $class, $parent ) = @_;
  my $this = $class->SUPER::new( $parent, -1 );
  
  $this->CreateGrid( 2 * @editors_renderers + 1, 7 );
  
  # set every cell read-only
  for my $x ( 1 .. $this->GetNumberCols ) { # cols
    for my $y ( 1 .. $this->GetNumberRows ) { # rows
      $this->SetReadOnly( $y, $x, 1 ); # rows, cols
    }
  }

  $this->SetColSize( 0, 20 );
  $this->SetColSize( 1, 150 );
  $this->SetColSize( 2, 150 );
  $this->SetColSize( 3, 20 );
  $this->SetColSize( 4, 150 );
  $this->SetColSize( 5, 100 );
  $this->SetColSize( 6, 20 );

  my $row = 1;
  foreach my $er ( @editors_renderers ) {
    if( $er->[0] ) {
      eval {
          $this->SetCellEditor( $row, 2, &{$er->[2]} ) if $er->[2];
          $this->SetCellOverflow( $row, 2, 0);
          $this->SetCellValue( $row, 1, $er->[0] );
          $this->SetCellValue( $row, 2, $er->[1] );
          $this->SetReadOnly( $row, 2, 0 );
      };
    }
    if( $er->[3] ) {
      eval {
          $this->SetCellRenderer( $row, 5, &{$er->[5]} ) if $er->[5];
          $this->SetCellOverflow( $row, 5, 0);
          $this->SetCellValue( $row, 4, $er->[3] );
          $this->SetCellValue( $row, 5, $er->[4] );
          $this->SetReadOnly( $row, 5, 0 );
      };
    }
    $this->AutoSizeRow( $row, 1 );
    $row += 2;
  }

  return $this;
}

sub add_to_tags { 'controls/grid' }
sub title { 'Editors and renderers' }

1;