/usr/local/CPAN/PPresenter/PPresenter/Viewport/SlideControl.pm


# Copyright (C) 2000-2002, Free Software Foundation FSF.

#
# SlideControl
# A window which shows the available slides plus required and used
# time.

package PPresenter::Viewport::SlideControl;

use strict;
use Tk;
use Tk::LabFrame;
use Tk::Table;
use PPresenter::tkTimerLabel;

sub new($$$)
{   my ($class, $show, $info, $screen) = @_;

    my $control = $screen->LabFrame
        ( -label       => 'slides'
        , -labelside   => 'acrosstop'
        );

    my $self = bless
       { show    => $show
       , info    => $info
       , control => $control
       }, $class;

    my $totaltime = $show->{-totaltime};
    my @slides    = $show->slides;

    my $table = $control->Table
        ( -scrollbars => (@slides < 15 ? '' : 'w')
        , -rows       => 15
        , -fixedrows  => 1
        )->pack(-side => 'left');

    my $row = 0;

    $self->{sumtime} = $table->TimerLabel
        ( -value      => 0
        , -maxValue   => $totaltime
        , -colorScale => $info->{-progressColors}
        );
    $table->put($row, 0, $self->{sumtime});

    $self->{selected_text} = '';
    $table->put($row, 1, $table->Label
        ( -textvariable => \$self->{selected_text}
        , -justify    => 'left'
        ));

    $self->{runtime} = $table->TimerLabel
        ( -value      => 0
        , -maxValue   => $totaltime
        , -colorScale => $info->{-progressColors}
        );
    $table->put($row++, 2, $self->{runtime});

    foreach my $slide (@slides)
    {   my ($max, $name, $spent) = $slide->statusButtons($show, $table,
           , $info->{-progressColors}
           , [ sub {$show->showSlide($_[0])}, $slide->number ]
           );

        push @{$self->{spent_buttons}}, $spent;
        $table->put($row, 0, $max);
        $table->put($row, 1, $name);
        $table->put($row, 2, $spent);
        $row++;
    }

    $self;
}

sub getControl() {$_[0]->{control}}

sub selectionChanged()
{   my $self          = shift;

    my $control       = $self->{control};

    my $sumtime         = 0;
    my $selected_slides = 0;

    foreach ($self->{show}->slides)
    {   next unless $_->isActive;
        $sumtime += $_->requiredTime;
        $selected_slides++;
    }

    $self->{selected_text}   = sprintf "$selected_slides slides on";
    $self->{sumtime}->setValue($sumtime);

    $self;
}

sub clockTic($$)
{   my ($self, $interval, $current_slide) = @_;

    $self->{runtime}->configure(-step => $interval);
    $self->{spent_buttons}[$current_slide->number]
         ->configure(-step => $interval);
}

1;