App-termpub

 view release on metacpan or  search on metacpan

lib/App/termpub/Pager.pm  view on Meta::CPAN

    }
}

sub prev_line {
    my $self = shift;
    if ( $self->line != 0 ) {
        $self->line( $self->line - 1 );
        $self->update_screen;
    }
}

sub first_page {
    my $self = shift;
    $self->set_mark;
    $self->line(0);
    $self->update_screen;
}

sub last_page {
    my $self = shift;
    $self->set_mark;
    my $line = $self->pad_rows - $self->rows + 1;
    $self->line( $line >= 0 ? $line : 0 );
    $self->update_screen;
}

sub next_page {
    my $self = shift;
    $self->set_mark;
    if ( $self->line + $self->rows <= $self->pad_rows ) {
        $self->line( $self->line + $self->rows );
        $self->update_screen;
        return 1;
    }
    return 0;
}

sub prev_page {
    my $self = shift;
    $self->set_mark;
    if ( $self->line == 0 && $self->chapter - 1 >= 0 ) {
        return 0;
    }

    if ( $self->line - $self->rows > 0 ) {
        $self->line( $self->line - $self->rows );
    }
    else {
        $self->line(0);
    }
    $self->update_screen;
    return 1;
}

sub get_percent {
    my $self = shift;
    return 0 if !$self->pad_rows;
    int( ( $self->line + 1 ) * 100 / $self->pad_rows );
}

sub update_screen {
    my $self = shift;
    clear;
    refresh;
    prefresh( $self->pad, $self->line, 0, 0, 0, $self->rows - 1,
        $self->pad_columns );

    my $status = '-' x $self->columns;

    substr( $status, 0, length( $self->title ) ) = $self->title;

    my $pos = $self->get_percent . '%';
    if ( $self->line + $self->rows - 1 >= $self->pad_rows ) {
        $pos = "end";
    }
    $pos = "($pos)";

    substr( $status, -length($pos) - 2, length($pos) ) = $pos;

    move( $self->rows, 0 );
    addstring($status);

    move( $self->rows, 0 );
    chgat( -1, A_STANDOUT, 0, 0 );
}

1;



( run in 1.132 second using v1.01-cache-2.11-cpan-39bf76dae61 )