FileDocCategorySizeDatePackage
ProgressBar.javaAPI DocJMF 2.1.1e1779Mon May 12 12:20:52 BST 2003com.sun.media.ui

ProgressBar.java

/*
 * @(#)ProgressBar.java	1.5 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

package com.sun.media.ui;

import java.awt.*;
import javax.media.*;

public class ProgressBar extends Slider {

    private CachingControl      cc = null;
    private Color               cb, cd, cm;
    private ProgressBarThread   threadUpdate;

    public ProgressBar(CachingControl cc) {
	this.cc = cc;
	setGrabberVisible(false);
	setBackground(DefaultControlPanel.colorBackground);

        threadUpdate = new ProgressBarThread ( this, cc );
        threadUpdate.start();
    }

    public void update(Graphics g) {
	paint(g);
    }

    public void paint(Graphics g) {
	if (cc == null)
	    super.paint(g);
	else {
	    long len = cc.getContentLength();
	    long progress = cc.getContentProgress();

	    if (len < 1) {
		return;
	    }

	    if (progress > len)
		len = progress;

	    setDisplayPercent((int)(100 * progress / len));
	    super.paint(g);
	}
    }
}


class ProgressBarThread extends Thread {

    private Component           progressBar;
    private CachingControl      cachingControl;
    private long                lengthContent;


    public ProgressBarThread ( Component progressBar, CachingControl cachingControl ) {
        this.progressBar = progressBar;
        this.cachingControl = cachingControl;

        lengthContent = cachingControl.getContentLength();
    }

    public void run () {
        long    lengthProgress = 0;

        while ( lengthProgress < lengthContent ) {
            try {
                sleep ( 300 );
            }
            catch ( Exception exception ) {
            }

            lengthProgress = cachingControl.getContentProgress();
            progressBar.repaint();
        }
    }
}