view release on metacpan or search on metacpan
lib/AAC/Pvoice.pm view on Meta::CPAN
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 0.91;
@ISA = qw (Exporter);
@EXPORT = qw (MessageBox);
@EXPORT_OK = qw ();
%EXPORT_TAGS = ();
}
sub MessageBox
{
my ($message, $caption, $style, $parent, $x, $y) = @_;
$caption ||= 'Message';
$style ||= wxOK;
$x ||= -1;
$y ||= -1;
$Text::Wrap::columns = 25;
$message = wrap('','',$message)."\n";
my $width = 0;
$width = 25 if $style & wxOK;
$width = 30 if $style & wxYES_NO;
$width = 60 if $style & wxCANCEL;
my $p = Wx::Frame->new(undef, -1, 'tmp');
my $m = Wx::StaticText->new($p, -1, $message, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
$m->SetFont(Wx::Font->new( 10, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM));
my $h = $m->GetSize->GetHeight;
$p->Destroy;
my $d = AAC::Pvoice::Dialog->new(undef, -1, $caption, [$x,$y], [310,100+$h]);
my $messagectrl = Wx::StaticText->new($d->{panel},
-1,
$message,
wxDefaultPosition,
wxDefaultSize,
wxALIGN_CENTRE);
$messagectrl->SetBackgroundColour($d->{backgroundcolour});
$messagectrl->SetFont(Wx::Font->new(10, # font size
wxDECORATIVE, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM));
$d->Append($messagectrl,1);
my $ok = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,25,'OK', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxOK); $d->Close()}];
my $yes = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,30,'Yes', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxYES); $d->Close()}];
my $no = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,25,'No', Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxNO); $d->Close()}];
my $cancel = [Wx::NewId,AAC::Pvoice::Bitmap->new('',50,60,'Cancel',Wx::Colour->new(255, 230, 230)),sub{$d->SetReturnCode(wxCANCEL);$d->Close()}];
my $items = [];
push @$items, $ok if $style & wxOK;
push @$items, $yes if $style & wxYES_NO;
push @$items, $no if $style & wxYES_NO;
push @$items, $cancel if $style & wxCANCEL;
$d->Append(AAC::Pvoice::Row->new($d->{panel}, # parent
scalar(@$items), # max
$items, # items
wxDefaultPosition, # pos
wxDefaultSize,
$width,
25,
$d->{ITEMSPACING},
$d->{backgroundcolour}),
0); #selectable
lib/AAC/Pvoice.pm view on Meta::CPAN
use a normal mouse and/or keyboard. To see an application that uses this
set of modules, take a look at pVoice (http://www.pvoice.org, or the
sources on http://opensource.pvoice.org).
AAC::Pvoice is in fact a wrapper around many wxPerl classes, to make it
easier to create applications like pVoice.
=head1 USAGE
=head2 AAC::Pvoice::MessageBox(message, caption, style, parent, x, y)
This function is similar to Wx::MessageBox. It uses the same parameters as
Wx::MessageBox does. Currently the style parameter doesn't support the
icons that can be set on Wx::MessageBox.
See the individual module's documentation
=head1 BUGS
probably a lot, patches welcome!
=head1 AUTHOR
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
{
my $capdc = Wx::MemoryDC->new();
my $cpt = 10;
my ($cfont, $cw, $ch) = (wxNullFont, 0, 0);
if ($caption)
{
do
{
$cfont = Wx::Font->new( $cpt, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS', # face name
wxFONTENCODING_SYSTEM);
($cw, $ch, undef, undef) = $capdc->GetTextExtent($caption, $cfont);
$cpt--;
} until ($cw<$x);
}
my $img = Wx::Image->new($x, $y-$ch);
$img->SetOption('quality', 100);
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
my $stat = stat($file);
my $mtime = $stat->mtime();
my $image = $cache->get("$file-$x-$y-$caption-$ibg-$blowup-$pbg-$mtime");
if (!$image)
{
my $radius = 10;
my $svg = <<SVG;
<svg width="$x" height="$y" viewBox="0 0 $x $y">
<rect x="0" y="0" width="$x" height="$y" ry="$radius"
style="stroke: none; fill: $ibg;"/>
</svg>
SVG
my $background=Image::Magick->new(magick => 'svg');
$background->Set('background' => $pbg);
$background->blobtoimage($svg);
my ($textheight, $textwidth) = (0,0);
if ($caption)
{
my $pt = 20;
lib/AAC/Pvoice/Bitmap.pm view on Meta::CPAN
$tmpdc->SetPen($pen);
$tmpdc->DrawRoundedRectangle(1,1,$x-1,$y-1, 10);
}
my $pt = 72;
my ($font, $w, $h);
do
{
$font = Wx::Font->new( $pt, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS'); # face name
($w, $h, undef, undef) = $tmpdc->GetTextExtent($caption, $font);
$pt= $pt > 24 ? $pt - 4 : $pt-1;
} until (($w<$x) && ($h<$y) || $pt < 5);
$tmpdc->SetTextForeground(wxBLACK);
$tmpdc->SetTextBackground($bg);
$tmpdc->SetFont($font);
$tmpdc->DrawText($caption, int(($x-$w)/2), int(($y-$h)/2));
lib/AAC/Pvoice/Dialog.pm view on Meta::CPAN
$self->{selectionborder} = 3;
$self->{backgroundcolour} = Wx::Colour->new(220,220,220);
$self->SetBackgroundColour(wxWHITE);
$self->{panel} = AAC::Pvoice::Panel->new( $self, # parent
-1, # id
[$self->{margin},
$self->{margin}], # position
[$x-2*$self->{margin},
$y-2*$self->{margin}],# size
wxNO_3D|wxWANTS_CHARS, # style
1, # disabletextrow
$self->{ITEMSPACING}, # rowspacing
$self->{selectionborder}, # selectionborderwidth
1); # disabletitle
$self->{panel}->BackgroundColour($self->{backgroundcolour});
$self->WarpPointer($self->{margin}+1,$self->{margin}+1);
$self->SetFocus();
EVT_CLOSE($self, \&OnClose);
return $self;
lib/AAC/Pvoice/EditableRow.pm view on Meta::CPAN
use Wx::Event qw( EVT_BUTTON );
use AAC::Pvoice::Bitmap;
use base qw(Wx::Panel);
our $VERSION = sprintf("%d.%02d", q$Revision: 1.4 $=~/(\d+)\.(\d+)/);
#----------------------------------------------------------------------
sub new
{
my $class = shift;
my ($parent,$maxitems,$items,$wxPos,$wxSize, $itemmaxX, $itemmaxY, $itemspacing, $background, $style,$name) = @_;
$wxPos ||= wxDefaultPosition;
$wxSize ||= wxDefaultSize;
$style ||= 0;
$name ||= '';
my $self = $class->SUPER::new($parent, -1, $wxPos, $wxSize, $style, $name);
$self->{maxitems} = $maxitems;
$self->{itemspacing}=$itemspacing;
# Create a new panel
my $sizer = Wx::GridSizer->new(1,0);
$self->{items} = [];
$self->{actions} = [];
my ($maxX, $maxY) = ($itemmaxX, $itemmaxY);
lib/AAC/Pvoice/EditableRow.pm view on Meta::CPAN
# Add the defined keys for this row
for (@$items)
{
my ($id, $img, $sub) = @$_;
my $button = Wx::BitmapButton->new
($self, # parent
$id, # id
$img, # image
wxDefaultPosition, # position
[$maxX+3, $maxY+3], # size
wxBU_AUTODRAW); # style
$button->SetBackgroundColour($background);
$sizer->Add($button, 0, wxALIGN_CENTRE|wxALL, $self->{itemspacing});
push @{$self->{items}}, $button;
EVT_BUTTON($self, $id, $sub);
}
my $totalitems = scalar(@$items);
$self->{totalitems} = scalar(@{$self->{items}});
$self->SetBackgroundColour($background);
$self->SetSizer($sizer);
# $self->SetAutoLayout(1);
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
$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);
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
return $self->{titlefont};
}
sub Append
{
my $self = shift;
my $row = shift;
my $unselectable = shift;
$self->{tls}->Add($row, # what to add
0, # unused
wxALIGN_CENTRE, # style
0); # padding
# setup the input event handling unless we're in editmode
unless ($self->{editmode})
{
$row->{input} = AAC::Pvoice::Input->newchild($row);
$row->{input}->Next( sub{$self->Next});
$row->{input}->Select(sub{$self->Select});
my $index=0;
foreach my $child ($row->GetChildren)
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
{
my $self = shift;
my $dc = Wx::WindowDC->new($self);
$self->DrawBackground($dc);
unless ($self->{disabletextrow})
{
# Create the TextControl
my $font = Wx::Font->new( 24, # font size
wxSWISS, # font family
wxNORMAL, # style
wxNORMAL, # weight
0,
'Comic Sans MS',# face name
wxFONTENCODING_SYSTEM);
$font->SetUnderlined(1);
$self->{ta} = Wx::TextAttr->new( Wx::Colour->new(0,0,0), # textcol
Wx::Colour->new(255,255,255),# backgr.
$font); # font
my $rowsizer = Wx::GridSizer->new(1,0);
$self->{text} = Wx::TextCtrl->new( $self, # parent
-1, # id
'', # text
wxDefaultPosition,# position
[4*($self->{realx}/5),60], # size
wxTE_RICH|
wxTE_MULTILINE); # style
# set the text-attributes
$self->{text}->SetDefaultStyle($self->{ta});
$rowsizer->Add($self->{text}, # what to add
0, # unused
wxALIGN_CENTRE|wxALL, # style
$self->{itemspacing}); # padding
$self->{tls}->Add($rowsizer, 0, wxALIGN_CENTRE, 0);
$self->{textrowsizer} = $rowsizer;
$self->{text}->SetValue(my $x = $self->RetrieveText);
$self->{text}->SetStyle(0, length($self->{text}->GetValue), $self->{ta});
$self->{text}->Refresh(); # Added to test it on the Mercury...added text
# isn't visible there...
}
$self->{title}->SetBackgroundColour($self->BackgroundColour) unless $self->{disabletitle};
lib/AAC/Pvoice/Panel.pm view on Meta::CPAN
use AAC::Pvoice::Panel;
=head1 DESCRIPTION
=head1 USAGE
=head2 new(parent, id, size, position, style, disabletextrow, itemspacing, selectionborderwidth, disabletitle)
This is the constructor for a new AAC::Pvoice::Panel. The first 5 parameters are
equal to the parameters for a normal Wx::Panel, see the wxPerl documentation
for those parameters.
=over 4
=item disabletextrow
This is s a boolean (1 or 0), which determines
lib/AAC/Pvoice/Row.pm view on Meta::CPAN
use AAC::Pvoice::Bitmap;
use base qw(Wx::Panel);
our $VERSION = sprintf("%d.%02d", q$Revision: 1.5 $=~/(\d+)\.(\d+)/);
#----------------------------------------------------------------------
sub new
{
my $class = shift;
my ($parent,$maxitems,$items,
$wxPos,$wxSize, $itemmaxX, $itemmaxY,
$itemspacing, $background, $style,$name) = @_;
my $self = $class->SUPER::new( $parent,
Wx::NewId,
$wxPos || wxDefaultPosition,
$wxSize || wxDefaultSize,
$style || 0,
$name || '');
$self->{maxitems} = $maxitems;
my $sizer = Wx::GridSizer->new(1,0);
$self->{items} = [];
$self->{actions} = [];
my ($maxX, $maxY) = ($itemmaxX, $itemmaxY);
lib/AAC/Pvoice/Row.pm view on Meta::CPAN
$empty->SetBackgroundColour($background);
$sizer->Add($empty,0, wxALIGN_CENTRE|wxALL, $itemspacing);
next;
}
my ($id, $img, $sub) = @$_;
my $button = Wx::BitmapButton->new ($self, # parent
$id, # id
$img, # image
wxDefaultPosition, # position
[$maxX, $maxY],# size
wxSUNKEN_BORDER); # style
$button->SetBackgroundColour($background);
$sizer->Add($button, 0, wxALIGN_CENTRE|wxALL, $itemspacing);
push @{$self->{items}}, $button;
push @{$self->{actions}}, $sub;
push @{$self->{ids}}, $id;
}
my $totalitems = scalar(@$items);
$self->{totalitems} = scalar(@{$self->{items}});
for (0..($self->{maxitems} - $totalitems -1))
{