AAC-Pvoice
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
package AAC::Pvoice::Panel;
use strict;
use warnings;
our $VERSION = sprintf("%d.%02d", q$Revision: 1.15 $=~/(\d+)\.(\d+)/);
use Wx qw(:everything);
use Wx::Perl::Carp;
use Wx::Event qw(EVT_PAINT EVT_UPDATE_UI);
use base qw(Wx::Panel);
#----------------------------------------------------------------------
sub new
{
my $class = shift;
$_[2] ||= wxDefaultPosition;
$_[3] ||= wxDefaultSize;
$_[4] ||= wxTAB_TRAVERSAL;
my $self = $class->SUPER::new(@_[0..4]);
$self->SetBackgroundColour(wxWHITE);
$self->{parent} = $_[0];
$self->{position} = $_[2];
$self->{size} = $_[3];
$self->{disabletextrow} = $_[5] || 0;
$self->{itemspacing} = $_[6] || 0;
$self->{selectionborder}= $_[7] || int($self->{itemspacing}/2)||1;
$self->{disabletitle} = $_[8] || 0;
$self->{tls} = Wx::FlexGridSizer->new(0,1);
$self->{totalrows} = 0;
$self->{lastrow} = 0;
$self->{currentpage} = 0;
$self->{unfinished} = 1;
$self->RoundCornerRadius(10);
my ($x, $y);
# to get the right dimensions for the items, we maximize the
# frame, show it, get the dimensions, and hide it again
if (ref($self->{parent}) =~ /Frame/)
{
if ($self->{parent}->IsMaximized)
{
($x, $y) = @{$self->{size}};
}
else
{
$self->{parent}->Maximize(1);
$self->{parent}->Show(1);
($x, $y) = ( $self->GetSize()->GetWidth(),
$self->GetSize()->GetHeight() );
$self->{parent}->Show(0);
}
}
else
{
# if our parent isn't a frame, we're not able to maximize
# it, so we just get the dimensions of the parent
($x, $y) = @{$self->{size}};
}
$self->{realx} = $x;
$self->{realy} = $y;
$self->xsize($x);
$self->ysize($y);
unless ($self->{disabletitle})
{
# to be able to calculate the useable y-size, we need to add the
# title and get its height. Since we don't know what the title
# will be, we'll simple draw an empty title.
$self->TitleFont(Wx::Font->new( 18, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM)) unless $self->TitleFont;
$self->AddTitle('');
my $usableysize = $y - 2*$self->{title}->GetSize()->GetHeight();
# If we want to use a textrow, we have to subtract another 60
# pixels from the y size, since the textrow is always 60 pixels high.
$usableysize-=60 unless $self->{disabletextrow};
$self->ysize($usableysize);
}
# set the default colours...these can of course be changed...
$self->SelectColour(Wx::Colour->new(255,131,131));
$self->BackgroundColour(Wx::Colour->new(220,220,220));
$self->SetSizer($self->{tls});
$self->SetAutoLayout(1);
$self->{displaytextsave} = [];
$self->{speechtextsave} = [];
# Initialize the input stuff
$self->{input} = AAC::Pvoice::Input->new($self);
$self->{input}->Next( sub{$self->Next});
$self->{input}->Select(sub{$self->Select});
$self->{rowcolumnscanning} = ($self->{input}->GetDevice ne 'mouse');
EVT_PAINT($self, \&OnPaint);
EVT_UPDATE_UI($self, $self, \&OnPaint);
return $self;
}
sub SetEditmode
{
my $self = shift;
$self->{editmode} = shift;
}
sub OnPaint
{
my ($self, $event) = @_;
$self->{setselection} = 1;
my $dc = Wx::PaintDC->new($self);
$self->SetBackgroundColour($self->{parent}->GetBackgroundColour);
$self->DrawBackground($dc);
if ($self->{rowcolumnscanning} && not $self->{editmode})
{
$dc = Wx::WindowDC->new($self->{selectedwindow}->GetParent);
$self->DrawBorder($dc);
}
$event->Skip;
}
sub DrawBorder
{
my $self = shift;
my $dc = shift;
my $window = $self->{selectedwindow};
my ($x, $y) = $window->GetPositionXY;
my $size = $window->GetSize;
my ($xsize, $ysize) = ($size->GetWidth, $size->GetHeight);
$dc->BeginDrawing;
$dc->SetBrush(wxTRANSPARENT_BRUSH);
$dc->SetPen(Wx::Pen->new($self->{setselection} ? $self->SelectColour :
$self->BackgroundColour, $self->{selectionborder}, wxSOLID));
$dc->DrawRoundedRectangle($x-($self->{itemspacing}/2-1), $y-($self->{itemspacing}/2-1), $xsize+($self->{itemspacing}/2+1), $ysize+($self->{itemspacing}/2+1), $self->RoundCornerRadius);
$dc->EndDrawing;
}
sub SetSelectionBorder
{
my $self = shift;
$self->{selectedwindow} = shift;
$self->{setselection} = 1;
my $dc = Wx::WindowDC->new($self->{selectedwindow}->GetParent);
$self->DrawBorder($dc);
}
sub SetNormalBorder
{
my $self = shift;
$self->{selectedwindow} = shift;
$self->{setselection} = 0;
my $dc = Wx::WindowDC->new($self->{selectedwindow}->GetParent);
$self->DrawBorder($dc);
}
sub RoundCornerRadius
{
my $self = shift;
$self->{radius} = shift || $self->{radius};
return $self->{radius};
}
sub xsize
{
my $self = shift;
$self->{xsize} = shift || $self->{xsize};
return $self->{xsize}-2*$self->RoundCornerRadius;
}
sub ysize
{
my $self = shift;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.504 second using v1.00-cache-2.02-grep-82fe00e-cpan-f73e49a70403 )