PPresenter
view release on metacpan or search on metacpan
PPresenter/Viewport/Control.pm view on Meta::CPAN
, PPresenter::Viewport::Neighbours->new($show, $viewport)
, PPresenter::Viewport::BackgroundMenu->new($show, $viewport,
$viewport->{screen}, $has_popup)
, PPresenter::Viewport::SlideControl->new($show, $viewport, $where)
, PPresenter::Viewport::TagControl->new($show, $viewport, $where)
, PPresenter::Viewport::Phases->new($show, $viewport)
);
if($has_popup)
{ $where->withdraw;
$viewport->make_popup($show, $where,
$viewport->{slidecontrol}, $viewport->{tagcontrol});
$viewport->{controlpopup} = $where;
}
else
{ # These two are grouped into a separate frame which is repacked
# when needed. The controls do not need to be repacked ever.
$viewport->getSlideControl->pack(-fill => 'both', -anchor => 'n');
$viewport->getTagControl->pack(-fill => 'both', -anchor => 'n');
}
$viewport->packViewport;
}
sub getProgressBar() {shift->{progressbar}->getBar}
sub getSlideBar() {shift->{slidebar}->getBar}
sub getNeighbours() {shift->{neighbours}->getBar}
sub getSlideControl() {shift->{slidecontrol}->getControl}
sub getTagControl() {shift->{tagcontrol}->getControl}
sub setPhase($$)
{ my $viewport = shift;
$viewport->{phases}->setPhase($viewport->{-showPhases} ? (@_) : (0,0));
}
sub remove_controls()
{ my $viewport = shift;
$viewport->{-showPhases} = 0;
$viewport->{-showProgressBar} = 0;
$viewport->{-showSlideButtons} = 0;
$viewport->{-showNeighbours} = 0;
$viewport->packViewport;
}
sub add_controls()
{ my $viewport = shift;
$viewport->{-showPhases} = 1;
$viewport->{-showProgressBar} = 1;
$viewport->{-showSlideButtons} = 1;
$viewport->{-showNeighbours} = 1;
$viewport->packViewport;
}
sub showControls($)
{ my ($viewport, $do_show) = @_;
$do_show ? $viewport->add_controls : $viewport->remove_controls;
$viewport;
}
sub busy($)
{ my ($viewport, $on) = @_;
$on ? $viewport->{screen}->Busy : $viewport->{screen}->Unbusy;
$viewport;
}
sub packViewport()
{ my $viewport = shift;
# Take all widgets from the viewport.
my $screen = $viewport->{screen};
my @components = $screen->packSlaves;
@components && map {$_->packForget} @components;
# Create a normal viewport.
# Put on the viewport what we need now.
$viewport->getProgressBar->pack(-side => 'bottom', -fill => 'x')
if $viewport->{-showProgressBar};
$viewport->getSlideBar->pack(-side => 'bottom', -fill => 'x')
if $viewport->{-showSlideButtons};
$viewport->getNeighbours->pack(-side => 'bottom', -fill => 'x')
if $viewport->{-showNeighbours};
$viewport->{controlframe}->pack(-side => 'right', -fill => 'y' )
if exists $viewport->{controlframe};
$viewport->{playfield}->pack(-side => 'left', -fill =>'both', -expand=>1);
$viewport->{show}->showSlide('THIS'); # Recompute: often resize needed.
$viewport;
}
sub hasControl() { 1 } # yes.
sub clockTic($$)
{ my ($viewport, $interval, $current_slide) = @_;
$viewport->{slidecontrol}->clockTic($interval, $current_slide);
$viewport->{progressbar}->clockTic($interval);
}
sub update($$)
{ my ($viewport, $show, $slide) = @_;
# Update neighbours.
my ($back,$forward) = ($show->previousSelected, $show->nextSelected);
my $left = defined $back ? "$back" : '';
my $right = defined $forward ? "$forward" : '';
$viewport->{neighbours}->update($left, "$slide", $right);
$viewport->{slidebar}->update($slide);
$viewport->{progressbar}
->expectedArrival($viewport->{slidebar}->endOfSlide);
$viewport;
}
sub slideSelectionChanged()
{ my $viewport = shift;
$viewport->{slidebar}->reconstruct;
$viewport->{slidecontrol}->selectionChanged;
$viewport->{tagcontrol}->selectionChanged;
$viewport;
( run in 2.090 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )