#############################################################################
## Name: lib/Wx/DemoModules/wxToolBar.pm
## Purpose: wxPerl demo helper for Wx::ToolBar
## Author: Mattia Barbon
## Modified by:
## Created: 29/10/2000
## RCS-ID: $Id: wxToolBar.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::wxToolBar;
use strict;
use base qw(Wx::Frame Class::Accessor::Fast);
use Wx qw(:id :textctrl :bitmap :toolbar wxNullBitmap wxDefaultPosition
wxDefaultSize);
use Wx::Event qw(EVT_SIZE EVT_MENU EVT_COMBOBOX EVT_UPDATE_UI
EVT_TOOL_ENTER);
__PACKAGE__->mk_accessors( qw(textctrl small_toolbar horizontal_toolbar) );
my( $ID_TOOLBAR, $ID_COMBO, $ID_QUOTES ) = ( 1 .. 100 );
sub BITMAP($) {
my( $name ) = @_;
my $file = Wx::Demo->get_data_file( "xrc/$name.gif" );
return Wx::Bitmap->new( $file, wxBITMAP_TYPE_GIF );
}
sub new {
my( $class, $parent ) = @_;
my $this = $class->SUPER::new( $parent, -1, 'wxToolBar demo' );
$this->SetIcon( Wx::GetWxPerlIcon );
my $textctrl = Wx::TextCtrl->new( $this, -1, '', [0, 0], [-1, -1],
wxTE_MULTILINE );
$this->textctrl( $textctrl );
$this->small_toolbar( 1 );
$this->horizontal_toolbar( 1 );
$this->CreateStatusBar;
EVT_MENU( $this, -1, \&OnToolLeftClick ); # must be the first bound event
my $tmenu = Wx::Menu->new;
EVT_MENU( $this, $tmenu->AppendCheckItem( -1, "Toggle toolbar" ),
\&OnToggleToolbar );
EVT_MENU( $this, $tmenu->AppendCheckItem( -1, "Toggle icon size" ),
\&OnToggleToolbarSize );
EVT_MENU( $this, $tmenu->AppendCheckItem( -1, "Toggle orientation" ),
\&OnToggleToolbarOrient );
$tmenu->AppendSeparator;
EVT_MENU( $this, $tmenu->Append( -1, "Insert open button" ),
\&OnInsertOpen );
EVT_MENU( $this, $tmenu->Append( -1, "Enable open button" ),
sub { $_[0]->DoEnableOpen } );
EVT_MENU( $this, $tmenu->Append( -1, "Delete open button" ),
sub { $_[0]->DoDeleteOpen } );
EVT_MENU( $this, $tmenu->Append( -1, "Toggle quotes button" ),
sub { $_[0]->DoToggleQuotes } );
my $menu = Wx::MenuBar->new;
$menu->Append( $tmenu, 'Toolbar' );
$this->SetMenuBar( $menu );
$this->RecreateToolbar;
EVT_COMBOBOX( $this, $ID_COMBO, \&OnCombo );
EVT_TOOL_ENTER( $this, $ID_TOOLBAR, \&OnToolEnter );
return $this;
}
sub OnToggleToolbar {
my( $this, $event ) = @_;
my $t = $this->GetToolBar;
if( $t ) {
$t->Destroy;
$this->SetToolBar( undef );
$this->LayoutChildren;
} else {
$this->RecreateToolbar;
}
}
sub LayoutChildren {
my( $this ) = @_;
my $size = $this->GetClientSize;
$this->textctrl->SetSize( 0, 0, $size->x, $size->y );
}
sub OnToggleToolbarSize {
my( $this, $event ) = @_;
$this->small_toolbar( $this->small_toolbar ? 0 : 1 );
$this->RecreateToolbar;
}
sub OnToggleToolbarOrient {
my( $this, $event ) = @_;
$this->horizontal_toolbar( $this->horizontal_toolbar ? 0 : 1 );
$this->RecreateToolbar;
}
sub OnToolLeftClick {
my( $this, $event ) = @_;
$this->textctrl->WriteText( sprintf "Clicked on tool %d\n",
$event->GetId );
if( $event->GetId == $ID_QUOTES ) {
if( $event->GetExtraLong != 0 ) {
$this->textctrl->WriteText( "Quotes button down now\n" );
} else {
$this->textctrl->WriteText( "Quotes button up now\n" );
}
}
if( $event->GetId == wxID_OPEN ) {
$this->DoDeleteOpen;
}
}
sub DoEnableOpen {
my( $this ) = @_;
my $t = $this->GetToolBar;
unless( $t->FindById( wxID_OPEN ) ) {
$this->textctrl->WriteText( "No tool\n" );
return;
}
$t->EnableTool( wxID_OPEN, !$t->GetToolEnabled( wxID_OPEN ) );
}
sub DoDeleteOpen {
my( $this ) = @_;
my $t = $this->GetToolBar;
unless( $t->FindById( wxID_OPEN ) ) {
$this->textctrl->WriteText( "No tool\n" );
return;
}
$t->DeleteTool( wxID_OPEN );
}
sub DoToggleQuotes {
my( $this ) = @_;
my $t = $this->GetToolBar;
$t->ToggleTool( $ID_QUOTES, !$t->GetToolState( $ID_QUOTES ) );
}
sub OnInsertOpen {
my( $this, $event ) = @_;
my $t = $this->GetToolBar;
my $bmp = BITMAP( 'fileopen' );
$t->InsertTool( 0, wxID_OPEN, $bmp, wxNullBitmap,
0, undef, 'Delete this tool',
'This button was inserted into the toolbar'
);
$t->Realize;
}
sub RecreateToolbar {
my( $this ) = @_;
my $t = $this->GetToolBar;
$t->Destroy if $t;
$this->SetToolBar( undef );
my( $style ) =
( $this->horizontal_toolbar ? wxTB_HORIZONTAL : wxTB_VERTICAL ) |
wxNO_BORDER | wxTB_FLAT | wxTB_DOCKABLE;
$t = $this->CreateToolBar( $style, $ID_TOOLBAR );
$t->SetMargins( 4, 4 );
my( @bitmaps ) = map { BITMAP( $_ ) } qw(fileopen filesave fuzzy quotes);
if( !$this->small_toolbar ) {
my( $w, $h ) = ( $bitmaps[0]->GetWidth * 2,
$bitmaps[0]->GetHeight * 2 );
@bitmaps =
map { Wx::Bitmap->new( Wx::Image->new( $_ )->Scale( $w, $h ) ) }
@bitmaps;
$t->SetToolBitmapSize( [ $w, $h ] );
}
my $width = ( Wx::wxMSW() ) ? 24 : 16;
$t->AddTool( wxID_SAVE, $bitmaps[1], wxNullBitmap, 0, undef, 'Open File' );
if( $this->horizontal_toolbar ) {
my $c = Wx::ComboBox->new
( $t, $ID_COMBO, '', wxDefaultPosition, wxDefaultSize,
[ 'This', 'is a', 'combobox', 'in a', 'toolbar' ] );
$t->AddControl( $c );
}
$t->AddTool( -1, $bitmaps[2], wxNullBitmap, 1, undef,
'Toggle button 1' );
$t->AddSeparator;
$t->AddTool( $ID_QUOTES, $bitmaps[3], wxNullBitmap, 1, undef,
'Toggle button 1' );
$t->Realize;
}
sub OnCombo {
my( $this, $event ) = @_;
Wx::LogStatus( "ComboBox string '%s' selected", $event->GetString );
}
sub OnToolEnter {
my( $this, $event ) = @_;
if( $event->GetSelection > -1 ) {
$this->SetStatusText( sprintf 'This is tool number %d',
$event->GetSelection );
} else {
$this->SetStatusText( '' );
}
}
sub add_to_tags { qw(controls) }
sub title { 'wxToolBar' }
1;