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 )