############################################################################# ## Name: lib/Wx/DemoModules/wxPopupWindow.pm ## Purpose: wxPerl demo helper for Wx::PopupWindow ## Author: Mattia Barbon ## Modified by: ## Created: 25/09/2006 ## RCS-ID: $Id: wxPopupWindow.pm 2772 2010-02-01 14:23:16Z mdootson $ ## Copyright: (c) 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::wxPopupWindow; use strict; use base qw(Wx::Panel Class::Accessor::Fast); use Wx qw(:progressdialog); use Wx::Event qw(EVT_BUTTON); __PACKAGE__->mk_accessors( qw(popup) ); sub new { my( $class, $parent ) = @_; my $self = $class->SUPER::new( $parent ); my $popup = Wx::Button->new( $self, -1, 'Popup', [ 100, 10 ] ); my $popdown = Wx::Button->new( $self, -1, 'Popdown', [ 100, 40 ] ); EVT_BUTTON( $self, $popup, \&on_popup ); EVT_BUTTON( $self, $popdown, \&on_popdown ); unless( Wx::wxMAC() ) { # not implemented on Mac my $poptransient = Wx::Button->new( $self, -1, 'Transient', [ 100, 70 ] ); EVT_BUTTON( $self, $poptransient, \&on_poptransient ); } return $self; } sub on_popup { my( $self, $event ) = @_; my $popup = Wx::DemoModules::wxPopupWindow::Custom->new( $self ); $popup->Move( 200, 200 ); $popup->SetSize( 300, 200 ); $popup->Show; $self->popup( $popup ); } sub on_popdown { my( $self, $event ) = @_; return unless $self->popup; my $popup = $self->popup; $self->popup( undef ); $popup->Hide; $popup->Destroy; } sub on_poptransient { my( $self, $event ) = @_; my $popup = Wx::DemoModules::wxPopupWindow::TransientCustom->new( $self ); $popup->Move( 200, 200 ); $popup->SetSize( 300, 200 ); $popup->Popup; } sub add_to_tags { qw(managed) } sub title { 'wxPopupWindow' } package Wx::DemoModules::wxPopupWindow::Custom; use strict; use base qw(Wx::PopupWindow); use Wx qw(wxSOLID); use Wx::Event qw(EVT_PAINT); sub new { my( $class, @args ) = @_; my $self = $class->SUPER::new( @args ); EVT_PAINT( $self, \&on_paint ); return $self; } sub on_paint { my( $self, $event ) = @_; my $dc = Wx::PaintDC->new( $self ); $dc->SetBrush( Wx::Brush->new( Wx::Colour->new( 0, 192, 0 ), wxSOLID ) ); $dc->SetPen( Wx::Pen->new( Wx::Colour->new( 0, 0, 0 ), 1, wxSOLID ) ); $dc->DrawRectangle( 0, 0, $self->GetSize->x, $self->GetSize->y ); } package Wx::DemoModules::wxPopupWindow::TransientCustom; use strict; use base qw(Wx::PlPopupTransientWindow); use Wx qw(wxSOLID); use Wx::Event qw(EVT_PAINT); sub new { my( $class, @args ) = @_; my $self = $class->SUPER::new( @args ); EVT_PAINT( $self, \&on_paint ); return $self; } sub ProcessLeftDown { Wx::LogMessage( 'ProcessLeftDown' ); return 0; } sub on_paint { my( $self, $event ) = @_; my $dc = Wx::PaintDC->new( $self ); $dc->SetBrush( Wx::Brush->new( Wx::Colour->new( 192, 0, 0 ), wxSOLID ) ); $dc->SetPen( Wx::Pen->new( Wx::Colour->new( 0, 0, 0 ), 1, wxSOLID ) ); $dc->DrawRectangle( 0, 0, $self->GetSize->x, $self->GetSize->y ); } 1;