#############################################################################
## Name: lib/Wx/DemoModules/wxListBox.pm
## Purpose: wxPerl demo helper for Wx::ListBox
## Author: Mattia Barbon
## Modified by:
## Created: 13/08/2006
## RCS-ID: $Id: wxListBox.pm 2189 2007-08-21 18:15:31Z mbarbon $
## Copyright: (c) 2000, 2003, 2005-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::wxListBox;
use strict;
use base qw(Wx::DemoModules::lib::BaseModule Class::Accessor::Fast);
use Wx qw(:listbox wxNOT_FOUND);
use Wx::Event qw(EVT_LISTBOX EVT_LISTBOX_DCLICK);
__PACKAGE__->mk_accessors( qw(listbox) );
sub styles {
my( $self ) = @_;
return ( [ wxLB_SORT, 'Sorted' ],
[ wxLB_ALWAYS_SB, 'Always show scrollbars' ],
[ wxLB_HSCROLL, 'Horizontal scrollbar' ],
[ wxLB_SINGLE, 'Single selection' ],
[ wxLB_MULTIPLE, 'Multiple selection' ],
[ wxLB_EXTENDED, 'Extended selection' ],
);
}
sub commands {
my( $self ) = @_;
return ( { label => 'Select item',
with_value => 1,
action => sub { $self->listbox->SetSelection( $_[0] ) },
},
{ label => 'Select string',
with_value => 1,
action => sub { $self->listbox
->SetStringSelection( $_[0] ) },
},
{ label => 'Clear',
action => sub { $self->listbox->Clear },
},
{ label => 'Append',
with_value => 1,
action => sub { $self->listbox->Append( $_[0] ) },
},
{ label => 'Delete selected item',
action => \&on_delete_selected,
},
);
}
sub create_control {
my( $self ) = @_;
my $choices = [ 'This', 'is one of my',
'really', 'wonderful', 'examples', ];
my $listbox = Wx::ListBox->new( $self, -1, [-1, -1],
[-1, -1], $choices, $self->style );
SetControlClientData( 'listbox', $listbox );
EVT_LISTBOX( $self, $listbox, \&OnListBox );
EVT_LISTBOX_DCLICK( $self, $listbox, \&OnListBoxDoubleClick );
return $self->listbox( $listbox );
}
sub SetControlClientData {
my( $name, $ctrl ) = @_;
foreach my $i ( 1 .. $ctrl->GetCount() ) {
my $text = $ctrl->GetString( $i - 1 );
$ctrl->SetClientData( $i - 1, "$name client data for $text" );
}
}
sub OnListBox {
my( $self, $event ) = @_;
if( $event->GetInt() == -1 ) {
Wx::LogMessage( "List box has no selections any more" );
return;
}
Wx::LogMessage( join '', "ListBox Event selection string is '",
$event->GetString(), "'" );
Wx::LogMessage( join '', "ListBox Control selection string is '",
$self->listbox->GetStringSelection(), "'" );
my $cde = $event->GetClientData();
my $cdl = $self->listbox->GetClientData( $self->listbox->GetSelection() );
Wx::LogMessage( join '', "ListBox Event client data is '",
( $cde ? $cde : 'none' ) , "'" );
Wx::LogMessage( join '', "ListBox Control client data is '",
( $cdl ? $cdl : 'none' ) );
}
sub OnListBoxDoubleClick {
my( $self, $event ) = @_;
Wx::LogMessage( join '', "ListBox double click string is '",
$event->GetString(), "'" ) ;
}
sub on_delete_selected {
my( $self ) = @_;
my( $idx );
if( ( $idx = $self->listbox->GetSelection() ) != wxNOT_FOUND ) {
$self->listbox->Delete( $idx );
}
}
sub add_to_tags { qw(controls) }
sub title { 'wxListBox' }
1;