############################################################################# ## Name: lib/Wx/DemoModules/wxComboCtrl.pm ## Purpose: wxPerl demo helper for Wx::ComboCtrl ## Author: Mattia Barbon ## Modified by: ## Created: 22/08/2007 ## RCS-ID: $Id: wxComboCtrl.pm 2203 2007-08-23 19:58:18Z mbarbon $ ## Copyright: (c) 2007 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::wxComboCtrl; use strict; use base qw(Wx::DemoModules::lib::BaseModule Class::Accessor::Fast); use Wx qw(:comboctrl); use Wx::Event qw(); __PACKAGE__->mk_accessors( qw(comboctrl) ); sub styles { my( $self ) = @_; return ( [ wxCB_READONLY, 'Read only' ], [ wxTE_PROCESS_ENTER, 'Process "Enter"' ], [ wxCC_SPECIAL_DCLICK, 'Handle double clicks' ], [ wxCC_STD_BUTTON, 'Use push button' ], ); } sub create_control { my( $self ) = @_; my $comboctrl = Wx::ComboCtrl->new( $self, -1, "Fifth", [-1, -1], [-1, -1], $self->style ); my $popup = Wx::DemoModules::wxComboCtrl::Popup->new; $comboctrl->SetPopupControl( $popup ); return $self->comboctrl( $comboctrl ); } sub add_to_tags { qw(controls new) } sub title { 'wxComboCtrl' } package Wx::DemoModules::wxComboCtrl::Popup; use strict; use base qw(Wx::PlComboPopup); use Wx::Event qw(EVT_RADIOBOX); sub Init { my( $self ) = @_; $self->{value} = ""; } sub Create { my( $self, $parent ) = @_; my @choices = qw(First Second Third Fourth Fifth Sixth Seventh Eigth Nineth Tenth); my $ctrl = Wx::RadioBox->new( $parent, -1, 'Choose', [-1, -1], [-1, -1], \@choices, 3 ); EVT_RADIOBOX( $ctrl, $ctrl, sub { $self->{value} = $_[1]->GetString; $self->Dismiss; } ); $self->{ctrl} = $ctrl; return 1; } sub GetControl { my( $self ) = @_; return $self->{ctrl}; } sub SetStringValue { my( $self, $string ) = @_; # save value in case it does not match any of the existing $self->{value} = $string; $self->{ctrl}->SetStringSelection( $string ); } sub GetStringValue { my( $self ) = @_; return $self->{value} if $self->{ctrl}->GetSelection < 0; return $self->{ctrl}->GetStringSelection; } sub GetAdjustedSize { my( $self, $min_width, $pref_height, $max_height ) = @_; return $self->{ctrl}->GetBestSize; } sub OnPopup { my( $self ) = @_; Wx::LogMessage( "Popping up" ); } sub OnDismiss { my( $self ) = @_; Wx::LogMessage( "Being dismissed" ); } 1;