The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        lib/Wx/DemoModules/wxSplitterWindow.pm
## Purpose:     wxPerl demo helper for Wx::SplitterWindow
## Author:      Mattia Barbon
## Modified by:
## Created:     23/08/2006
## RCS-ID:      $Id: wxSplitterWindow.pm 2189 2007-08-21 18:15:31Z mbarbon $
## Copyright:   (c) 2000, 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::wxSplitterWindow;

use strict;
use base qw(Wx::SplitterWindow Class::Accessor::Fast);

use Wx qw(:splitterwindow wxDefaultPosition wxDefaultSize);
use Wx::Event qw(EVT_SPLITTER_SASH_POS_CHANGED EVT_SPLITTER_SASH_POS_CHANGING
                 EVT_SPLITTER_UNSPLIT EVT_MENU);

__PACKAGE__->mk_accessors( qw(left_window right_window) );

sub new {
    my( $class, $parent ) = @_;
    my $self = $class->SUPER::new
      ( $parent, -1, wxDefaultPosition, wxDefaultSize,
        wxSP_3D|wxSP_LIVE_UPDATE );
    my $top = Wx::GetTopLevelParent( $parent );

    EVT_SPLITTER_SASH_POS_CHANGED( $self, $self, \&on_sash_pos_change );
    EVT_SPLITTER_SASH_POS_CHANGING( $self, $self, \&on_sash_pos_changing );
    EVT_SPLITTER_UNSPLIT( $self, $self, sub { Wx::LogMessage( 'Unsplit' ) } );

    my $filemenu = Wx::Menu->new;
    EVT_MENU( $top, $filemenu->Append( -1, "Split vertically" ),
              sub { $self->split_vertically } );
    EVT_MENU( $top, $filemenu->Append( -1, "Split horizontally" ),
              sub { $self->split_horizontally } );
    EVT_MENU( $top, $filemenu->Append( -1, "Unsplit" ),
              sub { $self->unsplit } );
    $filemenu->AppendSeparator;
    EVT_MENU( $top, $filemenu->Append( -1, "Set minimum size" ),
              sub { $self->set_minimum_size } );

    $self->left_window( Wx::TextCtrl->new( $self, -1, 'Left pane' ) );
    $self->right_window( Wx::StaticText->new( $self, -1, 'Right pane' ) );
    $self->Initialize( $self->left_window );
    $self->right_window->Hide;

    $self->{menu} = [ '&Splitter', $filemenu ];

    return $self;
}

sub on_sash_pos_change {
    my( $self, $event ) = @_;

    Wx::LogMessage( 'Final sash position = %d', $event->GetSashPosition );
}

sub on_sash_pos_changing {
    my( $self, $event ) = @_;

    Wx::LogMessage( 'Current sash position = %d', $event->GetSashPosition );
}

sub split_horizontally {
    my( $self, $event ) = @_;

    $self->Unsplit if $self->IsSplit;
    $self->left_window->Show;
    $self->right_window->Show;
    $self->SplitHorizontally( $self->left_window, $self->right_window );
}

sub split_vertically {
    my( $self, $event ) = @_;

    $self->Unsplit if $self->IsSplit;
    $self->left_window->Show;
    $self->right_window->Show;
    $self->SplitVertically( $self->left_window, $self->right_window );
}

sub set_minimum_size {
    my( $self, $event ) = @_;

    my $size = Wx::GetNumberFromUser( 'Enter minimal size for panes:',
                                      '', '', $self->GetMinimumPaneSize,
                                      0, 10000, $self );

    return if $size == -1;
    $self->SetMinimumPaneSize( $size );
}

sub unsplit {
    my( $self, $event ) = @_;

    $self->Unsplit if $self->IsSplit;
}

sub menu { @{$_[0]->{menu}} }
sub add_to_tags { qw(windows) }
sub title { 'wxSplitterWindow' }

1;