The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

FLTK::Cookbook::ProgressBar::Process - Update the user while processing in the background

Description

Demonstrates how to update a progress bar within a cpu intensive operation without threads.

The Code

    use strict;
    use warnings;
    use FLTK qw[check run];

    # Button callback
    sub btn_cb {
        my ($self, $w) = @_;

        # Deactivate the button
        $self->deactivate();    # prevent button from being pressed again
        check();                # give fltk some cpu to gray out button

        # Make the progress bar
        $w->begin();            # add progress bar to parent window.
        my $progress = FLTK::ProgressBar->new(10, 50, 200, 30);
        $progress->minimum(0);  # set progress bar attribs.
        $progress->maximum(1);
        $w->end();              # end of adding to window

        # Computation loop..
        for my $t (1 .. 20) {
            $progress->position($t / 20);    # update progress bar
            check();     # give fltk some cpu to update the screen
            sleep(1);    # 'your stuff' that's compute intensive
            last if !$w->visible;    # stop if the window has closed
        }

        # Cleanup
        $progress
            ->destroy;    # remove progress bar from window and deallocate it
        $self->activate();   # reactivate button
        $w->redraw();        # tell window to redraw now that progress removed
    }

    # main
    my $win = FLTK::Window->new(220, 90);
    my $btn = FLTK::Button->new(10, 10, 100, 25, 'Press');
    $btn->callback(\&btn_cb, $win);
    $win->add($btn);
    $win->resizable($win);
    $win->show();
    exit run();

Awknowlegements

Code based on the work of Greg Ercolano

Author

Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/

License and Legal

Copyright (C) 2008-2009 by Sanko Robinson <sanko@cpan.org>

This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the LICENSE file included with this distribution or http://www.perlfoundation.org/artistic_license_2_0. For clarification, see http://www.perlfoundation.org/artistic_2_0_notes.

When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.